41554 blogs · [ { "id": "01a087c1-0941-7270-86c7-694923da55db", "title": "How AI Made MessagePack Decoding 20% Faster in Swift", "url": "https://pfandrade.me/blog/message-packable/", "published_at": "2026-07-24T00:00:00+00:00" }, { "id": "01a087c1-0941-7270-86c7-694923f95602", "title": "A WWDC 26 Update on Building a Mac-assed App with SwiftUI", "url": "https://pfandrade.me/blog/swiftui-mac-assed-wwdc26-update/", "published_at": "2026-06-23T00:00:00+00:00" }, { "id": "01a087c1-0941-7270-86c7-69492423ff77", "title": "Using SwiftUI to Build a Mac-assed App in 2026", "url": "https://pfandrade.me/blog/mac-assed-swiftui-app/", "published_at": "2026-05-06T00:00:00+00:00" }, { "id": "01a087c1-0941-7270-86c7-694924db7e02", "title": "Swift Modules and Code/Assets Duplication", "url": "https://pfandrade.me/blog/swift-modules-and-codeassets-duplication/", "published_at": "2026-01-07T11:46:00+00:00" }, { "id": "01a087c1-0941-7270-86c7-69492510f00d", "title": "Swift Build Times and Module Verification…", "url": "https://pfandrade.me/blog/swift-build-times-and-module-verification/", "published_at": "2024-08-26T10:07:25+00:00" }, { "id": "01a087c1-0941-7270-86c7-694925aca05c", "title": "Mixing Swift, Objective-C, SPM and Static Frameworks", "url": "https://pfandrade.me/blog/mixing-swift-objective-c-spm-and-static-frameworks/", "published_at": "2022-03-07T13:35:25+00:00" }, { "id": "01a087c1-0941-7270-86c7-694925cdf54a", "title": "Pitfalls When Validating App Store Receipts on macOS", "url": "https://pfandrade.me/blog/pitfalls-when-validating-app-store-receipts-on-macos/", "published_at": "2021-09-23T13:23:25+00:00" }, { "id": "01a087c1-0941-7270-86c7-69492699f280", "title": "Tweaking Animation Timing", "url": "https://pfandrade.me/blog/tweaking-animation-timing/", "published_at": "2021-07-22T13:00:25+00:00" }, { "id": "01a087c1-0941-7270-86c7-69492745fbc7", "title": "Firefox Add-ons Review Madness", "url": "https://pfandrade.me/blog/firefox-add-ons-review-madness/", "published_at": "2021-03-22T14:54:25+00:00" }, { "id": "01a087c1-0941-7270-86c7-694927fdcb2e", "title": "Generic View Controllers with Storyboards", "url": "https://pfandrade.me/blog/generic-view-controllers-with-storyboards/", "published_at": "2021-02-05T18:10:25+00:00" }, { "id": "01a087c1-0941-7270-86c7-694928996b26", "title": "Hey Siri, I'm Arriving Home", "url": "https://pfandrade.me/blog/hey-siri-im-arriving-home/", "published_at": "2020-12-10T09:43:25+00:00" }, { "id": "01a087c1-0941-7270-86c7-69492932806c", "title": "AnyDecodable", "url": "https://pfandrade.me/blog/anydecodable/", "published_at": "2020-02-12T15:40:25+00:00" }, { "id": "01a087c1-0941-7270-86c7-694929342e79", "title": "Xconfig", "url": "https://pfandrade.me/blog/xconfig/", "published_at": "2020-02-10T15:03:25+00:00" }, { "id": "01a087c1-0941-7270-86c7-6949297094d0", "title": "Splitting Your Xcode Project into Modules", "url": "https://pfandrade.me/blog/splitting-your-xcode-project-into-modules/", "published_at": "2020-02-06T14:08:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a3e1edde", "title": "Unsafe Swift", "url": "https://pfandrade.me/blog/unsafe-swift/", "published_at": "2020-01-07T15:24:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a4677733", "title": "The Missing \"k\" Bug", "url": "https://pfandrade.me/blog/the-missing-k-bug/", "published_at": "2019-11-28T14:28:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a48601b5", "title": "@DynamicFont", "url": "https://pfandrade.me/blog/dynamicfont/", "published_at": "2019-09-18T10:30:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a4e62aea", "title": "Hey Siri, Open My Garage Door", "url": "https://pfandrade.me/blog/hey-siri-open-my-garage-door/", "published_at": "2019-09-03T10:30:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a5dbd226", "title": "The Alert Hammer", "url": "https://pfandrade.me/blog/the-alert-hammer/", "published_at": "2019-07-31T15:30:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a6862d03", "title": "Bootstrapping your indie business", "url": "https://pfandrade.me/blog/bootstrapping-your-indie-business/", "published_at": "2019-06-24T15:50:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a72dee7f", "title": "Thoughts on WWDC 19", "url": "https://pfandrade.me/blog/thoughts-on-wwdc-19/", "published_at": "2019-06-07T15:10:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a7b3e75e", "title": "UI Testing and NSScrollView", "url": "https://pfandrade.me/blog/ui-testing-and-nsscrollview/", "published_at": "2019-04-30T19:10:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a838a25a", "title": "Search Scopes in Xcode", "url": "https://pfandrade.me/blog/search-scopes-in-xcode/", "published_at": "2019-04-03T14:10:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a83ba85e", "title": "Late Responders — Sidestepping The Responder Chain", "url": "https://pfandrade.me/blog/late-responders-sidestepping-the-responder-chain/", "published_at": "2019-03-13T16:07:08+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a932c2f0", "title": "Inverted Expectations", "url": "https://pfandrade.me/blog/inverted-expectations/", "published_at": "2019-02-14T15:53:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a93e1baf", "title": "Xcode: Comparing Build Settings", "url": "https://pfandrade.me/blog/xcode-comparing-build-settings/", "published_at": "2019-01-31T10:36:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a97e1267", "title": "iPad Pro — First Impressions", "url": "https://pfandrade.me/blog/ipad-pro-first-impressions/", "published_at": "2019-01-05T20:08:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399a9dd23d7", "title": "Building Expectations", "url": "https://pfandrade.me/blog/building-expectations/", "published_at": "2018-12-17T14:59:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399aa2960bb", "title": "The 2018 iPad Pro", "url": "https://pfandrade.me/blog/the-2018-ipad-pro/", "published_at": "2018-11-14T15:36:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399aaeb549e", "title": "Quick TCP Server Using NSSocketPort", "url": "https://pfandrade.me/blog/quick-tcp-server-using-nssocketport/", "published_at": "2018-10-22T12:23:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399ab14f668", "title": "Is There Hope for the Mac App Store?", "url": "https://pfandrade.me/blog/is-there-hope-for-the-mac-app-store/", "published_at": "2018-10-12T09:21:25+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399ab781925", "title": "Rewinding Animations", "url": "https://pfandrade.me/blog/rewinding-animations/", "published_at": "2018-10-09T11:38:43+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399ac07b7a5", "title": "Apple Events and the State of macOS Automation", "url": "https://pfandrade.me/blog/apple-events-and-the-state-of-macos-automation/", "published_at": "2018-09-03T13:41:53+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399acbaf16c", "title": "Adopting Dark Mode and Older Macs", "url": "https://pfandrade.me/blog/adopting-dark-mode-and-older-macs/", "published_at": "2018-06-13T20:37:58+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399acf68d0d", "title": "NSOperation KVO Pitfall", "url": "https://pfandrade.me/blog/nsoperation-kvo-pitfall/", "published_at": "2018-06-01T08:43:42+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399ada5b695", "title": "The Developers Union", "url": "https://pfandrade.me/blog/the-developers-union/", "published_at": "2018-05-22T09:20:18+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399adb5999f", "title": "Taming Build Variants With Xcode Configuration Files", "url": "https://pfandrade.me/blog/taming-build-variants-with-xcode-configuration-files/", "published_at": "2018-04-10T11:01:38+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399ae3fdfc3", "title": "Rate Limiting Using a Token Bucket in Swift", "url": "https://pfandrade.me/blog/rate-limiting-using-a-token-bucket-in-swift/", "published_at": "2018-03-16T10:30:24+00:00" }, { "id": "01a087c1-0942-71b7-9e00-c399aeb7dd2f", "title": "Managing iOS UI Testing Fixtures", "url": "https://pfandrade.me/blog/managing-ios-ui-testing-fixtures/", "published_at": "2017-10-22T17:31:37+00:00" } ] posts Claim your blog
Back to pfandrade.me
Blog · corpus.blog/blogs/pfandrade.me/posts

pfandrade.me

pfandrade.me

2026

2024

2022

2021

2020

2019

2018

2017