How To Perform iOS App Validation From the Command Line
If you want only to validate the signed ipa file, there is tool to do it altool
$ /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool -h
Copyright (c) 2009-2015, Apple Inc. Version 1.1
Usage: altool --validate-app -f file -t platform -u username [-p password]
altool --upload-app -f file -t platform -u username -p password
-f, --file Filename.
-t, --type Type/Platform: osx, ios.
-u, --username Username. Required to connect for validation and upload.
-p, --password Password. Required if username specified. Password is read from stdin if one is not supplied.
May use @keychain: or @env: prefixes followed by the keychain or environment variable lookup name.
e.g. -p @env:SECRET which would use the value in the SECRET environment variable.
-v, --validate-app Validate an app archive. The username, password, and file path to app archive are required.
--upload-app Uploads the given app archive. The username, password, and file path to app archive are required.
--output-format [xml | normal] 'xml' displays error output in a structured format; 'normal' outputs in an unstructured format (default)
-h, --help Display this output.
For ex.
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool -v -f APP.ipa -u [email protected] -p password
You can validate app with the help of altool command as shown bellow:
./altool --validate-app -f <'ipaFile'>
You can validate from the command line using the command:
xcrun -sdk iphoneos Validation /path/to/App.{app or ipa}
It's a bit unclear what checks it performs, but presumably it does as least code-signing and icon dimensions.
In addition to local validation, it's possible to perform online validation (but only for IPA packages):
xcrun -sdk iphoneos Validation -verbose -online /path/to/App.ipa
For this to work you need to have your iTunes Connect credentials stored in a special entry on your keychain. To create this entry:
- Open the Keychain Access application;
- Create a new password item (File > New Password item…)
- Keychain Item Name:
Xcode:itunesconnect.apple.com
- Account Name/Password: Your credentials for iTunes Connect
Online validation seems to be fairly rough, but does all the checks that would otherwise be performed validating an archive from with the Organiser window in Xcode. Sadly it doesn't seem to set a non-zero exit code on failure, which means output scraping to detect errors. My current heuristic for detecting failure is the presence of any output after the Performing online validation...
line.
Given the lack of documentation it's almost certainly not supported.
In the past I've used this command:
xcrun -sdk iphoneos Validation /path/to/MyApp.app or /path/to/MyApp.ipa
This will check the codesigning, icon dimensions etc. I'm not sure if the Xcode Organizer or Application Loader app do any other validation in addition to this tool, and the tool itself has zero help or command line flags that I can find.
UPDATE:
This question has prompted me to dig a bit deeper. Running the strings
tool reveals the following switches:
-verbose
-upload
-warnings
-errors
-online
The -online
option apparently will validate the binary for the first available app in iTunes connect, but I have not figured out how to pass a username/password to the command. However I'm guessing for continuous integration you probably only want the local validation.