DeployGate を使ってみた

先日のエントリーに引き続き DeployGate 関連の調査を行ってみたので軽くまとめておこうと思います.


試用してみた結果としては、これはかなり使い勝手が良いですね.

とても気に入りました.

Jenkins のビルドプロセスに組み込むと、Jenkins さんがビルドを終了するとテスト端末へのデプロイ案内まで終わっているというのは、かなり理想的な環境構築ができると思います.

今回は、Jenkins への組み込みまではやらなかったんですが、Xcode 上で ADHoc ビルドを行うとそのままDepolyGate に登録するってところまでやってみました.

さて、サマリとしてはだいたいこんな感じになるかと...

  • 概要
  • ADHoc 用のビルド設定の追加
  • ADHoc ビルド用のスキーマの追加
  • RunScript の設定(Build Phases への追加)
  • クラッシュログに対するシンボルの解決
  • まとめ


それでは、ざっと手順を振り返ってみようと思います.

概要

DeployGate には WebAPI が用意されているので、Xcode のビルドプロセスにこのAPIを組み込む事でビルドから DeployGate に登録するまでの一連の作業を自動化することができる.

ユースケースとしては以下の流れを想定した.

1. れまで利用していた Scheme は従来通り手元にある開発機に対してビルド&インストールして大まかな動作確認までを行う.
2. 動作確認後(ここで作成する)ADHoc 用のSchemeでビルドを行うと、DeployGate に ipa ファイルの登録を行う.
3. DepolyGate が(社内)テスターさんなどにアプリのアップデートの通知を行う
4. テスターさんは、自分の端末から更新されたアプリのインストールを行う.

ADHoc 用のビルド設定の追加

[Project] - [Info]タブの "Configurations" にある "+"(プラス)ボタンを押し、ADHoc 用のビルド設定の追加を行う.

このスクリーンショットでは、すでに "ADHoc" という名前のビルド設定を追加したあとになっているが、通常の場合 "Debug" と "Release" しか存在していない.

"+"(プラス)ボタンを押下すると、スクリーンショットのように「Duplicate "Debug" Configuration」「Duplicate "Release" Configuration」の二項目が選択できるようになるが、テスト用に配布したいアプリの要件に従って選択すれば良い.

ここで追加するビルド設定(Build Configuration)の名前は、ビルドスクリプト設定時に利用するので注意して付けた方が良い.

ここでは、"ADHoc"とした

ADHoc ビルド用のスキーマの追加

まず通常時のビルド環境と配布向けのビルド環境を分けるため、ADHocビルド専用のスキーマの作成を行う.

スキーマの新規作成は、"New Scheme..."から行えば良い.

ADHoc ビルドを行う際に選択するためのものなので、好きなようにわかりやすい名前を付けておくのが付けて良い.

スキーマを作成したら、同じくスキーマ一覧から "Edit Scheme..."を選択して、 Build Configuration を先ほど作成した
"ADHoc"を選択する


RunScript の設定(Build Phases への追加)

ADHoc ビルド用のスキーマが作成できたら、[TARGETS] - [Build Phases]タブから RunScript の追加を行う.

"+"ボタンを押下すると、"New Run Script Phase" という項目が選べるので選択する.

この "Type a script or drag a script file from yor workspace to insert its path" と書かれている部分に、以下のコードを書く.

;; "ADHoc" の BuildConfiguration の場合
if [ "${CONFIGURATION}" = "ADHoc" ]; then

;; .ipa の生成
xcrun -sdk iphoneos PackageApplication \
"${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/${WRAPPER_NAME}" \
-o ${SRCROOT}/<プロジェクト名>.ipa \
--embed ~/Library/MobileDevice/Provisioning\ Profiles/<プロファイル識別子>.mobileprovision

;; .dSYMs をあとで利用できるようにコピー
cp -r ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME} ${SRCROOT}/${DWARF_DSYM_FILE_NAME}

;; DeployGate に登録
curl "https://deploygate.com/api/users/<DeployGateのユーザー名>/apps" \
-F "file=@${SRCROOT}/<プロジェクト名>.ipa" \
-F "token=<APIキー>"

fi

正しく設定できていれば、ビルドを行うと DeployGate に ipa ファイルがアップロードされ .xcodeproj のある場所に、 .ipa ファイルと .dSYM ファイルがコピーされる.

悩みどころとしては次のぐらいかと...<プロファイル識別子> ってどうすれば良いの?
→ 「iPhone 構成ユーティリティ」で調べると楽かも

(図の挿入)

って にDeployGate のダッシュボードにある API Key であってる?
→ アカウント設定に書かれている API Key の方を使ってください

クラッシュログに対するシンボルの解決

「DeployGate SDK for iOS」を自身のアプリに組み込んでおくと、アプリがクラッシュした(後の次の起動の)時にクラッシュログがダッシュボード上に登録される.

それなりに有益な情報なのだがバックトレースがアドレスで書かれていたりと読みづらいので、.dSYM を利用してシンボルの解決をした方が読みやすい.

> symbolicatecrash ${落としてきたレポート} ${ビルド時にできた dSYM}

このあたりは、「DeployGate SDK for iOS」 の説明ページに詳しく書いてあるので参照のこと.

まとめ

右も左もわからない状況から DeployGate の登録を行うとしても、3〜4時間程度の作業でここまでたどり着けるかと思います.

わかってしまえばどれもたいした手間では無いので、次のプロジェクトといわず、現行のプロジェクトに対しても積極的に
利用していきたいと思いました.

欲を言ってしまえば、 .dSYMs も DepolyGate 側に登録してシンボルの解決を行ってくれると嬉しいのですが...

参考ページ

http://qiita.com/kaz3439/items/503bb16548b395eef155

今回の内容は、ほぼこのエントリーを参考にさせていただきました.

私のエントリーよりも丁寧に書かれていますので、実際に作業するときには参照するのが良いと思います.