
アプリでJenkinsをビルドしたら、そのままiPhoneへインストールしたいので、
TestFlight的な何かを作ってみました。
作るために必要となる知識をまとめてみました。
ビルド
iPhoneのアプリのビルドをしますが、
ビルドする際にiPhoneが登録してあるProvisioning Profileでビルドします。
また、.ipa形式までビルドします。
JenkinsにはXcode Pluginがあるので、そちらを使ってもいいですし、
以前、
【iPhone】Jenkins CIで自動ビルド
という記事も書いているので、そちらのシェルをコピーしてもビルド出来ます。
ビルドが終われば.ipa形式のファイルが出来上がります。
ビルド結果一覧
Jenkinsでビルドされたビルド結果は、
/path/to/.jenkins/jobs/ProjectName/builds
にあります。
ビルド番号と時間のディレクトリがあり、
番号は時間へのシンボリックリンクです。
なので、番号一覧だけ取得すれば、ビルド一覧になりますので、
ls -F /path/to/.jenkins/jobs/ProjectName/builds | grep @ | awk -F '\@' '{print $1}'
とすると、ビルド番号のみ取得出来ます。
アプリ一覧取得
ビルド番号を指定したら、そのビルドでビルドされた.ipa一覧を取得します。
ls -R builds/100/archive/ | awk '/:$/&&f{s=$0;f=0} /:$/&&!f{sub(/:$/,"");s=$0;f=1;next} NF&&f{ print s"/"$0 }' | grep '\.ipa'
とすると、ビルド番号100番の.ipa一覧が取得出来ました。
CFBundleIdentifierとCFBundleDisplayNameの取得
インストール用のplistを作成しないといけないので、
plist作成の為に.ipaのCFBundleIdentifierとCFBundleDisplayNameを取得します。
unzip -o {ipa_file} -d {unzip_dirname}
で、ipaファイルを解凍し、
.appディレクトリ内のInfo.plistに対して、
/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "{PlistFileName}"
と、
/usr/libexec/PlistBuddy -c "Print :CFBundleDisplayName" "{PlistFileName}"
を実行すれば、アプリ名とBundle IDが取得出来ます。
インストール用Plist作成
.apkと違い、.ipaはそのままではリンクにしてもインストール出来ないので、plistを作成します。
名前は何でも大丈夫です。
ファイルのipaのURL、Bundle ID、タイトルは書き換えて下さい。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>{INSTALL_IPA_URL}</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>{BUNDLE_ID}</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>{DISPLAY_NAME}</string>
</dict>
</dict>
</array>
</dict>
</plist>
リンク作成
ipaへのリンクを作成します
リンクは、
itms-services://?action=download-manifest&url={PLIST_FILE_URL}
というリンクをaタグで囲います。
成功すればインストールが開始されます。
インストールが開始されない場合は、URLのエスケープを疑って下さい。
疑うポイントはPlist内のURLと、itms-serviceで追加するURLの部分のエスケープです。
追記
Node.js - expressでインストール用プロジェクトは作ってあるのですが、
とても見せられるコードでは無い為、公開は控えております。
0 件のコメント:
コメントを投稿