Snapp iOS Weekly
Hi folks,
Good abstractions make our apps easier to use, but they also make them easier to misunderstand. This week we’re looking under SwiftUI’s hood, fixing the little things that make an app feel broken, and seeing what happens when agents get a faster way to test native app behavior. Oh, and if CocoaPods is still in our build, it’s time to make a plan.
Enjoy!
Articles
Swift
What’s new in Swift: November 2026 Edition
CocoaPods will stop accepting new pods and versions on December 2, 2026. Existing dependencies should keep working, but a read-only ecosystem is a good reason to start moving our projects to SwiftPM. The Swift community roundup also covers proposals for build-configuration-dependent packages, task identity, and compilation caching, alongside some fun examples of Swift reaching beyond Apple platforms.
Codable synthesis for Swift enums
We don’t have to write a custom encoder just because an enum has associated values. Swift can synthesize Codable conformance, and nested coding keys let us rename cases and their values or leave cases out. The generated JSON has a particular shape, though, so it’s worth checking before we commit it to an API or a file format.
AI / ML
Finally, Apple Frees us from Domains
Siri integrations have long felt like a squeeze if our app didn’t fit one of Apple’s predefined domains. The new approach lets developers expose arbitrary App Intents as tools and provide Markdown skill files to guide their use. The exciting bit is Siri potentially combining those actions in a conversation instead of making us wire every workflow into a shortcut ourselves.
UI / UX
How SwiftUI Animates, and Where It Is Not Like UIKit
A SwiftUI animation and a UIKit animation can look identical while doing quite different work underneath. Measurements of a handful of properties show SwiftUI calculating animation values itself, with platform differences in how those updates run; UIKit and AppKit hand animation descriptions to the render server. The experiments, including blocked threads and screen recordings, are a great reminder not to turn a tidy mental model into an assumption about every platform.
SwiftUI Accessibility - Changing Layouts For Large Text Sizes
A horizontal layout can look fine right up until someone needs larger text. Switching between HStackLayout and VStackLayout with AnyLayout and dynamicTypeSize.isAccessibilitySize gives that content room to breathe. It’s a small change worth trying in our own apps, then checking at the largest accessibility sizes rather than trusting the default preview.
SwiftUI not restoring the window size on macOS
A Mac window that forgets its size on every launch is irritating, especially when SwiftUI is supposed to restore it for us. In this case, the culprit was a private view modifier applied directly to the WindowGroup content; making it internal fixed restoration. The explanation involving unstable private type names is an informed hypothesis, not a documented guarantee, but the debugging trail is useful if our own window keeps resetting.
Testing
XCTUnwrap in Swift - Stop Force Unwrapping in Unit Tests
A force unwrap in a test can turn a missing value into a crash instead of a useful failure. XCTUnwrap gives us the value when it exists and records a failure when it doesn’t, so the rest of the suite can keep running. If our project uses Swift Testing, #require serves the same purpose.
Utils
Reflex: an architecture for building mobile apps with agents
Shopify’s Reflex takes the simulator out of much of the agent feedback loop: a CLI reads screen state and sends actions to a headless app core. The iOS and Android implementations stay native, while the same behavior tests exercise both. That’s a substantial architectural commitment, but the idea of sharing tests rather than a cross-platform code layer is well worth a look—even if we don’t adopt the whole system.