[jsq]
writing
speaking
projects
apps
hire me
subscribe
sponsor
cv
about
contact
turing complete with a stack of
0xdeadbeef
Archive
all
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
search
2024 December
UIKit DiffableDataSource API inconsistencies with Swift Concurrency annotations explained
Dec 19
2024 October
Diffing in ReactiveCollectionsKit
Oct 23
Introducing ReactiveCollectionsKit
Oct 18
Kintsugi
Oct 16
2024 September
SwiftUI's Observable macro is not a drop-in replacement for ObservableObject
Sep 09
2024 July
UI testing improvements in Xcode 16
Jul 09
Our App Store screenshot nightmare is (almost) over
Jul 04
2024 June
SwiftUI app lifecycle: issues with ScenePhase and using AppDelegate adaptors
Jun 29
Swift concurrency hack for passing non-sendable closures
Jun 05
Updated
2024 May
Workaround: Xcode deletes Package.resolved file and produces 'missing package product' errors
May 29
Updated
2024 April
The curious case of Apple's third-party SDK list for privacy manifests
Apr 29
Updated
2024 January
Workaround: Swift scripts importing Cocoa frameworks broken on macOS 14
Jan 22
A simple fastlane setup for solo indie developers
Jan 22
Mac menu bar apps for sale
Jan 18
Swift protocol requirement quirks
Jan 17
App Store screenshot requirements need to change
Jan 16
Workaround: Xcode simctl status_bar is still broken for iOS 17 simulators
Jan 04
Another frivolous and frustrating App Store rejection
Jan 03
2023 December
A list of books I read in 2023
Dec 29
Top posts of 2023
Dec 29
How to fix Mac menu bar icons hidden by the MacBook notch
Dec 16
Updated
Find me on Mastodon
Dec 15
Going Indie: bookkeeping and invoicing
Dec 07
Xcode does not have access to your shell environment
Dec 06
Updated
M3 Max Performance
Dec 05
Setting up a new M3 MacBook Pro
Dec 04
2023 November
How to fix malfunctioning AirPods
Nov 14
2023 October
GitHub Tip: using the involves filter
Oct 30
2023 August
Swift URL absoluteString versus path
Aug 17
Going indie: business structure, taxes, and retirement
Aug 16
Updated
2023 July
How to customize NavigationLink accessory views in SwiftUI
Jul 18
Stop prefixing your UserDefaults keys
Jul 17
Updated
Where are Xcode bookmarks stored?
Jul 11
Creating dynamic colors in SwiftUI
Jul 11
2023 May
Going Indie: building a foundation, finding clients, and negotiating rates
May 08
2023 April
Estimating RSS subscribers on NearlyFreeSpeech.net
Apr 26
How to prevent orphan words in text views on iOS and macOS
Apr 25
Introducing Taxatio
Apr 24
Going Independent
Apr 10
Exploring a new iOS codebase
Apr 04
Love for hardcore, and a taste of karma
Apr 02
2023 March
Improving multiplatform SwiftUI code
Mar 23
Xcode Tip: filter to show modified files only
Mar 22
Xcode Tip: filtering debugger output
Mar 02
How to fix iCloud Safari tabs syncing bug
Mar 02
2023 February
Make your terminal tell you when it's done
Feb 22
Xcode tip: sharing breakpoints across projects
Feb 21
How to find and fix premature view controller loading on iOS
Feb 20
Goodbye, Twitter
Feb 06
Updated
2023 January
Mac OS X vs macOS
Jan 23
Fix: eventmachine gem failed to build on macOS Ventura with Ruby 2.7.6
Jan 18
Upgrading to macOS Ventura
Jan 18
2022 December
A powerful UINavigationController API that you might not know about
Dec 15
Publishing an RSS feed to Mastodon
Dec 15
Hello, Mastodon
Dec 14
Workaround: simctl status_bar broken for iOS 16 simulators
Dec 14
Updated
2022 August
Sharing cross-platform code in SwiftUI apps
Aug 19
Implementing a main thread watchdog on iOS
Aug 11
Automatically assign milestones with GitHub Actions
Aug 04
2022 July
My website disappeared from Bing and DuckDuckGo, Part 2
Jul 25
Disconnected
Jul 25
2022 May
May 16 dreams
May 16
2022 April
Nimble 10.0 released
Apr 27
Using DocC on GitHub Pages
Apr 22
Updated
GitHub suspending Russian accounts deleted project history and pull requests
Apr 19
Updated
DuckDuckGo removing other sites
Apr 17
Updated
Quick 5.0 released
Apr 17
2022 March
Using fastlane to increment version numbers in xcconfig files
Mar 28
Comparing release branch strategies
Mar 27
Automate merging release branches into your main branch with GitHub Actions
Mar 26
My website disappeared from Bing and DuckDuckGo
Mar 25
Updated
Quickly displaying the Swift version that ships with Xcode
Mar 04
Updated
2022 February
The MacBook sigh of death
Feb 15
Updated
When should you use Decimal instead of Double?
Feb 01
2022 January
How to more gracefully handle non-optional Core Data properties in Swift
Jan 26
iCloud failures, developer relations, and the 30 percent
Jan 26
Reading Notes: Thich Nhat Hanh
Jan 24
Screen Time is drunk
Jan 16
Updated
The best and the worst
Jan 16
NFTs and web3
Jan 16
Users, Privacy, and Consent
Jan 14
iMessage spam and reporting abuse
Jan 13
Updated
iOS App Library is drunk
Jan 11
On third-party Apple Watch apps
Jan 11
Time Machine error 35 in macOS Monterey
Jan 11
Updated
2021 December
Top posts of 2021
Dec 31
A list of books I read in 2021
Dec 30
My Apple Watch thinks I'm dead
Dec 29
My first Apple Watch: thoughts and reflections
Dec 29
Please don't copy my site. Here's a template!
Dec 03
My worst tech interview experience
Dec 01
2021 November
Yo, where's my Juicero? A survey of talent in Silicon Valley
Nov 30
Reading Notes: The Abolition of Work
Nov 24
Xcode LLDB RPC server crash
Nov 22
Reading Notes: The Wage System
Nov 21
SwiftUI tips for organizing multiplatform projects
Nov 19
Industrial Sabotage
Nov 18
The obscure solution to using an AppDelegate in SwiftUI
Nov 13
Xcode 13 device orientation options bug
Nov 13
First impressions of SwiftUI
Nov 12
Deprecating PresenterKit
Nov 06
Workaround: Xcode 13 failure after running framework project tests
Nov 03
How to test an iOS Swift package without an Xcode project
Nov 03
Updated
How to start a blog or portfolio website, for developers
Nov 01
Updated
2021 October
Deleting your app from the iOS simulator during UI tests
Oct 25
Don't let them loot, they said, as their streets became rivers
Oct 25
Git aliases to improve productivity
Oct 24
Recently updated posts
Oct 22
GitHub Actions workflows for automatic rebasing and merging
Oct 17
Updated
2021 September
An iOS shortcut to show proof of vaccine
Sep 12
Updated
2021 August
Useful label-based GitHub Actions workflows
Aug 24
Updated
Caching Bundler on GitHub Actions
Aug 23
Different ways to observe properties in Swift
Aug 08
2021 July
Fixing a hard-to-find bug in Dark Mode
Jul 15
Debugging a DiffableDataSource CellProvider
Jul 11
Diffable data source behavior changes and reconfiguring cells in iOS 15
Jul 08
Is SwiftUI ready?
Jul 01
Updated
2021 June
What is a rent strike?
Jun 29
Apple's DocC is excellent, but unusable for open source projects
Jun 29
Updated
RSS feeds, Jekyll, and absolute versus relative URLs
Jun 06
Updated
To distribute in the Mac App Store, or not
Jun 02
iOS 14 App Library
Jun 01
Three months of Big Sur
Jun 01
Updated
2021 April
Time Machine error 45 is fixed in Big Sur
Apr 07
Resources for learning SwiftUI
Apr 07
Why Swift closures are not Equatable
Apr 05
Updated
2021 March
Migrating OmniFocus to a new Mac
Mar 31
Apple's cooperation with authoritarian governments
Mar 30
Updated
A better approach to writing a UserDefaults Property Wrapper
Mar 26
Returning to normal, Part 3
Mar 23
Updated
Xcode tips for everyone
Mar 22
How to test your Mac app (or not) and decide which versions of macOS to support (or not)
Mar 19
Updated
Using pipes in Swift scripts
Mar 18
Updated
Xcode UI testing reliability tips for iOS
Mar 17
Updated
Returning to normal, Part 2
Mar 17
Deleting tweets and other social media content
Mar 16
Returning to normal
Mar 16
Fixing macOS Big Sur search bugs
Mar 09
How to reboot the Touch Bar without rebooting your MacBook
Mar 02
A web host worth using
Mar 02
2021 January
Top posts of 2020
Jan 03
2020 December
A list of books I read in 2020
Dec 30
Resources for learning about compilers and LLVM
Dec 28
The different types of self in Swift
Dec 28
What type is self in a Swift self-executing anonymous closure used to initialize a stored property?
Dec 22
Updated
Obscure bridgeOS crash
Dec 22
The largest strike in history
Dec 20
Useful Danger rules for Bitrise
Dec 20
Running multiple instances of Danger
Dec 15
2020 November
How to fix Ruby/Bundler error 'No such file or directory' on NearlyFreeSpeech.net
Nov 28
Updated
Radical readings for the Tech Worker
Nov 26
Seasons Greetings from your CEO at TECH COMPANY
Nov 24
2020 October
Swift Unwrapped with Jordan Rose
Oct 12
Swift deinit is (sometimes) not called for throwing or failable initializers
Oct 08
2020 September
Don't forget the keyboards
Sep 15
Why is Apple acting like an Asshole?
Sep 15
2020 August
Unpropertied
Aug 30
zsh could not find CocoaPods
Aug 26
Updated
2020 July
GitHub Tip: watching releases
Jul 30
How to fix the incomprehensible tabs in Xcode 12
Jul 24
Updated
Xcode 12 drops support for iOS 8 and how to fix deployment target warnings in CocoaPods
Jul 20
Time Machine error 45
Jul 17
Swift globals and static members are atomic and lazily computed
Jul 16
The best Touch Bar configuration for people who hate the Touch Bar: Or, how I finally upgraded my 6-year-old MacBook
Jul 08
Quickly switching between Xcodes
Jul 07
Updated
2020 May
Swift tip: marking unused required initializers as unavailable
May 20
Who do they protect?
May 17
On non-native apps: JavaScript doesn't suck but your app might
May 16
Simple, private, and open source analytics with GoatCounter
May 08
2020 April
Approved for GitHub sponsors
Apr 16
Updating permalinks and adding redirects for Jekyll sites
Apr 15
Deprecating JSQDataSourcesKit
Apr 14
Fully automating perfect status bar overrides for iOS simulators with Nine41
Apr 13
All we have is each other: Bay Area mutual aid resources for COVID-19
Apr 11
Updated
Previously previously previously relocated items in macOS Catalina
Apr 11
Running Danger on GitHub Actions
Apr 10
Updated
Open source libraries for building menu bar Mac apps
Apr 07
2020 March
Implementing Dark Mode and using CGColor
Mar 23
Another issue with SwiftPM Xcode integration
Mar 04
2020 February
JetBrains Mono and disabling font ligatures
Feb 25
Updated
My experience replacing CocoaPods with SwiftPM
Feb 24
Mac app tests fail with hardened runtime enabled
Feb 23
2020 January
Setting up default community health files on GitHub and crafting a thorough Contributing Guide for any open-source project
Jan 24
Xcode tip: Using breakpoints as bookmarks
Jan 21
Updated
AppleScript to export open Safari tabs to OmniFocus
Jan 14
Time Machine failing on macOS Catalina
Jan 10
Observing appearance changes on iOS and macOS
Jan 08
Selecting an Xcode version on GitHub Actions CI
Jan 06
A list of books I read in 2019
Jan 04
2019 September
A script to automate overriding iOS simulator status bar values
Sep 30
Updated
Reading Notes: Bay Area Homelessness report
Sep 29
Reading Notes: The Fire Next Time
Sep 29
Backing up your iCloud Drive files using rsync
Sep 27
Updated
Overriding status bar display settings in the iOS simulator
Sep 26
Updated
The ACA and your credit report
Sep 19
Swift 5.1 with Doug Gregor
Sep 16
New iMessage sticker pack: plurals and noun
Sep 13
Introducing Red Eye
Sep 03
2019 August
The impossible
Aug 19
An update to Lucifer
Aug 16
Workaround for highlight bug in NSStatusItem
Aug 16
Implementing right-click for NSButton
Aug 15
Linked Out
Aug 13
Updated
Reading Notes: Relationship Anarchy
Aug 07
2019 March
Summoning Lucifer: on making my first Mac app as an iOS developer
Mar 26
Reading Notes: The Individual, Society, and the State
Mar 22
2019 February
Agile by degrees: How to estimate engineering project timelines
Feb 25
2019 January
A list of books I read in 2018
Jan 05
2018 November
Executing AppleScript in a Mac app on macOS Mojave and dealing with AppleEvent sandboxing
Nov 17
Debugging a subtle Swift bug that will make you facepalm
Nov 07
2018 October
Lars And The Basket Of Apples
Oct 08
2018 September
15 years later: it was summer and we were free
Sep 26
2018 July
The Four Agreements
Jul 30
Swift tip: Building arrays with compactMap
Jul 29
Hold it! Or, how to blame homelessness on the homeless in San Francisco
Jul 19
Updated
Swift's new calling convention
Jul 05
Xcode tip: Using behaviors to improve debugging
Jul 01
2018 June
The Tor Browser
Jun 27
Choosing a VPN service
Jun 24
Updated
Reading Adichie
Jun 16
Swift Unwrapped at WWDC 2018
Jun 13
Xcode tip: Improving the assistant editor
Jun 12
Thoughts on WWDC 2018
Jun 11
Why optional closures in Swift are escaping
Jun 10
2018 April
Removing Google Analytics, too
Apr 22
Upgrading to Bootstrap 4
Apr 16
2018 February
Replacing Google Search with DuckDuckGo
Feb 25
Updated
How to run sysdiagnose on iOS
Feb 08
Updated
2017 December
Ending the Swift Weekly Brief
Dec 28
Updated
2017 October
Floating-point Swift, ulp, and epsilon
Oct 01
Updated
2017 September
When your app is used in unexpected ways
Sep 24
Measuring Swift compile times in Xcode 9
Sep 18
Building a site with Jekyll on NearlyFreeSpeech
Sep 10
Updated
Supporting JSON feed
Sep 03
2017 August
Data & Society: Media Manipulation and Disinformation online
Aug 13
Customizing git-log
Aug 08
2017 July
A story about Swift source compatibility
Jul 17
Officially deprecating JSQMessagesViewController
Jul 16
Updated
2017 June
Protocol composition in Swift and Objective-C
Jun 05
Writing better singletons in Swift
Jun 04
2017 May
A Fair Hotel
May 28
2017 April
Thoughts on Swift access control
Apr 05
2017 March
Swift Unwrapped
Mar 07
2017 February
Adapting to change
Feb 15
Refactoring singleton usage in Swift
Feb 10
Sleazy recruiting
Feb 09
Prioritization
Feb 08
2017 January
Pushing the limits of protocol-oriented programming
Jan 23
Testing and mocking without OCMock
Jan 16
Swift documentation, Part 2
Jan 08
2016 November
140 proposals in 30 minutes
Nov 05
2016 October
Contributing to Swift Weekly Brief
Oct 06
Understanding Swift Evolution
Oct 03
Shipping Swift 3.0
Oct 01
2016 September
Speaking at FrenchKit
Sep 30
2016 July
Enums as configuration: the anti-pattern
Jul 31
Migrating to Swift 3
Jul 25
Swift 3 sherlocked my library
Jul 03
2016 June
The A5 is dead (almost)
Jun 14
Avoiding the overuse of @objc in Swift
Jun 04
2016 May
Open source everything
May 22
Swift documentation
May 20
Updated
2016 March
Contributing to open source Swift
Mar 21
2016 February
Swifty view controller presenters
Feb 19
Call for contributors
Feb 06
2016 January
The new weekly brief
Jan 14
Open source Swift: weekly brief #4
Jan 07
2015 December
Open source Swift: weekly brief #3
Dec 24
Open source Swift: weekly brief #2
Dec 17
Open source Swift: weekly brief
Dec 10
Swift open source
Dec 06
2015 October
Building type-safe, composable data sources in Swift
Oct 25
UIKit changes in iOS 9
Oct 14
2015 July
Swift enumerations and equatable
Jul 26
Updated
Namespaced constants in Swift
Jul 19
Updated
2015 May
Using Core Data in Swift
May 25
2015 April
Failable initializers, revisited
Apr 06
2015 March
Functional notifications
Mar 31
2015 February
Better Core Data models in Swift
Feb 17
2015 January
Swift, Core Data, and unit testing
Jan 05
2014 December
Introducing JSQMessagesVC 6.0
Dec 08
Rosetta Stone contributes
Dec 05
2014 October
Swift failable initializers
Oct 22
Adaptive user interfaces
Oct 01
2014 August
Apples to apples, Part III
Aug 21
On the value of benchmarks
Aug 19
Apples to apples, Part II
Aug 06
Status bars matter
Aug 03
Updated
2014 June
Apples to apples
Jun 25
Updated
Built with open-source
Jun 09