毎度のことなんだけども、testflightに配信しようとすると
- Xcodeでアーカイブして
- Organizerからipaファイル吐かせて
- testflightにアップして
- リリースノート書いて
- いつものメンバーに配信する
みたいなフローが必要だったので、面倒になってスクリプトにまとめてしまった。
やってること
流れとしては、
- アーカイブする
- ipaファイル作る
- リリースノート書く
- testflightのUpload APIに配信する
と言った感じ。
ちなみに大抵Cocoapods使ってるのでxcworkspaceのある環境が対象です。そうでない人は適当にxcodebuild部分だけ書き換えてください。
testflight
#!/bin/sh
# applicationの名前
APP="hoge"
# SDK
SDK="iphoneos7.0"
# ビルド時の設定
CONFIGURATION="Release"
# 出力先
OUT_DIR="build"
# ワークスペース名
WORKSPACE="hoge.xcworkspace"
# ワークスペース内のビルド対象スキーム
TARGET="hoge"
# PROVISIONING FILE
PROVISIONING="*****-****-****-****-****"
# TESTFLIGHTのAPIトークン
TESTFLIGHT_API_TOKEN="your api token"
# TESTFLIGHTのAPIトークン
TESTFLIGHT_TEAM_TOKEN="your team token"
# TESTFLIGHTの配布対象チーム
TESTFLIGHT_TEAM="Your distribution team"
# ビルドする
if [ -a build ]; then
echo "Remove existing build dir."
rm -R build
fi
# ビルド
xcodebuild -workspace "${WORKSPACE}" -sdk "${SDK}" -configuration "${BUILD_SCHEME}" -scheme "${TARGET}" clean build CONFIGURATION_BUILD_DIR="$(PWD)/${OUT_DIR}" PROVISIONING_PROFILE="${PROVISIONING}"
# IPAファイル化
xcrun -sdk "${SDK}" PackageApplication "${OUT_DIR}/${APP}.app" -o "$(PWD)/${OUT_DIR}/${APP}.ipa" --embed "${PROVISIONING}.mobileprovision"
# リリースノート作成
vi "${OUT_DIR}/release.txt"
# 存在しない場合はとりあえず空ファイル用意しておく
if [ ! -f "${OUT_DIR}/release.txt" ]; then
touch "${OUT_DIR}/release.txt"
fi
# テストフライトへ送信
curl http://testflightapp.com/api/builds.json \
-F file="@${OUT_DIR}/${APP}.ipa" \
-F api_token="${TESTFLIGHT_API_TOKEN}" \
-F team_token="${TESTFLIGHT_TEAM_TOKEN}" \
-F notes="@${OUT_DIR}/release.txt" \
-F notify=True \
-F distribution_lists="${TESTFLIGHT_TEAM}"
これを作業ディレクトリにtestflightって名前などで配置してchmod a+x testflight
して./testflight
すれば、アーカイブ始まって、完了後にviが起動するのでリリースノート書いて保存すればtestflightで配信されます。
便利。
追記
build/
ディレクトリは多分デフォルトで.gitignoreに記載されてると思いますが、無い場合は追記、もしくはOUT_DIRで別なディレクトリを指定してください。