Reputation: 9740
I am currently trying to use ALTool to upload my application IPA to App Store Connect as part of a build script. These are the commands I am using:
xcrun altool --validate-app -f my-ipa-file.ipa -t ios --apiKey "MYAPIKEY" --apiIssuer "MYISSUERID"
xcrun altool --upload-app -f my-ipa-file.ipa -t ios --apiKey "MYAPIKEY" --apiIssuer "MYISSUERID"
My private key (p8) is located at
./private_keys/AuthKey_MYAPIKEY.p8
According to the altool --help command the tool will look in the following directories (in order) for a p8 file named AuthKey_<apikey>.p8:
./private_keys
~/private_keys
~/.private_keys
~/.appstoreconnect/private_keys
Considering the p8 file is in the first folder of that list, this should work. And for the --validate-app call, it does actually work. The calls to App Store Connect are made, the app validates and if there are any errors from App Store Connect they return as expected.
However, for some reason the --upload-app command always returns with the same error:
2020-09-01 14:24:40.934 altool[28265:119010] * Error: Error uploading 'my-ipa-file.ipa'.
2020-09-01 14:24:40.934 altool[28265:119010] * Error: code -18000 (Could not locate the private key file: AuthKey_MYAPIKEY.p8)
For some reason it seems --upload-app doesn't properly load the p8 file in ./private_keys/ while --validate-app does.
Placing the p8 file in one of the other 3 folders (~/private_keys etc.) does work for both validate and upload as a temporary workaround. But I prefer to use ./private_keys due to how my build scripts injects files into the build process.
Is this a bug in altool or is there something I'm missing?
Upvotes: 6
Views: 4567
Reputation: 3295
In GitHub actions I just put the api key into $RUNNER_TEMP
. And then when running the xcrun altool
I am doing it like so:
API_PRIVATE_KEYS_DIR=$RUNNER_TEMP xcrun altool
Upvotes: 5
Reputation: 285
This is probably a bug.
When uploading an app, altool
seems to invoke iTMSTransporter
under the hood to do the actual uploading.
The latter changes current directory before running, so when it looks for ./private_keys/AuthKey_MYAPIKEY.p8
in current directory, it checks the wrong location.
See cd
in /Applications/Xcode.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/itms/bin/iTMSTransporter
.
I guess altool
doesn't invoke iTMSTransporter
when validating apps.
Upvotes: 2