Apple’s Notary Service can’t compete with a supermarket restroom

macOS developers great and tiny are now totally dependent on Apple for release of their software. Whether they give Apple a share of their revenues by selling through its App Store, or distribute independently and have to notarize their products, Apple has to approve that release one way or the other. Apple’s Notary Service is therefore critical to a great many macOS developers.

When I use toilet/restroom facilities in a store, there’s invariably a notice on the wall giving details of who to contact if those facilities are defective or dirty. When I drive behind a delivery truck, there are details of its operator, and often a phone number I can call if their driver isn’t driving well. When we use the countless services that we all do, there’s invariably a contact system to which we can report problems. Except for Apple’s Notary Service.

Last weekend, I put in a fair bit of work changing my database of firmware versions, changing the source code of SilentKnight and silnite to produce new and improved versions, and testing them out as well as I can. The final and crucial step in preparing them for release was to notarize them through Apple’s Notary Service, and that’s where it all went wrong.

I first submitted SilentKnight version 1.5 using Xcode. This was the first time that I had used version 11.2, and I proceeded in the normal way. It reported that the app had been successfully uploaded, and a few minutes later I was puzzled that it hadn’t yet been notarized and was still not ready to distribute. I gave it a bit longer, then checked its service status, which was green. But when I queried the status of my notarization request within Xcode, it reported that no record of that request could be found, and advised me to submit it afresh.

I incremented its build number, repeated, and had exactly the same problem, although the service status remained green. It was only at the third attempt that it succeeded, and I had the app ready to distribute, after more than an hour of trying.

I then turned to the command tool, which has to be notarized from Terminal’s command line because Apple hasn’t yet got round to providing a proper interface to this common task for developers. Having built the Installer package, I submitted it to the Notary Service, and it responded with the message
No errors uploading 'silniteInstaller.pkg'
and the UUID of the request. A few minutes later, I tried querying its status using the command
xcrun altool --notarization-info [UUID] -u [mail address] -p [password]
and received the response
*** Error: Apple Services operation failed. Could not find the RequestUUID.

Checking my notarization history using the command
xcrun altool --notarization-history 0 -u [mail address] -p [password]
showed no trace of the request, but the service status remained on green.

I therefore re-submitted the request, only to go through the same error message, and continued for another few attempts. By now, it was getting on for midnight, and I had run out of wakefulness to continue any further. A tweet had elicited reports of similar problems from other developers, so I went to bed after asking a contact in Apple how to report the problem.

Like other bad dreams, the following morning there was a whole bunch of emails from Apple’s Notary Service, which had finally processed all my requests several hours later.

You may recall that I’ve been a strong advocate for Apple’s Notary Service in the past, and my experience with it over more than a hundred notarizations remains good. But like any service, there are going to be times when things aren’t right. Developers need:

  • Accurate error messages which provide the right advice. As it turned out, every error had been misleading, and repeatedly resubmitting wasn’t the right way forward. Had the service informed me there was a problem and notarization would be delayed, I could have done something else instead of wasting most of an evening.
  • Accurate service status indicators. The service was down, but there was no indication of any problem except after you had submitted a request.
  • A contact point (Twitter, email) for informing Apple that the service wasn’t working properly. I’m lucky in having individual contacts who have been extremely helpful. But it’s unfair on them that they should feel obliged to do this, particularly over weekends. Apple should at least come up to the standards of supermarket toilets/restrooms and provide an official point of contact.

The real test of a service is not when everything’s working fine, but when there’s a problem. Last weekend not only did the service fail, but its support was left to the goodwill of Apple’s most dedicated staff. Given the importance of the Notary Service to thousands of developers, that’s simply not acceptable.