前置き
iOS Developer Enterprise Program
というのがあって、社内向けとか限られた組織向けにiOS向けにアプリ配布を可能とする体系です。
これ向けの一通りのやり方は以下に詳しいと思います。
http://plus.vc/iphone/3355/
ここでは、上記に述べられているOTA形式(In-Houseとも呼ばれているらしい)向けのビルドに関するものとなります。
※ まぁ、ipaとplistを自動的に生成しましょうということです。
本題
- Product->Scheme->Edit Schemeでschemeを編集する
- 表示されるウィンドウの左下にあるArchiveの三角を選択して下に広げる
-3つの項目がでてくる - Post-actionsを選択する
- +ボタンを押して以下のスクリプトを入力する
アプリ固有の設定項目や、スクリプトの前提条件などはスクリプトの下に記載しました。
script.sh
echo $SCHEME_NAME schema Archive Post-actions...
# この部分がアプリ固有の設定項目
URL="http://xxxxxxxx/"
TITLE="testApp"
SUBTITLE="test application"
DISTDIR="/Users/obaratomohiro/Documents/dist"
## ここまで
PLCMD="/usr/libexec/PlistBuddy"
InfoPlist="$SRCROOT/$PROJECT_NAME/$PRODUCT_NAME-Info.plist"
BUNDLE_VERSION=`$PLCMD -c "Print CFBundleShortVersionString" ${InfoPlist}`
BUNDLE_IDENTIFIER=`$PLCMD -c "Print CFBundleIdentifier" $InfoPlist | sed "s/$.*/$PRODUCT_NAME/"`
TARGET_DIR=$DISTDIR/$BUNDLE_VERSION
mkdir -p $TARGET_DIR
eval 'xcrun -sdk iphoneos \
PackageApplication \
-v "${ARCHIVE_PRODUCTS_PATH}/Applications/${FULL_PRODUCT_NAME}" \
-o "$TARGET_DIR/${PRODUCT_NAME}.ipa"'
cat <<EOF > $TARGET_DIR/$PRODUCT_NAME.plist
<?xml version="1.0" encoding="UTF-8"?>
<!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>$URL/$PRODUCT_NAME.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<false/>
<key>url</key>
<string>$URL/large.png</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<false/>
<key>url</key>
<string>$URL/small.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>$BUNDLE_IDENTIFIER</string>
<key>bundle-version</key>
<string>$BUNDLE_VERSION</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>$SUBTITLE</string>
<key>title</key>
<string>$TITLE</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOF
固有設定について
前提条件
- 単体で動作できているものであること。特にsign関連ではそれを想定して手抜きをしている
- URLで示す場所にipa、plist、2種png、index.html等を配置する
- TITLEはダウンロードする際に、表示されるもの
- SUBTITLEの位置づけはよくわからない、適当な文字列でよさげです。
- DISTDIRは作成されたipa/plistファイルを配置するディレクトリを指定します。
一応バージョンごとにさらにディレクトリを作成して配置するようになっています。
ビルド番号自動更新 これと連携するとよりよい感じです。
本稿のスクリプトの後にバージョンをカウントアップすべきなので、もう一つスクリプトを追加して記載し、順番に留意すること。
- 2種pngは、large.png、small.pngという名前を前提としています。
補足
ここでは直接関係ない情報ですが、インストールして貰うページ、通常index.html等に設定する内容も紹介しておく
index.html
<html>
<head>
<title>testApp install</title>
</head>
<body>
<div>
<img src="small.png" alt="app icon">
<script language="JavaScript">
<!--
document.write("<a href=\"itms-services://?action=download-manifest&url=" + location.href + "testApp.plist\">INSTALL</a>");
//-->
</script>
</div>
<br />
</body>
</html>
余談
- png2種とindex.htmlは通常一度作れば、そのまま変更する必要はないと思ったので、ipaとplistを生成するものとしている
- アプリ固有の情報は別の場所に記載して参照するようにしても良いと思うけど、見通しが悪くなると思うので、おすすめはしません
- もちろん、できたファイルをscpでアップロードしたり
謝意
『.ipaファイルを自動生成する』をみて、今回の環境構築ができた。自身の作業効率も上げることができたので、非常に感謝している。