Snapp iOS Weekly
Hi folks,
This week’s thread is about making our tools and code easier to reason about: less project-file friction, backpressure that behaves as expected, and better signals when performance or agent workflows get messy. There’s also a fold-aware SwiftUI flower in here, because sometimes the best API demo is simply delightful.
Enjoy the mix!
Articles
Swift
Updating your Xcode project configuration file format
Xcode’s newer JSON project format gives our project configuration a shape that’s easier to inspect and work with than the traditional .pbxproj. Switching formats is a small File inspector change, but check your team’s Xcode version first: the JSON format requires Xcode 27.2 or later. A welcome cleanup for projects where the project file has become its own little language.
swift-async-algorithms: Backpressure at the Handoff
AsyncChannel makes a producer wait at send(_:) until a consumer is ready to receive, which is exactly the kind of pressure relief asynchronous pipelines need. The catch is worth knowing: that guarantee keeps a sequential producer from sprinting ahead, but lots of concurrent producer tasks can still pile up suspended. For configurable buffering and watermarks, the post points to MultiProducerSingleConsumerAsyncChannel—a useful distinction before our “bounded” pipeline quietly accumulates work elsewhere.
Find the Slow Spots in Your Code with the CPU Profiler Instrument
When an app feels sluggish, guessing at the culprit is a great way to waste an afternoon. This walkthrough uses Xcode Instruments’ CPU Profiler to record a trace, hide system libraries, invert the call tree, and sort by Self Cycles (Self Weight in older versions). That gets our attention onto the code actually consuming CPU, not the noisy framework calls surrounding it.
AI / ML
How the Xcode 27 MCP can lead to higher token costs when navigating the Simulator
Xcode 27’s MCP can do a lot including building and launching the app, but the extra context is not free. In the benchmark, Xcode MCP produced about 400 KB of agent-readable output versus 56 KB for an alternative approach across the tested scenarios—roughly seven times the estimated text tokens, though it used fewer calls and took similar time. Treat those numbers as a prompt to measure your own workflow, not a universal bill: the study estimates tokens from bytes, and actual cost depends on the model and how the agent uses the tools.
Why Tuist should build the harness on top of compute
Compute is becoming a commodity; the developer experience wrapped around it is where Tuist could stand out. Pedro makes the case for a native, agent-first harness on top of Tuist’s compute: bring your own model or token subscription, and let Tuist supply the environment and a better way to work—including from a phone. The interesting shift is from “where do we run CI?” to “what useful development work can we hand off and follow wherever we are?”
UI / UX
Tic Tac Toe in SwiftUI, Done Properly: Value-Type State, Win Detection and Minimax AI
Tic-tac-toe is tiny, but it’s a neat way to keep game rules from leaking all over a SwiftUI view. The example models the board as a value type, handles win and draw detection in the game logic, then adds a minimax opponent with alpha-beta pruning. A compact project with a surprisingly reusable lesson: make state and rules explicit first, and the interface gets much easier to reason about.
Driving SwiftUI animations with the hinge angle on iPhone Duo
A flower that blooms as an iPhone Duo opens is a lovely, concrete demo of onHingeChange: map the hinge angle to a 0–1 animation value, then let SwiftUI do the rest. The practical point is knowing when not to use it. Hinge updates suit motion-linked effects; for arranging content around the fold, reserved regions and ArrangementView provide the layout information we actually need without reacting to every angle change.
Utils
blueprint
Give your Debug builds an app icon that looks like Xcode’s blueprint-style icon, without hand-editing a pile of assets. This small macOS command-line tool handles both modern Icon Composer .icon files and classic .appiconset catalogs, keeping all the variants and sizes intact. Add a DEV, BETA, or release-candidate badge and custom colors, then point your Debug configuration at the generated icon—an easy bit of polish that makes the app we’re launching unmistakable.