Why is it so hard to upgrade a sticker app that has literally no code?
In December 2019 I wrote an article about Unnecessary Forced “App” Updates. TLDR — around this time, Apple started deleting apps which didn’t conform to App Store Review Guidelines, in other words apps that hadn’t been recently updated.
I don’t have a problem with this policy but I do have a big problem with things changing outside my control and making the upgrade process a nightmare.
There are normally two things that go wrong. The first is the arcane code signing process. My initial article dealt extensively with this issue so I wont repeat the solution here.
The new issues revolve around changes that Apple have made to Xcode and the App Store Connect upload process. This is a soul destroying journey through Apple Developer Forums and StackOverflow questions, poorly signposted by cryptic error messages which seldom relate to the actual problem.
To be clear, these sticker packs contain no code. They are a collection of images with some associated meta data. This is the simplest upgrade use case. I don’t understand why the entire process can’t be largely automated.
Once you get your sticker app to compile, you can archive it, which is the first step in uploading your build to Apple so that they can review it and return your “upgraded” app to the App Store. The only substantive changes are to the app version number and the minimum iOS version required to run the app. You normally want to keep the minimum iOS version to the oldest possible in order to work on the largest number of phones. For this upgrade I increased the minimum iOS version to 11.0.
Unless you have been living in a cave, you have probably heard that Apple have released computers based on their own M1 silicon. One of the purported benefits of this is that iOS apps may be able to also run on macOS. Stickers cannot run on macOS for some reason and this is where our problems start.
App Store Connect Operation Error
ERROR ITMS-90039: “Type Mismatch. The value for the Info.plist key LSApplicationLaunchProhibited
is not of the required type for that key. See the Information Property List Key Reference at
https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009248-SW1"App Store Connect Operation Warning
WARNING ITMS-90863: “Apple silicon Macs support issue. The app has LSApplicationLaunchProhibited set to true.
This is not supported on Mac.”
When you try to upload your updated app, you get the error above at the end of the process. Okay that is frustrating, I haven’t added this item to the Info.plist (which is just a dictionary of app configuration settings) but I guess I can change the type to boolean and make it false.
However, when you search for the LSApplicationLaunchProhibited key in both Info.plist’s (there is one for the base app and one for the sticker extension), it isn’t there. Much googling later you will find that the solution has nothing to do with the Info.plist but is found on the App Store Connect web site, under Pricing and Availability. If you uncheck “Make this app available” under the Apple Silicon Mac Availability heading, this error will disappear. Why would this new field not default to no for sticker apps???
ERROR ITMS-90725: “SDK Version Issue. This app was built with the iOS 13.0 SDK. All iOS apps submitted to the App Store must be built with the iOS 14 SDK or later, included in Xcode 12 or later.”
Uploading again, we are treated to a new error “SDK Version Issue”. In other words we need to update Xcode to version 12 or later. I hadn’t done this because version 12 requires macOS Big Sur. I was still running Mojave because I knew the upgrade would break some of my other apps. Oh well.
Many hours later, I’ve upgraded to Big Sur but for some reason Xcode isn’t shown as an available upgrade so I have to download v12 from the App Store and reinstall it. Right that should sort out ERROR ITMS-90725! Let’s try another upload.
ITMS-90613: Invalid Messages Application Extension Support. The Messages app extension bundle is missing. For more information refer to https://developer.apple.com/documentation/messages.Invalid directory. The bundle Payload/Sheep.app/StickerPackExtension.appex is not contained in a correctly named directory. It should be under “PlugIns”. With error code STATE_ERROR.VALIDATION_ERROR.90680 for id 31fbd930–2642–4e9c-9935-b623b942ce06
Hmmmmmmm. It appears that Apple has changed where Xcode stores the sticker pack extension. If I made a change like this to one of my apps, I would include a data migration process to automatically handle the change. At this point I decided to just start from scratch and create a new sticker app using Xcode v12. This should sort out all the gremlins introduced by Apple through upgrade incomptabilities and it did. In future, as soon as I start running into similar issues with sticker pack upgrades I will do the same thing as it is quicker than chasing the Wampus. For more complicated apps which actually include code, linked libraries and multiple storyboards, it is not so simple a process to start again. Let’s try another upload…
ERROR ITMS-90189: “Redundant Binary Upload. You’ve already uploaded a build with build number ‘1’ for version number ‘1.1’. Make sure you increment the build string before you upload your app to App Store Connect. Learn more in Xcode Help (http://help.apple.com/xcode/mac/current/#/devba7f53ad4)."
Even though my builds failed to upload and were not added to App Store Connect, I still needed to increment the app build number. At least this error message related to the actual problem. Increment build number, re-archive and upload.
ITMS-90076: Potential Loss of Keychain Access — The previous version of software has an application-identifier value of [‘UISC66B7DA.au.com.reefwing.Sheep’] and the new version of software being submitted has an application-identifier of [‘G9CV83338E.au.com.reefwing.Sheep’]. This will result in a loss of keychain access.
This is just a warning, and irrelevant to a sticker pack, thus we all get to move on with our lives.