Those Who Swift - Issue 289
Weekly note ✏️The tricky platform changes are often the ones nobody on your team explicitly chose. A build tool changes its default, Swift accepts new syntax, or Apple updates a review rule. Each change looks small on its own, but any of them can affect what you ship. Hit reply and tell me: when has a change you barely noticed ended up costing you time? The AI Agent for Your RevenueCat DataMeet Rico, RevenueCat's embedded AI app growth advisor for subscription apps. Ask questions about churn, trials, pricing, paywalls, or retention and get answers using your app's real subscription data directly inside RevenueCat and Slack. Built to help iOS developers make smarter monetization decisions faster. The Defaults Changedwith Divya Ravi — Technical Editor Most platform changes are easy to spot. A deprecated API gives you a warning. A removed API breaks the build. A new feature gets announced at WWDC. You have a signal, and you can decide what to do with it. The changes that catch me out are the ones that quietly become the new default. Dave Verwer’s update to the Swift Package Index is a good example. The index now builds with Swift 6.4, and SwiftPM has moved to Swift Build as its default build system. Verwer calls out the risk for package authors: platform-specific failures may surface after the switch. Your package hasn’t changed, but the build environment has. If CI only covers the platforms you use every day, the first report may come from a configuration you rarely run. Sarun Wongpatcharapakorn’s write-up of SE-0521 is a smaller example, but it makes the same point. In Swift 6.4, a trailing Then there are changes that don’t live in the compiler at all. Apple’s October 16 App Review Guidelines update adds a rule for creative assets and moves the restriction on hidden or undocumented features to a new section, 2.5.19. Apple’s update says an app can’t change after approval to add features that weren’t presented during review. Guideline 1.2 also expands to cover nonconsensual intimate imagery, including AI-generated imagery. A few days earlier, Apple revised the Developer Program License Agreement with updated security requirements and new terms covering the Live Assistance API, the App Replacement Entitlement, multiseat subscriptions, and widgets and CarPlay on Apple HomeView. Developers need to sign in and accept the revised terms. I can’t say I read every release note, guideline, or agreement in full as soon as it lands. Most engineers don’t. We scan release notes for the APIs we use, search policy documents when something comes up, and click through agreements because we need to keep shipping. That is understandable, but it leaves room for assumptions to go stale. My point is simple: a loud failure gives you a useful starting point. You know something broke, and you can usually identify when. The more expensive changes are the ones that quietly change the conditions for success. A package builds on the old system but fails on the new one. A feature works today but can’t be added after review. A contract changes what your product is allowed to do. Treat release notes and policy updates as diffs against the assumptions your product depends on. Pick one change this week—the SwiftPM default, the review guideline that applies to your app, or a license term that touches your product—and ask what you would need to change if it were enforced strictly tomorrow. It should take ten minutes. If nothing changes, you’ve confirmed that. If something does, you’ve found the work before it blocks a release. What’s the last default that changed underneath you? Hit reply. I’d like to hear what happened and how you caught it. Related reading on this week's theme 📚Swift 6.4 Support and the Move to Swift BuildDave Verwer announces Swift 6.4 support in the Swift Package Index and flags a practical risk: SwiftPM’s new default build system may expose platform-specific failures. Run CI across the platforms you support rather than waiting for a package consumer to find the problem. 📍Level: Intermediate some View? without parentheses in Swift 6.4Sarun Wongpatcharapakorn explains SE-0521: in Swift 6.4, a trailing 📍Level: Beginner Updated App Review Guidelines are now availableApple’s October 16 update adds a creative-assets guideline (2.3.14), moves the hidden-or-undocumented-features rule to 2.5.19, and expands Guideline 1.2 to cover nonconsensual intimate imagery, including AI-generated imagery. The revised wording is worth checking if your app’s behavior or content changes after review. Updated Apple Developer Program License Agreement now availableThe revised agreement updates security requirements in Section 3.2 and adds terms for the Live Assistance API, the App Replacement Entitlement, widgets and CarPlay on Apple HomeView, and multiseat subscriptions. Sign in to your developer account to review and accept the updated terms. This Week in Those Who Swift 🗞️The latest across Swift, Apple, AI, and the community. Swift Around the Web 🌐Swift Actor Reentrancy: Stop Duplicate Network RequestsMohit Agrawal explains why an actor-based image cache can still issue duplicate downloads. An actor may run other work while the first request is suspended, so checking the cache before awaiting isn’t enough. Keeping track of in-flight tasks lets callers share a request, with cancellation and invalidation handled explicitly. 📍Level: Advanced enumerated() Gives You an Offset, Not an Index
📍Level: Intermediate Coding 👨💻Failures that don't crash never reach youCrash reporting only captures a subset of failures. If an app handles an error and shows a failure screen, there may be no crash report to inspect. Kou added a Copy Details button to VertiCut that exports a redacted diagnostic report; for one real-device issue, that report was the only useful evidence. 📍Level: Intermediate How to stream iOS simulator logs to your AI coding agentIt talks about a common problem with AI coding agents in iOS development: they can’t easily see what happens when an app runs, which makes debugging difficult. Inside the article, Daniel compares different ways to give agents access to simulator logs, with practical examples. 📍Level: Intermediate The boss fight, part 1: a known issue, not a skipped testLismond Bernard uses Swift Testing’s 📍Level: Intermediate Apple 🍏Meet Apple HomeView, a new way to enjoy entertainment, stay connected, and manage the homeApple announced a 7-inch home display with a built-in speaker for media, calls, and smart-home controls powered by Siri. Pre-orders are open, with sales starting November 13 in select countries. The updated developer agreement already includes terms for widgets and CarPlay on HomeView. What's new in Apple designApple’s design guidance was updated October 13 with new HomeView guidance, updated watchOS widget specifications, and changes for limited-width layouts and platform specifications in Live Activities. Worth reviewing if your app ships widgets or Live Activities. AI & Tooling 🤖Pragmatic Testing for AgentsSerg Dort asks a coding agent to reduce an iOS app’s test suite from 1,224 tests to 846 using ideas from Orta Therox’s Pragmatic Testing. He then checks per-function coverage and uses mutation testing to find an important test the agent removed. The useful lesson: test-count reduction needs verification, not just a plausible diff. 📍Level: Advanced Calming Down Claude's Code ReviewsJoe Fabisevich found that his automated Claude reviews on GitHub were long and full of low-value commentary. A 📍Level: Beginner Claude Code for iOS developmentAfter building three iOS apps mostly with Claude Code, Roland Leth shares practical workflows for running the simulator, writing tests that don’t simply repeat the implementation’s assumptions, and automating App Store screenshots, preview videos, and A/B tests. 📍Level: Intermediate Who Is the Real Threat to AI-Relay Apps?Fatbobman looks at the risk for apps that mainly wrap third-party cloud models: the model providers can build similar features themselves. His argument is that an app needs to offer value beyond access to a particular model, because the underlying model can change—or become a direct competitor. 📍Level: Intermediate Design🎨Making custom SwiftUI controls accessible with accessibilityRepresentationNatascha Fadeeva shows how to give a custom-drawn waveform scrubber the accessibility behavior of a native 📍Level: Intermediate Tutorials 📒Simplifying Sorting, Filtering, and Pagination in SwiftUI Using HotelQueryMohammad Azam groups a SwiftUI hotel app’s sorting, filtering, and page-size options into a single 📍Level: Intermediate When to Use a View Model in SwiftUI (and When It's Overkill)Karin Prater uses four examples to show when a SwiftUI view model earns its place: real view logic, shared state, or state that must outlive the view. For static content and simple reusable components, adding another type can create structure without solving a real problem. 📍Level: Beginner Community 🤝I Shipped an iPhone Duo App Before I Had the Phone. Thanks, App Reviewer.Junda Ong used AI agents to build and publish Protractor° without writing the code himself. When App Review rejected the app, Codex helped update its name and metadata before resubmission. It’s a useful look at the work that still remains around an agent-built app: review feedback, product details, and getting a release over the line. 📍Level: Beginner Why I still shun passkeysJeff Johnson explains why he avoids passkeys: on macOS, his workflow depends on backups that conflict with his use of iCloud Keychain, and signing in on devices he doesn’t own can be awkward. It’s a useful counterpoint when weighing passkey adoption against the recovery and device-sharing workflows users actually have. 📍Level: Intermediate Thanks for reading Those Who Swift! Subscribe for free to receive new posts. 👇
|


