40
votes

As part of the countinues integration process of my iPhone application, I want to create a process that will automatically upload the app (.ipa) file to the apple app store. I already managed to create the package and validate it. Is there a way to upload the ipa file to the appstore via command line?

5
You could try automating or AppleScripting Xcode, and call that automation script from the command line. - hotpaw2

5 Answers

31
votes
  1. Make sure you have an application in "waiting to upload" state.

  2. Create a new keychain Item Named: Xcode:itunesconnect.apple.com provide your credentials to itunes connect.

  3. From the command line: xcrun -sdk iphoneos Validation -online -upload -verbose "path to ipa"

18
votes

The previous reply does not work with the new iTunes Connect any more.

You need to use the iTunes Transporter to upload your app to iTunes Connect. Check out the source code of deliver on GitHub: https://github.com/fastlane/fastlane/blob/master/fastlane_core/lib/fastlane_core/itunes_transporter.rb

You can use deliver to automatically upload new updates to the App Store: https://fastlane.tools/deliver

5
votes

UPLOAD IPA TO TESTFLIGHT

altool --upload-app -f "${APP_NAME}.ipa" -u $APP_STORE_USERNAME -p $APP_STORE_PASSWORD

To use altool from anywhere in the terminal you could add it to your PATH env variable by typing in terminal:

Previous to Xcode 11:

MacBook-Pro:~ denis$ export PATH=$PATH:/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/
MacBook-Pro:~ denis$ source ~/.bash_profile

From Xcode 11 and later: (altool has changed location)

MacBook-Pro:~ denis$ export PATH=$PATH:/Applications/Xcode.app/Contents/Developer/usr/bin/
MacBook-Pro:~ denis$ source ~/.bash_profile
2
votes

You should use application loader tool: altool --upload-app -f file -u username [-p password] [--output-format xml]

As describe in: https://help.apple.com/itc/apploader/#/apdATD1E53-D1E1A1303-D1E53A1126

0
votes

You can try using Transporter directly to get away from fastlane if desired. It can also be installed on any OS so container based (docker) uploads are theoretically possible.

Once you have it setup try something like:

iTMSTransporter -m upload -u <usename_email> -p <password> -k 10000 -itc_provider <provider_id> -assetFile MyApp.ipa -assetDescription AppStoreInfo.plist

The provider ID is something you will need to look up using the transporter's -m provider command