The new Mac Studio looks cool, but I’m still happy with my M4 Pro Mini purchase from December. The loaded up Mini is $500+ less than a similar spec Studio (memory/storage) with a few less cores. It’ll do nicely for me.

5K run today with surprise thunder shower. Pros: Not too hot. Nobody on trail. Plenty of frogs out to cheer me on. Cons: Moist!

Almost fits!

Now that Apple is making its own cellular modem, does this mean we might finally get a cellular enabled Mac? That’d be a ‘finally’ for sure.

This is the most bizarre design choice Apple has made in a while. I didn’t realize it, but the SE 3 (2022) doesn’t have MagSafe either, the only other phone released in the last 5 years to omit MagSafe. I guess apple doesn’t think MagSafe is special enough for the Special Edition.

Apple drops MagSafe support on new iPhone 16e - 9to5Mac:

Update: The 16e lacks MagSafe but supports Qi charging. So it will charge wirelessly, but it doesn’t have magnets. So no mag accessories or a stand that holds the phone with magnets. I wonder if you could use a case that had magnets?

Everybody knows about CamelCase, snake_case and even kebab-case. But today I learned about SCREAMING_SNAKE_CASE!

Celebrated President’s Day with a lovely protest at the NC Capitol in Raleigh. That’s right, it’s so bad the introverts are out marching. #50501

www.cbs17.com/news/loca…

LOL, what if the “newest member of the family” Tim Cook is talking about is Netflix?

Republicans are fine being told a dog’s pronouns but irate when told a human’s pronouns.

5pm on Christmas Eve — excellent time to get a rejection email for a job application. Happy Holidays! 😜

TFW you order a fancy new Mac mini “for tax purposes” and the order is still processing no matter how often you reload the page.

Big milestone today. Installed my first 10 Gbps network connection in the house! Wheeeee!

Today’s the day where you periodically have to go figure out why your Verizon plan suddenly costs $20 more a month. Once you determine that your old plan (which no longer exists) is inexplicably more expensive, you have to decode the new plans and see which one costs the same as the old plan with mostly(?) the same features, except the 600GB of Verizon Cloud™ storage, whatever that was.

This just in – Python has switch statements now! Proceed accordingly.

Like the elusive Bigfoot, the black Mac keyboard remains tantalizingly unobtainable. That’s right, even after the big USB-C update, Apple does not sell a black Mac keyboard, unless you want a numeric keypad. Black mouse, yes. Black trackpad, definitely. Big black keyboard, no problem. Small black keyboard — whoa there cowboy! That’s crazy talk!

Subscription Juggling for Fun and Profit

I cancelled my subscription to Max and upgraded my Disney+/Hulu sub to the bundle that includes Max to save a couple bucks a month. As it turns out, there’s a couple days of overlap where the old Max sub hasn’t expired yet but the new one is in effect. And the Max app is freaking out! Not in a bad way, just lots of warnings - “OMG, you got 2 subs!!!” Honestly, it’s kind of a pleasant surprise they’re so upfront about a customer potentially overpaying.

Now if I could just buy this bundle through the App Store but no, I have to buy direct from Disney. I guess I get to save money if they don’t have to pay the Apple Tax.

Fix a broken AppleTV remote power button

A couple weeks ago, I dropped my AppleTV remote onto the (apparently) very hard hardwood floor. The remote went thud and the power button, newly liberated from the rest of the remote, skittered away to embrace its newfound freedom. Hmmm…

After retrieving the power nubbin from behind some furniture and armed with unbridled optimism, I tried to pop it back into place. It sort of worked, but clearly had that loosey-goosey quality that you know deep down inside that it won’t last. Sure enough, the button would eagerly attempt escape given the slightest opportunity. It was clear that some essential plastic bit had snapped and fixing this button was hopeless. Eventually, the button made good on its escape and has disappeared into the night. (I think it’s living in the depths of the sock drawer, but who knows?)

After already replacing a previous AppleTV remote, I was hesitant to just drop $60 on another new one just because the button had gone AWOL. (Note, submerging an AppleTV remote in Cheerwine is good for neither the remote or your sparkling cheery beverage.)

After some Googling, some Redditing, and many similar stories of woe, I found that someone had posted an STL of a replacement button. It looked like just the thing to pop into the gaping void in my remote, so I was keen to give it a try. But I haven’t yet made the jump to the “Let me tell you about my 3D printer” lifestyle. Time to learn about on-demand 3D printing.

After a couple of misfires, I found RexRoi. I uploaded the STL file of the new power button and for about $1 a piece, they’d print replacements. I ordered three buttons and after a couple bucks for shipping, the grand total was ~$7. About a week later, a slim mailer arrived with the replacement buttons. I popped one into the empty void in my remote and voila! It was good as new! The new button has a bit of texture and is kind of better than the original.

An AppleTV remote with a 3D printed replacement power button.

I’ve been using the Swift OpenAPI Generator to generate an interface to a REST server and it works quite well! There is soooo much less code!

But of course, we can’t have nice things. The OpenAPI generator is an Xcode plugin and once you enable plugins in Xcode 15, every other build crashes with “internal inconsistency error”. Apparently this happens across the board with Xcode plugins. Supposedly, the bug is fixed in Xcode 16, but that won’t be production ready for two months.

Hoping in iOS 18 that the Weather App radar actually shows rain. 🤞

App Groups, macOS and Extensions

This is one of those ‘note to self’ blog posts. I’ve been working on the next round of features for GlowWorm including a desktop widget. The GlowWidget, like every widget ever, needs to share some data with the main app. Widgets are all sandboxed and locked down, so we need to use an App Group to enable sharing between the extension and the main app. This is where it gets weird.

The internet is full of info on how to set up app groups. It starts by going to the developer portal, creating a group and adding it to the app identifier. Groups created in the dev portal are always prefixed with group.. Once you’ve got that set up, you can add the App Group in the capabilities section of the Xcode project. Here’s the rub! For a Mac app, Xcode enforces that the app group begin with the developer’s Team ID which looks something like JQ49SEDXYZ. So… does it start with group. or does it start with JQ49SEDXYZ.?

The key info is summed up in this SO post and sort of in the docs. It turns out that Mac and iOS configs are completely different! The dev portal and the group. prefix is only for iOS. None of that needs to be done for Mac (like nothing at all in the dev portal). On the Mac, you just need to use the Team ID prefix and that’s it. The only setup is in the Capabilities section of Xcode, where you add an app group with your Team ID prefix, bundle ID and whatever suffix you’d like. For a bundle ID of com.example.app, you might make the app group JQ49SEDXYZ.com.example.app.shared.

Now that you’ve got an app group, make sure you’ve added that app group capability to all the relevant targets. For GlowWorm, it needs to be added to the main app as well as the widget. There are a couple of ways you can share data between the two targets now, but initially we’re only interested in sharing UserDefaults. To do that, you need to create an instance of UserDefaults explicitly associated with the app group. Using the example app group we’ve set up, you can create the shared instance with UserDefaults(suiteNamed: "JQ49SEDXYZ.com.example.app.shared").

And with that, we’re in business! Both the main app and the extension can access the data in the shared user defaults. Now we just have to make it look pretty. 🙈

Big news from the #WWDC keynote — vacuums in HomeKit!

Back in 2007, some weird stuff happened and I ended up with a VIP badge for WWDC so I got to see Steve do a keynote up close!

My 2007 WWDC badge with a VIP mini badge.

Ugh! Burned again! Looks like the HomeKit API is only available on macOS for Catalyst apps! AFAIK, there aren’t even any hoops to jump through to embed Catalyst bits inside an AppKit app. AppKit inside Catalyst works, but not this way round. Harumph.

I haven’t used the new Netflix app yet, but this auto-expanding tile thing has been terrible in every other app that has tried it.

Netflix just revealed a major redesign for its TV app - 9to5Mac:

The new look replaces the static tiles containing the shows and movies you want to watch with boxes that extend as soon as your remote lands on them.

My CI build failed today because it couldn’t find two files. After 10 minutes thinking I botched a git merge, I discover that no, git is fine. Xcode decided to create those files in my Downloads folder instead of the project directory. Thanks for that Xcode. You’re the best!