My Books
-
macOS Apprentice: 3rd Edition
Read More »The third edition of macOS Apprentice has been released!
If you're a beginner or near-beginner who wants to start learning Swift, SwiftUI and AppKit for building Mac apps, then this is the book for you.
This edition has been updated for Swift 6, macOS 26 and Xcode 26. It now includes details on using the new Icon Generator as well as major changes in the chapter that deals with embedding an AppKit view in a SwiftUI app. All the code and screenshots have been updated to reflect changes in Xcode, Swift, SwiftUI and macOS.
-
Playing in the Mac App Sandbox
Read More »Every app running on any Apple device, including a Mac, runs inside a sandbox by default. This keeps the app's data and settings isolated from other parts of the system so they cannot interfere with each other. As a Mac app developer, this is usually what you want, but sometimes the default sandbox settings do not allow your app to operate the way you need. In many cases you can work around this by adjusting the sandbox, but for some apps, you have to turn off sandboxing.
In this article, I want to walk through what the sandbox does by default, how you can configure its settings for various tasks, when you need to turn it off, and why it's actually a good idea.
-
NSTableView scroll bug in macOS Tahoe
Read More »Recently. I was working with an AppKit app that uses an
NSTableViewto display long list of items. While testing the app on macOS Tahoe, I noticed a bug in the scrolling behavior: when I scrolled down from the top, the content rows would scroll into the header, making the top messy and unreadable. This sort of overlapping and unreadable text is a feature of the various OS 26s, but in this case, there wasn't a hint of transparency, so it looked like a bug to me.I did a lot of searching online, but couldn't find any references to this specific issue, so once I worked out the cause and a workaround, I thought I'd share it here, for anyone else who encounters this issue.
-
Moving from Process to Subprocess
Read More »For many years, I've used
Processto call Terminal commands from my macOS apps.Processis an old technology, formerly known asNSTask. It works, but it's complicated to set up and it can have issues. The Swift language team have now published a modern alternative calledSubprocess. Since I'm currently usingProcessin my Man Reader app and in my macOS Apps Step by Step book, I thought it was time to assess the new option and see if I should swap to it. -
Black Friday Sale
Read More »For Black Friday 2025, my self-published books: macOS Apps Step by Step and Escape from Tutorial Hell are on sale for 30% off, from now until December 1st.
If you're looking for a discount on macOS Apprentice, check it out the Kodeco web site when their Black Friday sale is live.


