参考
- Testflight build notes via iTMSTransporter
- [self reloadData];: Automatic app creation and binary upload
- Command upload App/Ipa to the iTunes Connect App Store
- Redesign of itunes connect · Issue #38 · kovpas/itc.cli · GitHub
TL;DR
Xcode(厳密にはApplication Loader)に付属するiTMSTransporterまたはaltoolを使います。 上記のリンク先を見ればだいたいわかります。
altoolのほうが直感的なコマンドで簡単です。
iTMSTransporterはそもそもゲームのアイテムなど大量のIn-App Purchaseのメタデータを一括更新するためのソフトウェアで、POSTするデータはXMLで用意しなければならないなど、単に申請するアプリケーションをアップロードするという目的には少し面倒です。
altoolでアプリケーションをアップロードする
altoolはXcodeに付属しています。
--help
オプションを付けて実行すると表示される使い方を見ればだいたいわかると思います。
$ `/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool` --help Copyright (c) 2009-2014, Apple Inc. Version 1.0 Usage: altool -v -f file -u username -p password altool --upload-app -f file -u username -p password -f, --file Filename. -u, --username Username. Required to connect for validation and upload. -p, --password Password. Required if username specified. -v, --validate-app Validate an archived app. The username, password, and file path to app archive are required. --upload-app Uploads the given app. The username, password, and file path to app archive are required. -h, --help Display this output.
ipaファイルをiTunes Connectにアップロードするには下記のようにオプションを構成します。
$ altool --upload-app -f build/AppName.ipa -u USERNAME -p PASSWORD
--upload-app
オプションを--validate-app
または-v
にすると、検証(プライベートAPIの有無やLaunch ImageやアイコンがDeploymentTargetと矛盾しないかどうかなどのチェック)だけしてアップロードは行いません。
--validate-app
はCIなどで自動的に実行するようにしておくと良いと思います。
$ altool -v -f build/AppName.ipa -u USERNAME -p PASSWORD
iTMSTransporterでアプリケーションをアップロードする
まずApp Store packageを作る必要があります。
App Store packageは.itmsp
という拡張子を持つディレクトリです。
App Store packageにはそのアプリケーションのメタデータをmetadata.xmlという名前のファイルで格納します。
上述したIn-App Purchaseのメタデータをアップロードするのは項目がたくさんあって大変なのですが、アプリケーションのアップロードに必要なのは下記のようにAppID、ファイル名とサイズ、およびチェックサムがあればいいようです。
<?xml version="1.0" encoding="UTF-8"?> <package version="software4.7" xmlns="http://apple.com/itunes/importer"> <software_assets apple_id="123456789"> <asset type="bundle"> <data_file> <file_name>AppName.ipa</file_name> <checksum type="md5">8ef4f4c855a4d16d5710075c2caa6c85</checksum> <size>1174126</size> </data_file> </asset> </software_assets> </package>
ipaファイルはApp Store package、つまりmetadata.xmlと同じ階層に格納します。
App Store packageがmybundle.itmsp
という名前ならば、ファイル構成は次のようになります。
$ tree mybundle.itmsp/ mybundle.itmsp/ ├── AppName.ipa └── metadata.xml 0 directories, 2 files
あとは必要なオプションとともに実行するだけです。
パッケージをアップロードはするには、-m
オプションを使って動作モードをアップロードモードに指定します。
'/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/bin/iTMSTransporter' -m upload -f mybundle.itmsp -u USERNAME -p PASSWORD -v detailed
以前の方法
以前のValidation
コマンドを使う方法はXcode 6からはerror: Unknown application extension '.' - expected '.app' or '.ipa'
というエラーが出てしまうので使えなくなったようです。
xcrun -sdk iphoneos Validation -online -upload -verbose build/AppName.ipa
iTunes Connectで必要な手続き
以前のiTunes Connectではバイナリのアップロードするには、アプリケーションの状態をReady to Uploadの状態にしておく必要がありましたが、現在のiTunes Connectではバージョン番号とビルド番号(CFBundleShortVersionStringとCFBundleVersion)さえ異なっていればいつでも任意のビルドをアップロードできるようです(審査中でも)。
アップルのTestFlightは自動化できないからワークフローに載せにくいと思っていましたが、アップロードが自動化できるのならけっこう使いものになるんじゃないかと考えています。