A couple months ago I wrote about Mac App Store updates failing on Mojave. This issue continued for a while after my blog post, but eventually Apple seemed to resolve it. Temporarily. Unfortunately, a very similar issue has arisen recently. Some Mojave users say that this issue was caused by installing Security Update 2021-002, which was released on February 9. Other Mojave users say that the Security Update was just a coincidence in time. I can't say definitively one way or another, but I can say definitively that the issue currently affects me (I did install Security Update 2021-002) and many other Mojave users. Apple's support community discussions are full of reports of App Store failures. There's no longer a "cancelled" error message in App Store app, like there was back in December. Instead, the App Store progress spinner simply continues spinning, and the app never downloads. (I can tell that the app download never starts, because I have Little Snitch installed.) This issue affects both app updates and new app installs, making both fail, no matter how many times you try.
Fortunately, there's a workaround, which was discovered by some users in the aforementioned discussion forums. While the App Store progress spinner is stuck spinning, launch the Activity Monitor app, which is located in the Utilities subfolder of the Applications folder. Search for the
appstoreagent process, and Force Quit that process. (After force quit,
appstoreagent will automatically restart with a different
pid.) Then try installing the app again. Keep the App Store app open the whole time. (This workaround is only temporary. You may have to repeat it every time you want to update or install an app.)
What's the cause of the issue? I don't know. I did some analysis of the Console log, and I noticed that the successful and unsuccessful installations were identical up to a point:
commerce StoreSession: StatusCode: 200; <private>; Environment: (null); URL: https://p42-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/buyProduct commerce Purchase queue com.apple.appstore.interactive transaction <Transaction id:2E87B7DB-C948-4FF5-9769-3929E04D8E5D gid:915A8D76-A769-401E-82F5-943F2AFA5CFE state:Purchasing> finished appstoreagent [PreflightManager]: Downloading remote pre-flight from https://osxapps.itunes.apple.com/itunes-assets/Purple114/v4/06/fb/a3/06fba3f4-9579-0b31-f019-0320e4990653/signed.dcr.410616048391928380.pfpkg commerce appstoreagent starting request https://osxapps.itunes.apple.com/itunes-assets/Purple114/v4/06/fb/a3/06fba3f4-9579-0b31-f019-0320e4990653/signed.dcr.410616048391928380.pfpkg commerce Task <34FC213B-30EB-4C0D-8C70-084AB60DE488>.<34> resuming, QOS(0x19) commerce Task <5863161D-D558-41CE-B8DB-3C998A7E7968>.<35> resuming, QOS(0x19) commerce Task <4A825D2F-2F73-460D-A476-25C3AA6CC86A>.<36> resuming, QOS(0x19) commerce Task <C3E1825E-F48D-4EC0-BF42-48F66DC9E582>.<37> resuming, QOS(0x19) commerce <CKStoreRequest: 0x7fc55c52c390> https://osxapps.itunes.apple.com/itunes-assets/Purple114/v4/06/fb/a3/06fba3f4-9579-0b31-f019-0320e4990653/signed.dcr.410616048391928380.pfpkg commerce Task <FA683C70-B1E7-424E-B63B-9591105B9324>.<38> resuming, QOS(0x19) commerce StoreSession: StatusCode: 200; <private>; Environment: (null); URL: https://osxapps.itunes.apple.com/itunes-assets/Purple114/v4/06/fb/a3/06fba3f4-9579-0b31-f019-0320e4990653/signed.dcr.410616048391928380.pfpkg appstoreagent [PreflightManager]: Remote pre-flight downloaded to file:///var/folders/8b/dp0d47js7qzbzkm142yjgl900000gn/C/com.apple.appstore/995724474/preflight.pfpkg appstoreagent [PreflightCheck]: Local pre-flight exists at file:///var/folders/8b/dp0d47js7qzbzkm142yjgl900000gn/C/com.apple.appstore/995724474/preflight.pfpkg. Evaluating. appstoreagent NSURLConnection finished with error - code -1100 trustd cert: ExtendedKeyUsage =(leaf)> 0 trustd cert: TemporalValidity =(leaf)> 0 trustd asynchronously fetching CRL (http://crl.apple.com/root.crl) for client (appstoreagent/0#-1 LF=0) trustd cert: IntermediateEKU =(path)> 0 appstoreagent Trust evaluate failure: [leaf ExtendedKeyUsage] [ca1 IntermediateEKU] trustd cert: TemporalValidity =(path)> 0 trustd cert: TemporalValidity =(path)> 0 appstoreagent [PreflightCheck]: Performing disk space check with 109914607616 bytes available on disk, 0 bytes alreay downloaded and 315652096 required bytes (installSize=702464 + fileSize=376832 + paddingSize=314572800) appstoreagent [PreflightCheck]: Preflight evaluation succeeded appstoreagent [CommerceKitPurchaseRequest]: Purchase complete for 995724474 resulting downloads are: ( "<CKDownload: J42N_C_420081331171837:995724474:829713779>" )
In the unsuccessful cases,
appstoreagent simply stops after "Purchase complete", and the spinner keeps spinning. In the successful cases, on the other hand,
appstoreagent continues by downloading the receipt data, the app icon, and then eventually the app itself.
appstoreagent [CommerceKitDownloadManager]: Wrote 4732 bytes of receipt data to /var/folders/8b/dp0d47js7qzbzkm142yjgl900000gn/C/com.apple.appstore/995724474/receipt appstoreagent [CommerceKitDownloadManager]: Downloading icon from https://is3-ssl.mzstatic.com/image/thumb/Purple124/v4/73/07/32/730732cd-89db-2037-413d-38410c8cee45/AppIcon-0-85-220-0-0-0-0-4-0-0-0-2x-sRGB-0-0-0.png/2000x2000bb.png appstoreagent [CommerceKitDownloadManager]: Starting CommerceKit download for 995724474 commerce appstoreagent starting request https://is3-ssl.mzstatic.com/image/thumb/Purple124/v4/73/07/32/730732cd-89db-2037-413d-38410c8cee45/AppIcon-0-85-220-0-0-0-0-4-0-0-0-2x-sRGB-0-0-0.png/2000x2000bb.png appstoreagent [CommerceKitPurchaseRequest]: Completing 1 purchase(s) completed with 1 result(s) appstoreagent [PurchaseService]: [0883CBFE] Purchase completed successfully
Hopefully this information is useful to Apple engineering. Apple, please work on a fix ASAP! A lot of Mac users are still on Mojave. (Because, quite frankly, Catalina and Big Sur suck big time. Please do something about that too.)
Good news, everyone! It appears that Apple has fixed this problem sometime within the past 24 hours. There was no Mojave software update, so it must have been a server-side change.