<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Paulo's blog feed — iOS</title>
        <link>https://pfandrade.me/tags/ios/</link>
        <description>Blog post summaries tagged with "iOS"</description>
        <lastBuildDate>Wed, 14 Jan 2026 11:38:30 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>Next.js using Feed</generator>
        <item>
            <title><![CDATA[Swift Modules and Code/Assets Duplication]]></title>
            <link>https://pfandrade.me/blog/swift-modules-and-codeassets-duplication/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/swift-modules-and-codeassets-duplication/</guid>
            <pubDate>Wed, 07 Jan 2026 11:46:00 GMT</pubDate>
            <description><![CDATA[How to use SPM modules in an Xcode project with several targets and avoid duplicated code and assets.]]></description>
        </item>
        <item>
            <title><![CDATA[Swift Build Times and Module Verification…]]></title>
            <link>https://pfandrade.me/blog/swift-build-times-and-module-verification/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/swift-build-times-and-module-verification/</guid>
            <pubDate>Mon, 26 Aug 2024 10:07:25 GMT</pubDate>
            <description><![CDATA[A diagnostic of slow Swift build times after modularizing, focusing on module verification and practical fixes to speed up compilation.]]></description>
        </item>
        <item>
            <title><![CDATA[Mixing Swift, Objective-C, SPM and Static Frameworks]]></title>
            <link>https://pfandrade.me/blog/mixing-swift-objective-c-spm-and-static-frameworks/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/mixing-swift-objective-c-spm-and-static-frameworks/</guid>
            <pubDate>Mon, 07 Mar 2022 13:35:25 GMT</pubDate>
            <description><![CDATA[Describes problems and solutions when integrating Swift packages into an Objective-C project structure that uses static frameworks.]]></description>
        </item>
        <item>
            <title><![CDATA[Tweaking Animation Timing]]></title>
            <link>https://pfandrade.me/blog/tweaking-animation-timing/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/tweaking-animation-timing/</guid>
            <pubDate>Thu, 22 Jul 2021 13:00:25 GMT</pubDate>
            <description><![CDATA[Techniques for adjusting animation timing using custom timing functions to achieve more natural, spring-like motion.]]></description>
        </item>
        <item>
            <title><![CDATA[Generic View Controllers with Storyboards]]></title>
            <link>https://pfandrade.me/blog/generic-view-controllers-with-storyboards/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/generic-view-controllers-with-storyboards/</guid>
            <pubDate>Fri, 05 Feb 2021 18:10:25 GMT</pubDate>
            <description><![CDATA[Patterns and practical workarounds for using generic view controllers with storyboards when the storyboard needs a concrete class.]]></description>
        </item>
        <item>
            <title><![CDATA[AnyDecodable]]></title>
            <link>https://pfandrade.me/blog/anydecodable/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/anydecodable/</guid>
            <pubDate>Wed, 12 Feb 2020 15:40:25 GMT</pubDate>
            <description><![CDATA[Presents `AnyDecodable`, a flexible approach to decoding JSON with `Codable` when the exact types are unknown ahead of time.]]></description>
        </item>
        <item>
            <title><![CDATA[Splitting Your Xcode Project into Modules]]></title>
            <link>https://pfandrade.me/blog/splitting-your-xcode-project-into-modules/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/splitting-your-xcode-project-into-modules/</guid>
            <pubDate>Thu, 06 Feb 2020 14:08:25 GMT</pubDate>
            <description><![CDATA[Practical steps to modularize an Xcode project into separate frameworks and common pitfalls related to linking and build flags.]]></description>
        </item>
        <item>
            <title><![CDATA[Unsafe Swift]]></title>
            <link>https://pfandrade.me/blog/unsafe-swift/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/unsafe-swift/</guid>
            <pubDate>Tue, 07 Jan 2020 15:24:25 GMT</pubDate>
            <description><![CDATA[A tutorial-style deep dive into working with unsafe pointers in Swift—memory layout, buffers, and patterns to work safely.]]></description>
        </item>
        <item>
            <title><![CDATA[@DynamicFont]]></title>
            <link>https://pfandrade.me/blog/dynamicfont/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/dynamicfont/</guid>
            <pubDate>Wed, 18 Sep 2019 10:30:25 GMT</pubDate>
            <description><![CDATA[Describes a Swift UI component to centralize font choices and support Dynamic Type and Dark Mode consistently across the app.]]></description>
        </item>
        <item>
            <title><![CDATA[Thoughts on WWDC 19]]></title>
            <link>https://pfandrade.me/blog/thoughts-on-wwdc-19/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/thoughts-on-wwdc-19/</guid>
            <pubDate>Fri, 07 Jun 2019 15:10:25 GMT</pubDate>
            <description><![CDATA[Post-WWDC reflections highlighting notable platform updates and a closer look at SwiftUI.]]></description>
        </item>
        <item>
            <title><![CDATA[Search Scopes in Xcode]]></title>
            <link>https://pfandrade.me/blog/search-scopes-in-xcode/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/search-scopes-in-xcode/</guid>
            <pubDate>Wed, 03 Apr 2019 14:10:25 GMT</pubDate>
            <description><![CDATA[A practical guide to Xcode's Find features with an emphasis on using search scopes to speed up code navigation.]]></description>
        </item>
        <item>
            <title><![CDATA[Late Responders — Sidestepping The Responder Chain]]></title>
            <link>https://pfandrade.me/blog/late-responders-sidestepping-the-responder-chain/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/late-responders-sidestepping-the-responder-chain/</guid>
            <pubDate>Wed, 13 Mar 2019 16:07:08 GMT</pubDate>
            <description><![CDATA[Explains how the responder chain can cause surprising behavior and techniques to sidestep those issues in Cocoa apps.]]></description>
        </item>
        <item>
            <title><![CDATA[Inverted Expectations]]></title>
            <link>https://pfandrade.me/blog/inverted-expectations/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/inverted-expectations/</guid>
            <pubDate>Thu, 14 Feb 2019 15:53:25 GMT</pubDate>
            <description><![CDATA[A pattern for asserting that something did *not* happen in tests, and how to write reliable inverted expectations.]]></description>
        </item>
        <item>
            <title><![CDATA[Xcode: Comparing Build Settings]]></title>
            <link>https://pfandrade.me/blog/xcode-comparing-build-settings/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/xcode-comparing-build-settings/</guid>
            <pubDate>Thu, 31 Jan 2019 10:36:25 GMT</pubDate>
            <description><![CDATA[Practical tips for comparing and reasoning about Xcode build settings, from long-term usage experience.]]></description>
        </item>
        <item>
            <title><![CDATA[iPad Pro — First Impressions]]></title>
            <link>https://pfandrade.me/blog/ipad-pro-first-impressions/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/ipad-pro-first-impressions/</guid>
            <pubDate>Sat, 05 Jan 2019 20:08:25 GMT</pubDate>
            <description><![CDATA[Hands-on first impressions of the iPad Pro—speed, keyboard, Face ID, and the state of app support.]]></description>
        </item>
        <item>
            <title><![CDATA[Building Expectations]]></title>
            <link>https://pfandrade.me/blog/building-expectations/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/building-expectations/</guid>
            <pubDate>Mon, 17 Dec 2018 14:59:25 GMT</pubDate>
            <description><![CDATA[Introduces a simple Expectation object (backed by `NSCondition`) for waiting on asynchronous tasks outside of XCTest.]]></description>
        </item>
        <item>
            <title><![CDATA[The 2018 iPad Pro]]></title>
            <link>https://pfandrade.me/blog/the-2018-ipad-pro/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/the-2018-ipad-pro/</guid>
            <pubDate>Wed, 14 Nov 2018 15:36:25 GMT</pubDate>
            <description><![CDATA[First impressions of the 2018 iPad Pro—what works, what doesn't, and how it shapes the iPad's role as a post-PC device.]]></description>
        </item>
        <item>
            <title><![CDATA[Rewinding Animations]]></title>
            <link>https://pfandrade.me/blog/rewinding-animations/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/rewinding-animations/</guid>
            <pubDate>Tue, 09 Oct 2018 11:38:43 GMT</pubDate>
            <description><![CDATA[A short tip on how to run spring animations in reverse (for example by using a negative speed) and why that helps achieve natural UI effects.]]></description>
        </item>
        <item>
            <title><![CDATA[NSOperation KVO Pitfall]]></title>
            <link>https://pfandrade.me/blog/nsoperation-kvo-pitfall/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/nsoperation-kvo-pitfall/</guid>
            <pubDate>Fri, 01 Jun 2018 08:43:42 GMT</pubDate>
            <description><![CDATA[A deep-dive into an NSOperation KVO bug and practical guidance on managing asynchronous operation state to prevent hangs.]]></description>
        </item>
        <item>
            <title><![CDATA[The Developers Union]]></title>
            <link>https://pfandrade.me/blog/the-developers-union/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/the-developers-union/</guid>
            <pubDate>Tue, 22 May 2018 09:20:18 GMT</pubDate>
            <description><![CDATA[A call for developers to organize and advocate for App Store changes—like free trials—that can improve sustainability for users and creators.]]></description>
        </item>
        <item>
            <title><![CDATA[Taming Build Variants With Xcode Configuration Files]]></title>
            <link>https://pfandrade.me/blog/taming-build-variants-with-xcode-configuration-files/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/taming-build-variants-with-xcode-configuration-files/</guid>
            <pubDate>Tue, 10 Apr 2018 11:01:38 GMT</pubDate>
            <description><![CDATA[How to manage multiple Xcode build configurations with .xcconfig files so build settings stay maintainable and preprocessor logic stays readable.]]></description>
        </item>
        <item>
            <title><![CDATA[Rate Limiting Using a Token Bucket in Swift]]></title>
            <link>https://pfandrade.me/blog/rate-limiting-using-a-token-bucket-in-swift/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/rate-limiting-using-a-token-bucket-in-swift/</guid>
            <pubDate>Fri, 16 Mar 2018 10:30:24 GMT</pubDate>
            <description><![CDATA[A practical guide to implementing a token bucket in Swift to rate-limit work without fragile timers or runloop dependencies.]]></description>
        </item>
        <item>
            <title><![CDATA[Managing iOS UI Testing Fixtures]]></title>
            <link>https://pfandrade.me/blog/managing-ios-ui-testing-fixtures/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/managing-ios-ui-testing-fixtures/</guid>
            <pubDate>Sun, 22 Oct 2017 17:31:37 GMT</pubDate>
            <description><![CDATA[Practical techniques for creating and sharing deterministic fixtures for iOS UI tests, helping avoid flakiness and sandboxing pitfalls.]]></description>
        </item>
    </channel>
</rss>