Archive for October 9, 2017

Monday, October 9, 2017

APFS, SuperDuper, and EFI

Dave Nanian:

But, with APFS, we were seeing a number of users indicating that their drive wasn’t ever showing up in the Option+Boot menu, even though the drive was in the Startup Disk Preference Pane, and the usual workarounds didn’t work.


Analyzing the code there showed that, indeed, bless was embedding an APFS driver into EFI using a private, privileged API that we couldn’t (and wouldn’t want to) use. Interestingly, it was being done during the processing of --setBoot, the option that actually makes a drive the current startup volume. So there we go!


Except SuperDuper! can’t use --setBoot, because it gives an error: only Apple apps can use --setBoot.

Or can it?

It takes a lot of testing and effort just to keep apps working.

Previously: SuperDuper and APFS.

Update (2017-10-13): Dave Nanian:

The code that’s having problems is in BLCreateBooterInformationDictionary.c in Apple’s Open Source bless project. After some additional investigation, it looks like, in this case, if the APFS container is on an Apple RAID, bless can’t find the Preboot volume and doesn’t properly set up the container.

Xcode Unit Testing Feature Requests

Ash Furrow:

The following is a hypothetical blog post, written by a version of me in a parallel universe. In this fictional world, Apple cares very much about software quality (ensured by unit testing), as well as the developer experience of building software for its platforms. The features I describe of Apple’s new fictional test runner are all real features in the Jest project.

Ash Furrow:

So here’s some due diligence: I have filed eleven radars with Apple asking for individual features that would each enhance the developer experience. They have all been cross-posted to Open Radar, so please feel free to duplicate them.


These are all feature requests that I’m bringing from other communities – mainly Ruby and JavaScript.

There are some great ideas here.

Bonjeff 1.0

Jeff Johnson:

Bonjour Browser has served us well for many years, and I salute Kevin Ballard for the work. Nonetheless, we’re long overdue for a replacement, and I’ve just written one. After an intense brainstorming session, I was able to produce the worst name imaginable for this new app. Today I’m thrilled to announce and release version 1.0.0 of Bonjeff!

Bonjeff is a free and open source Mac app. I’ve posted the source code on GitHub. You can also download a Developer ID signed Gatekeeper-friendly build of Bonjeff 1.0.0 from the Releases section of the project page. In addition to being validly codesigned, Bonjeff is sandboxed, with only network entitlements. Bonjeff was written entirely in Swift, because that’s what all the cool kids do. And Bonjeff was written without any nibs or storyboards, because that’s what all the uncool kids do.

watchOS SDK Limits

Benjamin Mayo:

What really puts salt in the wound is that Apple has access to a completely different Apple Watch technology stack and doesn’t hesitate to take advantage of it in its own apps. In thinking what I wanted to say for this article, I started flicking through the honeycomb and trying to find a stock app that could be visually replicated by a third party. I really, really, struggled.


The kind of things Apple doesn’t let you do are critical things that makeup a rich and responsive application. These things should not be passed off as little niceties, they serve a significant role in making an app feel alive and more enjoyable to use. Let’s drive this home with more examples of stock apps doing things third-party developers can’t.


The current WatchKit API leaves no room for invention. iOS innovations like pull-to-refresh came about because the iPhone OS UI frameworks were flexible enough to let developers and designers run wild with their own ideas, if they wanted to. Some of these custom controls worked so well Apple later incorporated them as standard components in UIKit. That free reign creativity simply can’t happen on the watch at the moment. Apple defines what is possible.

Do iPhones Get Slower Over Time?

Futuremark (via Wojtek Pietrusiewicz):

Our benchmarking data shows that, rather than intentionally degrading the performance of older models, Apple actually does a good job of supporting its older devices with regular updates that maintain a consistent level of performance across iOS versions.

That said, there are some factors that might affect people’s perception of performance after updating an older device with a newer version of iOS. An update might add new features that use more resources or require more processing power. New apps developed for the latest models might not run as smoothly on older devices.

I don’t think CPU and GPU benchmarks are the right way to investigate this question. Obviously, Apple is not using OS updates to slow down the chips themselves. When I see people complaining that their phone slowed down after an update, they’re often talking about a new animation that isn’t smooth. This makes the phone feel slower.

It’s possible that the new code isn’t as optimized for older phones as for new ones. It’s also possible that older phones simply aren’t capable of running the new animation at a speed that looks good. Either way, it’s fair to say that Apple has optimized the OS for newer devices, either through its allocation of engineering time or through its design choices.

New OS versions also bring new features, so there is more code running in the background and consuming memory. In summary, there’s nothing sinister going on, but I do think it’s generally true that newer iOS versions feel slower on the same hardware. In my experience, you generally don’t want to be more than two generations back. iOS 11 runs great on my iPhone SE (which has the same processor as a 2015 iPhone 6s), but I’ve heard complaints from people who have an iPhone 6 or iPhone 5s.

Mike Ash:

I raced Siri on my iPhone 6+ with iOS 11 and iPad Mini 2 with iOS 10. The iPad was waaayyyy faster despite an older CPU.

See also: comments about Mac performance changing with OS updates.

Update (2017-10-10): Riccardo Mori:

The most unfortunate device in this position is the iPad 2 running iOS 9.3.5, whose overall performance has taken a huge hit due to both these factors (poorly optimised apps, and Web advertising slowing down Web browsing). Every time I pick up my wife’s iPad 2, I keep thinking that Apple should have never allowed this device to be updated to iOS 9 in the first place.


It’s the software that, update after update, becomes more demanding and impacts performance more and more severely. Sometimes the drop is just limited to specific areas or apps. In other cases, like with the iPad 2, the snowball effect is such that the whole device becomes barely usable.

Update (2017-10-11): See also: Brian Barrett.

Update (2017-10-16): Mike Ash (podcast) reports that erasing and restoring his iPhone 6+ made it much faster.

Update (2017-11-13): Mike Ash:

Do iPhones really get slower over time, or is it just our imagination? This repository aims to keep records of iPhone performance for various models over time to objectively answer this question.