Vedran Burojevic

2026

SwiftData in 2026: what's production-ready and what still hurtsA practical assessment of SwiftData on iOS 26: what works well, what is still rough, migration pitfalls, and when Core Data remains the safer call.10 min readModular iOS apps with Swift Package Manager: real boundaries, real build timesHow to break an iOS app into Swift Package modules that actually improve build times and team velocity, without over-engineering the dependency graph.11 min readNavigationStack in production: deep links, programmatic navigation, and state that survivesHow to use NavigationStack for real apps: wiring deep links, managing programmatic navigation paths, and keeping state restoration reliable across interruptions.11 min readState restoration on iOS: making interrupted flows reliableHow to preserve navigation, drafts, pending work, and user trust when iOS interrupts your app at the least convenient moment.9 min readDesigning agentic iOS features with clear user controlA practical model for agentic app features: explicit user intent, bounded tools, visible progress, confirmation points, and recoverable actions.6 min readFoundation Models in production: practical boundaries for on-device AIHow to decide which Foundation Models features belong on device, when to use Private Cloud Compute or a server model, and how to design reliable failure paths.12 min readWhy iOS apps start feeling flaky after launchFlaky apps are rarely cursed. They usually rot after launch because teams stop measuring reality, ignore lifecycle edges, treat networking as happy-path plumbing, and let small product decisions quietly break trust.10 min readConcurrency boundaries in networking and persistenceMost concurrency bugs in iOS apps are not race conditions in the textbook sense. They are boundary violations: the wrong actor touching the wrong layer at the wrong time.10 min readOffline-first on iOS: sync, conflicts, and earning user trustOffline-first is not a checkbox. It is a contract with the user about what happens when the network disappears, how conflicts get resolved, and whether their data is actually safe.9 min readSwiftUI forms that stay manageable as the product growsA maintainable SwiftUI form is not one giant view with thirty bindings and a prayer. Split by section ownership, keep drafts local, validate with intent, and stop letting product growth turn basic data entry into sludge.9 min readModeling app state so SwiftUI updates stay predictablePredictable SwiftUI starts with boring state boundaries: keep ownership clear, derive local view state instead of sharing giant models, and stop letting one write ripple through half the app.10 min readBuilding a SwiftUI design system without overengineering itA useful SwiftUI design system is not a giant abstraction layer. It is a small set of tokens, components, and rules that make product work faster without hiding the platform or freezing the app in theory.9 min readDeep links on iOS: a setup that stays maintainableA maintainable deep-linking setup comes from one rule: treat links as app routes with typed parsing, ownership boundaries, and tests, not as random URL handling scattered across the codebase.11 min readSnapshot testing in 2026: when it helps, when it lies, how to keep it saneSnapshot tests are useful when they protect stable UI or serialization contracts, but they become expensive noise the moment they start standing in for design review, product judgment, or weak lower-level tests.10 min readiOS testing strategy: test boundaries, promotion rules, and trustworthy signalA useful iOS testing stack is less about tool choice and more about test boundaries, promotion rules, and keeping slow checks rare enough that people still trust the signal.11 min read
← All writing

Command menu

Navigate the site or run an action