アプリで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 件のコメント:
コメントを投稿