With the recent announcement that Threads.net is starting to integrate with ActivityPub, I figured it would be a good time to remind folks that you can follow me on Mastodon at @jsq@mastodon.social. Many of my connections have moved over from Twitter — but sadly, not all of them. Although, some have moved over to Threads. If you would like to join Mastodon.social, you can use my invite link.| Jesse Squires
Welcome to the fourth (and I think final!) part of my going indie series! Previously, I discussed the exciting topics of business structure, taxes, and retirement. Today, I’m going to discuss two final topics: bookkeeping and invoicing. The first is about how to correctly track your income and expenses, and the second is about making sure you get paid! Because this is capitalism, baby — we are not here for passion, we are here to pay those bills.| Jesse Squires
I recently discovered, while setting up my first Apple Silicon Mac, that Xcode does not have access to your shell environment. But there’s one caveat to that. (Thanks to Boris for confirming!) This post will hopefully be a reminder to my future self when I encounter this issue again.| Jesse Squires
After setting up my new M3 MacBook Pro, I decided to do some quick performance comparisons with my old Intel machine. Anecdotally, I would have told you that...| Jesse Squires
Turing complete with a stack of 0xdeadbeef| Jesse Squires
I typically try to keep devices for as long as I can — historically, that’s been around 5-6 years for laptops. During the Intel era of MacBooks, the year-ove...| Jesse Squires
Meeting the requirements for screenshots is a frustrating experience. On iOS, tooling like SimulatorStatusMagic, Nine41, and fastlane snapshot help make the process easier. However, on macOS there is much less support (and, sadly, demand) for automated tooling — so you are kind of on your own to figure it out. I spent some time recently solving this process for myself. I want to share how I have managed to automate perfect screenshots for the Mac App Store.| Jesse Squires
Xcode automatically creates schemes for your app and other targets included in your project, which allow you to build and run those targets. I recently ran i...| Jesse Squires
I work on a team that has enabled an AI code review tool. And so far, I am unimpressed. Every single time, the code review comments the AI bot leaves on my pull requests are not just wrong, but laughably wrong. When its suggestions are not completely fucking incorrect, they make no sense at all.| Jesse Squires
Did you know that Xcode can spell check your code and comments? Based on my experience working on large teams and large Xcode projects, this is a little-know...| Jesse Squires
The zine, We Are All Very Anxious: Six Theses on Anxiety and Why It is Effectively Preventing Militancy, and One Possible Strategy for Overcoming It, was published by The Institute for Precarious Consciousness and CrimethInc in 2014. (Anarchist Library, Zine PDF). I decided to read it again recently because it felt relevant to the current political moment in the US. It is as prescient as ever.| Jesse Squires
Type erasure is a method to abstract and encapsulate heterogenous generic types inside a single non-generic concrete type. In programming languages with gene...| Jesse Squires
UIKit provides two diffable data source APIs, one for collections and one for tables.| Jesse Squires
Welcome to the next post in my series about ReactiveCollectionsKit. Today I want to discuss diffing. Understanding diffing requires understanding two core concepts: identity and equality. These are two ideas that are also relevant and applicable to programming in general, and can often be confusing for newcomers.| Jesse Squires
I recently released a new open source project called ReactiveCollectionsKit. It is a modern, fast, and flexible library for building data-driven, declarative, reactive, and diffable collections and lists for iOS. This library is the culmination of everything I learned from building and maintaining IGListKit, ReactiveLists, and JSQDataSourcesKit. The 4th time’s a charm! 😅 🍀 I truly hope this is the last UICollectionView library I ever write and maintain. I think it will be. You can fi...| Jesse Squires
Kintsugi — no, not that Kintsugi — is the the Japanese art of repairing broken pottery. The process involves mending the breaks in the ceramics with urushi lacquer, essentially gluing the pieces together and filling in any gaps to smooth it out. At the end, you finish off the cracks with a gold powder, which highlights and emphasizes the flaws in the piece rather than attempting to conceal them. The result is a restored piece of pottery or teaware that can now be put back to use.| Jesse Squires
SwiftUI’s new @Observable macro is not a drop-in replacement for ObservableObject. I learned of a subtle difference in behavior the hard way. Hopefully, I can save you from the same headache I experienced and save you some time.| Jesse Squires
While the new Swift Testing framework announced this year at WWDC24 is getting a lot of attention, there are some notable improvements coming to UI testing in XCTest in Xcode 16.| Jesse Squires
I previously wrote about how the requirements for screenshots on the App Store have become increasingly burdensome over the years. It is truly a nightmare. B...| Jesse Squires
SwiftUI introduced the ScenePhase API in iOS 14 and macOS 11. This was SwiftUI’s answer to handling application lifecycle events. At the same time, SwiftUI i...| Jesse Squires
If you have attempted to adopt Swift Concurrency in your codebase, you have certainly needed to address dozens — likely, hundreds — of warnings and errors. S...| Jesse Squires
More and more Apple Platform developers are migrating away from CocoaPods in favor the Swift Package Manager, which is Apple’s first-party tool for managing ...| Jesse Squires
At last year’s WWDC, Apple introduced privacy manifests. They recently sent out a reminder that the deadline for complying with these new requirements is May...| Jesse Squires
On macOS 14 Sonoma there is a regression in Swift 5.9 which causes Swift scripts that import Cocoa frameworks to fail. This issue was first reported by @rdj....| Jesse Squires
I recently setup fastlane for one of my indie apps, Taxatio, to automate uploading builds and metadata to the App Store — by far, one of the most tedious tas...| Jesse Squires
My Mac menu bar apps, Red Eye and Lucifer, are now for sale on my new Gumroad store.| Jesse Squires
Perhaps “quirks” is not the correct description, but I recently encountered some unexpected behavior when modifying a protocol in Swift. While I was initiall...| Jesse Squires
Providing screenshots for the App Store has always been a tedious and time-consuming process. But as the number of differently-sized iOS devices has grown an...| Jesse Squires
While working on updating iOS screenshots for the App Store recently, I discovered that simctl status_bar is still broken. And unfortunately, I do not expect...| Jesse Squires
I’m happy to share that I released an update to Taxatio today, but unfortunately it was not without a lot of friction and hassle with the App Store approval ...| Jesse Squires
Continuing another tradition, here are the books I read in 2023. Similar to my previous post highlighting my top posts of 2023, I also skipped publishing my ...| Jesse Squires
To continue my (almost) tradition of sharing my top posts, here are my most popular posts of 2023. You can find previous years here under the #top-posts tag....| Jesse Squires
Last week I wrote about setting up a new MacBook Pro — my first Apple Silicon Mac, and thus my first MacBook with a notch. I lamented how poorly macOS intera...| Jesse Squires
A number of folks have reached out to me recently (and over the years) asking me about my experience going indie. I originally wanted to write this reflectio...| Jesse Squires
I finally decided to create an account on Mastodon. You can follow me at @jsq@mastodon.social. I put this off for so long because I was skeptical and I did n...| Jesse Squires
If you follow me on Twitter, you’ve likely noticed that my blog posts are automatically tweeted for me. There are multiple services you can use to do this, l...| Jesse Squires
The main appeal of building apps in SwiftUI is being able to share UI code across platforms, in particular iOS and macOS. It is not perfect and you often hav...| Jesse Squires