Unity iOSプロジェクトでTestFlight配信をJenkinsで行う方法です
動作環境
Xcode9.2, Xcode10.0
Unity2017
Jenkins2.70
前提
JenkinsでAdHocビルドはできている状態を想定します
AdHocビルドのJobからTestFlightのJobへの変更点の説明になります
おおまかな流れ
-
exportOptionsPlist.plist
を変更する -
Info.plist
に輸出コンプライアンスの返答を記述する -
altool
でバリデーションする(必須ではない) -
altool
でアップロードする
1.exportOptionsPlist.plistのmethodをapp-storeに変更する
xcodebuild -exportArchive
のオプションexportOptionsPlist
で指定するplistファイルを変更します
下記のようにmethod
の値をad-hoc
からapp-store
にします
<plist version="1.0">
<dict>
<key>method</key>
- <string>ad-hoc</string>
+ <string>app-store</string>
2.Info.plistに輸出コンプライアンスの返答を記述する
ここまでの状態でTestFlightにアップロードすると, 輸出コンプライアンス情報がありませんという状態で配信はされません
暗号化機能を含まない場合, いいえを選択する必要があります
この手順を自動化するため, Info.plistにキーITSAppUsesNonExemptEncryption
を追加し値をNo
とします
参考までに, UnityのPostProcessBuild
でInfo.plist
に上記の値を追加するコードは下記のようになります
[PostProcessBuild]
public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
var plistPath = Path.Combine(path, "Info.plist");
var plist = new PlistDocument();
plist.ReadFromFile(plistPath);
plist.root.SetString("ITSAppUsesNonExemptEncryption", "false");
plist.WriteToFile(plistPath);
}
3.altoolでバリデーションする(必須ではない)
JenkinsのJobでipa作成より後の箇所にシェルの実行を追加し, 下記シェルを実行しバリデーションを行います
TestFlightにアップロードできるApp Store Connectユーザを作成し指定します
altoolオプション | 説明 |
---|---|
-f | ipaファイルパス |
-t | タイプここではios |
-u | App Store Connectユーザ名 |
-p | App Store Connectユーザパスワード |
参考までに, 私はパスワードはJenkinsのMask Passwords Plugin
を使ってログ表示されないようにしています
(APPSTORE_CONNECT_PASSの箇所)
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool \
--validate-app \
-f Unity-iPhone.ipa \
-t ios \
-u hoge@ hoge.com \
-p ${APPSTORE_CONNECT_PASS}
4.altoolでアップロードする
バリデーションの次に下記のようなシェルの実行を追加しaltool
でアップロードします
アップデート後しばらく経つと, 内部テストユーザーにTestFlight配信がされます
なお, 外部テストの申請や外部テスト公開はブラウザで手動で行う必要があります
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool \
--upload-app \
-f Unity-iPhone.ipa \
-t ios \
-u hoge@ hoge.com \
-p ${APPSTORE_CONNECT_PASS}
参考