Every Mac app I sell from my own site goes out the same way. It’s signed with Developer ID, notarized, stapled, put in a DMG, and then the DMG gets signed, notarized and stapled too. The steps are well known. The order is where people get bitten, along with which file each step applies to. Read more of Notarizing And Stapling A Mac App For Direct Download →
Battery health on a Mac lives in the AppleSmartBattery entry in the I/O Registry. System Information shows numbers from it, and so does the battery meter in Multimeter, which is where I ran into this. Read more of Reading Mac Battery Health From IOKit →
Multimeter can show your Mac’s fan speed. There’s no public API for that, so it asks the System Management Controller through IOKit: open the AppleSMC service, then call IOConnectCallStructMethod with a struct going in and the same kind of struct coming back. Read more of Swift Tuples Drop Their Tail Padding →
Multimeter puts one status item in the menu bar for each meter you add. In its Settings window you can drag meters into whatever order you like, and the menu bar is supposed to follow. That turned out to need a small trick, because AppKit gives you no way to move a status item once it exists. Read more of Ordering Menu Bar Status Items When AppKit Won't Let You →
My server sends push notifications to my phone when something needs a look: memory running low, a process that stopped answering on its port, a nightly job that failed. For a long time those went through ntfy, which is about the nicest way there is to get a message from a shell script onto a phone. Read more of Self-Hosted ntfy And The Shared IPv6 Quota Behind My 429s →
Back in February 2013 I announced Conditions on this blog. It was a little weather app built around one question: What’s the weather like? It showed you what it was like outside right now, a five-day forecast, and not much else. It went quiet about a year later, but I never threw anything away. Read more of Rebuilding My 2013 Weather App →
Deallocated Objects is a static site. A Bun/TypeScript generator on my Mac turns a folder of markdown into HTML, a deploy script copies the files to the server, and nginx serves them. There’s no app process for the blog, no database and nothing to restart. Read more of Scheduled Posts On A Static Site →
As I write this, you can’t pick up an iPhone Duo at any of the 12 Apple Stores nearest New York, Dallas or San Francisco. Every one of the eight configurations says “Currently unavailable” at every store. When units do turn up, the trick is noticing before they’re gone. Read more of Let Your Agent Watch Apple Store Pickup For You →