Archive for August 28, 2019

Wednesday, August 28, 2019

Installing Old Versions of macOS

Craig Hockenberry:

TIL: You can no longer download older versions of macOS for testing. The Mac App Store link works, but as soon as you GET, this appears[…]

All of Apple’s support documents make the assumption that you can download[…] That is no longer true.

Meanwhile, we have customers on 10.12 who are having issues with Twitterrific, and we can’t fix the problems without seeing them first.

Aldrin Tauro:

If you have a Mac that shipped on anything before Catalina, you can boot holding CMD-Shift-R and it’ll download the recovery partition for the OS it shipped on. Then you can install that on another drive and use it for downloads.

However, this doesn’t help with getting intermediate releases. You should be downloading and saving copies of those as they become available. If you haven’t already done so, you may be able to use this workaround to download them manually.

Then there’s the question of how to install them. I recently set up an old Mac to use with my ScanSnap, whose software will no longer run on macOS 10.15. When installing from the recovery partition, I got an error that the software couldn’t be verified. And I kept getting errors like that when trying to install two separate versions of macOS from installers I had previously downloaded.

How could all three installers be damaged? The answer is that they weren’t:

Two unusual error messages that can occur during the attempted installation of OS X El Capitan or OS X Yosemite are the “This copy of the Install OS X El Capitan application can’t be verified. It may have been corrupted or tampered with during downloading” error, or a “This copy of the Install OS X Yosemite application can’t be verified. It may have been corrupted or tampered with during downloading” message, or a more vague “An error occurred while preparing the installation. Try running again” error message. Sometimes these can be resolved by simply rebooting and trying to reinstall OS X again (or re-downloading the OS X installer if it was damaged), but if the error messages are persistent, then you may find that modifying the system date of the Mac can be the resolution.

It seems that the installer is signed with a certificate that has expired. When booted from the installer, you can open Terminal and use the date command to set the clock to the past, i.e. to when that version of macOS was current. After installing, be sure to set the clock to the correct date, or various other things won’t work properly.

Paul Haddad:

The fact that Apple no longer supports old versions of OS X in the latest Xcode’s is a much harder problem to deal with. Good luck debugging a 10.12 specific problem with Xcode 10.2.

Craig Hockenberry:

Paul speaks the truth. The “easiest” option is to build with current tools into a folder that’s shared with a VM running the older OS.

Along with a healthy portion of NSLog() or print().


Update (2019-08-29): Craig Hockenberry:

Weirdly, some older macOS releases still work. Starting to think this is a bug, rather than a policy.

Mr. Macintosh (tweet):

I am going to try documenting Xcode patch change notes, maybe this will end up being useful to Developers.


See also: Apple Platform SDK API Differences.

Update (2019-08-30): See also: Howard Oakley.

Update (2020-10-15): I just reinstalled Mojave from an installer disk built with DropDMG. I had to turn off Wi-Fi to prevent the clock from correcting itself, then set the date backward using date -u 1015171718 so that the installer would ignore the expired certificate that caused it to report that the installer was damaged.

Update (2021-04-14): See also: How to get old versions of macOS.


iOS 13.1 Developer Beta 1 Is Already Out

John Gruber:

Basically, I think we need to get used to WWDC announcements being a roadmap for the next year of OS releases, not a list of what’s going to ship in the initial dot-zero release in the fall.

Yep. And Apple should, too. It’s much better to ship a solid base (which, alas, 13.0 doesn’t seem to be) and add features later when they’re ready.

Identifiable in Swift 5.1

Mattt Thompson:

The Swift Evolution proposal for Identifiable, SE-0261, was kept small and focused in order to be incorporated quickly. So, if you were to ask, “What do you actually get by conforming to Identifiable?”, the answer right now is “Not much.” As mentioned in the future directions, conformance to Identifiable has the potential to unlock simpler and/or more optimized versions of other functionality, such as the new ordered collection diffing APIs.


Normalization is the key to successfully using strings as identifiers. The easiest place to do this is in the initializer, but, again, if you find yourself repeating this code over and over, property wrappers can help you here, too. […] Unfortunately, the Foundation framework doesn’t provide a single, suitable API for URL canonicalization, but URL and URLComponents provide enough on their own to let you roll your own[…]


As we’ve said time and again, often it’s the smallest additions to the language and standard library that have the biggest impact on how we write code. (This speaks to the thoughtful, protocol-oriented design of Swift’s standard library.)

Because what Identifiable does is kind of amazing: it extends reference semantics to value types.

Preference Panes and Catalina

Paul Kim:

System Preferences has had a major change: preference panes now load in a separate process. Apple ones get their own while all the third party ones get stuck in a process called “legacyLoader (System Preferences)”.


The other problem is that magenta. What is that? Apparently, it’s a security feature. Any windows besides the main preference window will have their transparent areas colored magenta. I’ve been trying to pin down the rules as to when this occurs but it’s been slow going and also the screenshot above contradicts what I’ve been told. Note that my software is notarized so it’s not like this is only applying to unknown software.


To top this all off: none of this has been announced or documented. I’ve only found out about this through backchannels and then later, via a “conversation” via Feedback Assistant (FB6758586).

The lack of documentation makes it take longer to find out about and adapt to these types of changes. It also adds a layer of uncertainty: it’s not clear how things are intended to work, so weird behavior that you see could be by design or something that’s in the process of being fixed or an unknown bug.


Update (2019-08-30): Paul Kim:

Paraphrased response from Apple regarding my pref pane dark mode bug which you can replicate with a newly created project in Xcode with no added code: “Here are some things to check in your code, oh, and could you provide a sample project?”

What deeply worries me is that they apparently aren’t QA-ing with third party panes since an empty pane is the most basic thing you can have.

Per-Build Release Notes

Mr. Macintosh:

Most Mac websites only report that Apple released a new Beta, but don’t mention any of the actual changes. This article is meant to save you time going through the notes to find what is new and what is still leftover from the last beta. I went through both Beta 6 and the new 10.15 Beta 7 (19A546d) release notes to find all the changes. Like usual, I also have included the entire patch notes list as an archive.

This is great. Is anyone doing this for Xcode builds? (And, obviously, why can’t Apple write normal release notes that are organized per-build?)