<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Vedran Burojevic | Blog</title><description>Articles about iOS development, Swift, SwiftUI, and mobile engineering best practices.</description><link>https://vburojevic.dev/</link><language>en-us</language><item><title>Image loading on iOS: caching, decoding, and the mistakes that make scrolling worse</title><link>https://vburojevic.dev/blog/ios-image-loading-caching-decoding-scrolling/</link><guid isPermaLink="true">https://vburojevic.dev/blog/ios-image-loading-caching-decoding-scrolling/</guid><description>A practical image-loading setup for iOS: cache the right thing, decode off the main thread, control request churn, and stop blaming scrolling jank on the collection view.</description><pubDate>Wed, 08 Apr 2026 17:30:00 GMT</pubDate><category>iOS</category><category>Performance</category><category>Networking</category><category>SwiftUI</category><category>Swift</category></item><item><title>Building a SwiftUI design system without overengineering it</title><link>https://vburojevic.dev/blog/swiftui-design-system-without-overengineering/</link><guid isPermaLink="true">https://vburojevic.dev/blog/swiftui-design-system-without-overengineering/</guid><description>A 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.</description><pubDate>Sun, 05 Apr 2026 17:30:00 GMT</pubDate><category>iOS</category><category>Swift</category><category>SwiftUI</category><category>Design Systems</category><category>Architecture</category></item><item><title>Deep links on iOS: a setup that stays maintainable</title><link>https://vburojevic.dev/blog/ios-deep-links-maintainable/</link><guid isPermaLink="true">https://vburojevic.dev/blog/ios-deep-links-maintainable/</guid><description>A 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.</description><pubDate>Wed, 01 Apr 2026 17:30:00 GMT</pubDate><category>iOS</category><category>Swift</category><category>Deep Linking</category><category>Architecture</category><category>Navigation</category></item><item><title>Snapshot testing in 2026: when it helps, when it lies, how to keep it sane</title><link>https://vburojevic.dev/blog/snapshot-testing-2026-sane/</link><guid isPermaLink="true">https://vburojevic.dev/blog/snapshot-testing-2026-sane/</guid><description>Snapshot 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.</description><pubDate>Sun, 29 Mar 2026 17:30:00 GMT</pubDate><category>iOS</category><category>Testing</category><category>XCTest</category><category>SwiftUI</category><category>Architecture</category></item><item><title>Modern iOS testing stack: fast unit tests + stable UI tests + strategy</title><link>https://vburojevic.dev/blog/ios-testing-stack-fast-stable/</link><guid isPermaLink="true">https://vburojevic.dev/blog/ios-testing-stack-fast-stable/</guid><description>A 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.</description><pubDate>Wed, 25 Mar 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Testing</category><category>Swift</category><category>CI</category><category>Architecture</category></item><item><title>Feature flags: safe rollouts without shipping fear</title><link>https://vburojevic.dev/blog/ios-feature-flags-safe-rollouts/</link><guid isPermaLink="true">https://vburojevic.dev/blog/ios-feature-flags-safe-rollouts/</guid><description>A practical feature flag setup for iOS: separate release, experiment, and kill-switch flags, keep evaluation deterministic, and avoid the cleanup debt that turns rollout safety into product entropy.</description><pubDate>Sun, 22 Mar 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Feature Flags</category><category>Swift</category><category>Release Engineering</category><category>Reliability</category></item><item><title>Background tasks in 2026: what works, what gets throttled, and how to be reliable</title><link>https://vburojevic.dev/blog/ios-background-tasks-2026/</link><guid isPermaLink="true">https://vburojevic.dev/blog/ios-background-tasks-2026/</guid><description>A practical guide to background work on iOS in 2026: where BGTaskScheduler helps, where the system throttles you, and how to design refresh and processing flows that stay reliable on real devices.</description><pubDate>Wed, 18 Mar 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Background Tasks</category><category>Swift</category><category>Performance</category><category>Reliability</category></item><item><title>Sendable pitfalls: what actually breaks, and how to redesign safely</title><link>https://vburojevic.dev/blog/sendable-pitfalls-redesign-safely/</link><guid isPermaLink="true">https://vburojevic.dev/blog/sendable-pitfalls-redesign-safely/</guid><description>Swift 6 surfaces Sendable problems exactly where values cross isolation boundaries. Here is what usually breaks, how to classify each error, and how to redesign ownership without hiding the problem behind @unchecked Sendable.</description><pubDate>Tue, 17 Mar 2026 01:32:00 GMT</pubDate><category>Swift</category><category>Swift 6</category><category>Concurrency</category><category>Sendable</category><category>iOS</category></item><item><title>Actors in practice: safe shared state without &quot;actor everywhere&quot; nonsense</title><link>https://vburojevic.dev/blog/actors-in-practice-safe-shared-state/</link><guid isPermaLink="true">https://vburojevic.dev/blog/actors-in-practice-safe-shared-state/</guid><description>A practical guide to Swift actors: where they help, where they hurt, and how to isolate shared state without turning your app into async soup.</description><pubDate>Wed, 11 Mar 2026 18:30:00 GMT</pubDate><category>Swift</category><category>Swift 6</category><category>Concurrency</category><category>Actors</category><category>iOS</category></item><item><title>Swift 6 strict concurrency migration: the staged plan that won’t brick your app</title><link>https://vburojevic.dev/blog/swift6-strict-concurrency-migration/</link><guid isPermaLink="true">https://vburojevic.dev/blog/swift6-strict-concurrency-migration/</guid><description>A practical migration plan for Swift 6 strict concurrency: baseline warnings, isolate boundaries, fix Sendable issues, and tighten checks without stalling delivery.</description><pubDate>Sun, 08 Mar 2026 18:30:00 GMT</pubDate><category>Swift</category><category>Swift 6</category><category>Concurrency</category><category>iOS</category><category>Migration</category></item><item><title>SwiftUI lists that don’t lag: identity, diffing, and avoiding layout thrash</title><link>https://vburojevic.dev/blog/swiftui-lists-that-dont-lag/</link><guid isPermaLink="true">https://vburojevic.dev/blog/swiftui-lists-that-dont-lag/</guid><description>Most SwiftUI list “performance problems” are self-inflicted: unstable identity, accidental view churn, and heavy layout work in rows. Here’s how to make lists fast, measurable, and boring.</description><pubDate>Thu, 05 Mar 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Swift</category><category>SwiftUI</category><category>Performance</category></item><item><title>AGENTS.md for iOS: guardrails that stop AI from breaking your app</title><link>https://vburojevic.dev/blog/agents-md-for-ios/</link><guid isPermaLink="true">https://vburojevic.dev/blog/agents-md-for-ios/</guid><description>Treat AI as a powerful, unreliable teammate. An AGENTS.md file gives it constraints, workflows, and verification steps that keep your iOS codebase stable and your PRs reviewable.</description><pubDate>Sun, 01 Mar 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Swift</category><category>Xcode</category><category>AI</category><category>Automation</category><category>Engineering Management</category></item><item><title>Slash commands that save hours: /build /test /perf /release-notes for iOS</title><link>https://vburojevic.dev/blog/ios-slash-commands-that-save-hours/</link><guid isPermaLink="true">https://vburojevic.dev/blog/ios-slash-commands-that-save-hours/</guid><description>Turn repetitive iOS workflows into reliable one-liners. Define a small set of slash commands that run the right builds, tests, and checks, and generate release notes without ceremony.</description><pubDate>Wed, 25 Feb 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Swift</category><category>Xcode</category><category>CI</category><category>Automation</category><category>Performance</category></item><item><title>Codex workflow for iOS: guardrails, repeatable loops, and how to keep the build green</title><link>https://vburojevic.dev/blog/codex-workflow-for-ios/</link><guid isPermaLink="true">https://vburojevic.dev/blog/codex-workflow-for-ios/</guid><description>A practical Codex-assisted workflow for iOS teams: define guardrails, run tight build and test loops, measure impact, and ship changes without breaking CI.</description><pubDate>Sun, 22 Feb 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Swift</category><category>Xcode</category><category>CI</category><category>Codex</category><category>Automation</category></item><item><title>Networking in modern iOS: typed endpoints, retries/backoff, and observability without bloat</title><link>https://vburojevic.dev/blog/ios-networking-typed-endpoints-observability/</link><guid isPermaLink="true">https://vburojevic.dev/blog/ios-networking-typed-endpoints-observability/</guid><description>A practical URLSession setup that scales: typed endpoints and decoding, retry rules that do not create duplicate side effects, and lightweight logging/metrics so you can measure reliability and latency.</description><pubDate>Wed, 18 Feb 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Networking</category><category>Swift</category><category>URLSession</category><category>Observability</category></item><item><title>Modern iOS testing stack: fast unit tests + UI tests that don’t flake</title><link>https://vburojevic.dev/blog/ios-testing-fast-and-stable/</link><guid isPermaLink="true">https://vburojevic.dev/blog/ios-testing-fast-and-stable/</guid><description>A pragmatic iOS testing setup: keep unit tests fast, make UI tests stable, and add one verification loop that catches regressions without turning CI into a lottery.</description><pubDate>Sun, 15 Feb 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Testing</category><category>XCTest</category><category>CI</category><category>Swift</category></item><item><title>App launch performance in 2026: first-frame thinking, cold-start budgets, and practical fixes</title><link>https://vburojevic.dev/blog/ios-app-launch-performance-2026/</link><guid isPermaLink="true">https://vburojevic.dev/blog/ios-app-launch-performance-2026/</guid><description>A practical way to measure iOS cold start and ship improvements: define a first-frame budget, diagnose the common failure modes, and verify changes with repeatable runs.</description><pubDate>Wed, 11 Feb 2026 18:30:00 GMT</pubDate><category>iOS</category><category>Performance</category><category>Launch</category><category>Instruments</category><category>Swift</category></item><item><title>StoreKit subscriptions in the real world: entitlements, edge cases, and recovery strategies</title><link>https://vburojevic.dev/blog/storekit-subscriptions-real-world/</link><guid isPermaLink="true">https://vburojevic.dev/blog/storekit-subscriptions-real-world/</guid><description>A practical StoreKit 2 approach for subscription gating that survives renewals, grace periods, restores, and the weird stuff you only see after launch.</description><pubDate>Tue, 10 Feb 2026 19:20:00 GMT</pubDate><category>iOS</category><category>StoreKit</category><category>StoreKit2</category><category>Subscriptions</category><category>Swift</category></item><item><title>SwiftUI animations that don’t glitch: transactions, explicit vs implicit, and performance-safe patterns</title><link>https://vburojevic.dev/blog/swiftui-animations-transactions/</link><guid isPermaLink="true">https://vburojevic.dev/blog/swiftui-animations-transactions/</guid><description>A practical SwiftUI animation guide: how transactions actually work, why animations disappear, and how to ship smooth UI without expensive re-renders.</description><pubDate>Sun, 01 Feb 2026 22:30:00 GMT</pubDate><category>SwiftUI</category><category>Animation</category><category>Performance</category><category>iOS</category><category>Swift</category></item><item><title>SwiftUI Observation performance: stop unwanted re-renders and measure what matters</title><link>https://vburojevic.dev/blog/swiftui-observation-performance/</link><guid isPermaLink="true">https://vburojevic.dev/blog/swiftui-observation-performance/</guid><description>Practical patterns for @Observable, avoiding accidental invalidations, and proving performance wins with measurement (not vibes).</description><pubDate>Sun, 01 Feb 2026 21:30:00 GMT</pubDate><category>SwiftUI</category><category>Observation</category><category>Performance</category><category>iOS</category><category>Swift</category></item><item><title>Swift Concurrency in Practice: Async/Await and Actors</title><link>https://vburojevic.dev/blog/swift-concurrency-async-await-actors/</link><guid isPermaLink="true">https://vburojevic.dev/blog/swift-concurrency-async-await-actors/</guid><description>Practical Swift concurrency patterns for async/await, actors, MainActor, Sendable, cancellation, and building responsive iOS apps without data races.</description><pubDate>Wed, 28 Jan 2026 09:00:00 GMT</pubDate><category>Swift</category><category>Concurrency</category><category>iOS</category><category>Async Await</category></item></channel></rss>