<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Paulo's blog feed — macOS</title>
        <link>https://pfandrade.me/tags/macOS/</link>
        <description>Blog post summaries tagged with "macOS"</description>
        <lastBuildDate>Sat, 09 May 2026 23:12:39 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>Next.js using Feed</generator>
        <item>
            <title><![CDATA[Using SwiftUI to Build a Mac-assed App in 2026]]></title>
            <link>https://pfandrade.me/blog/mac-assed-swiftui-app/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/mac-assed-swiftui-app/</guid>
            <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[More than five years after SwiftUI's release, how well does it hold up for building a first-class Mac app?]]></description>
        </item>
        <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[Pitfalls When Validating App Store Receipts on macOS]]></title>
            <link>https://pfandrade.me/blog/pitfalls-when-validating-app-store-receipts-on-macos/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/pitfalls-when-validating-app-store-receipts-on-macos/</guid>
            <pubDate>Thu, 23 Sep 2021 13:23:25 GMT</pubDate>
            <description><![CDATA[Explains common pitfalls when validating App Store receipts locally on macOS and why Apple's suggested approach can fail.]]></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[The Alert Hammer]]></title>
            <link>https://pfandrade.me/blog/the-alert-hammer/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/the-alert-hammer/</guid>
            <pubDate>Wed, 31 Jul 2019 15:30:25 GMT</pubDate>
            <description><![CDATA[A critique of macOS security alerts: why overuse of consent prompts harms usability and the goal of protecting users.]]></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[UI Testing and NSScrollView]]></title>
            <link>https://pfandrade.me/blog/ui-testing-and-nsscrollview/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/ui-testing-and-nsscrollview/</guid>
            <pubDate>Tue, 30 Apr 2019 19:10:25 GMT</pubDate>
            <description><![CDATA[A short solution for UI tests that need to interact with off-screen elements inside `NSScrollView`.]]></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[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[Quick TCP Server Using NSSocketPort]]></title>
            <link>https://pfandrade.me/blog/quick-tcp-server-using-nssocketport/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/quick-tcp-server-using-nssocketport/</guid>
            <pubDate>Mon, 22 Oct 2018 12:23:25 GMT</pubDate>
            <description><![CDATA[How to use `NSSocketPort` to spin up a simple TCP server for testing without adding heavyweight dependencies.]]></description>
        </item>
        <item>
            <title><![CDATA[Is There Hope for the Mac App Store?]]></title>
            <link>https://pfandrade.me/blog/is-there-hope-for-the-mac-app-store/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/is-there-hope-for-the-mac-app-store/</guid>
            <pubDate>Fri, 12 Oct 2018 09:21:25 GMT</pubDate>
            <description><![CDATA[A reflection on the Mac App Store's current problems and ideas for improvements that would help both users and developers.]]></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[Apple Events and the State of macOS Automation]]></title>
            <link>https://pfandrade.me/blog/apple-events-and-the-state-of-macos-automation/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/apple-events-and-the-state-of-macos-automation/</guid>
            <pubDate>Mon, 03 Sep 2018 13:41:53 GMT</pubDate>
            <description><![CDATA[An argument that Mojave's Apple Event authorization prompts harm automation and user experience, with suggestions for better approaches.]]></description>
        </item>
        <item>
            <title><![CDATA[Adopting Dark Mode and Older Macs]]></title>
            <link>https://pfandrade.me/blog/adopting-dark-mode-and-older-macs/</link>
            <guid isPermaLink="false">https://pfandrade.me/blog/adopting-dark-mode-and-older-macs/</guid>
            <pubDate>Wed, 13 Jun 2018 20:37:58 GMT</pubDate>
            <description><![CDATA[Approaches for adopting Dark Mode while keeping compatibility with older macOS versions and APIs.]]></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[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>