Azure PipelinesとDeployGateでiOSアプリのリリースを自動化してみた

みなさん、こんにちは。

入社3年目のプリンシパルのしもじです。

4月にプリンシパルという職位になりました。私自身、意味はよくわかっていません。

 

さて、ecbeing はアプリ開発もやってます。

去年からアプリ開発を任されていて、機能追加したり構造化したりしてました。

構造化の話は機会があれば記事にしようと思います。 

 

はじめに

Xcode でビルドして .ipa ファイルを作成、 DeployGate にアップロードし配布ページの更新までの手順が手間でした。

そこで 、 Azure Pipelines で iOS アプリを AdHoc ビルドして、DeployGate にアップロードするまでを自動化してみました。

 

準備

3つのファイルが必要になるので先に準備しておきます。

  1.  証明書(p12)
  2. provisioning profile
  3. export options plist

 

 

今回は Ad Hoc でビルドするので、証明書と provisioning profile は Ad Hoc 用を用意します。 export options plist は最低限の構成で作成します。

  • method - Ad Hoc でビルドしたいので「ad-hoc」を指定します。
  • teamID - 署名に使うチームIDを指定します。
  • provisioningProfiles - 「Key」にバンドルID、「Value」に provioning profile のname を指定します。

exportOptions.plist

exportOptions.plist

 

他のオプションが気になる方は以下のコマンドを実行することで確認することができます。

xcodebuild -h

 

 

手順

プロジェクトの作成

Azure DevOps にログインして「Pipelines」 からプロジェクトを作成します。

Select a template で「Xcode」 を選択し、「Apply」をクリックします。 

xcodeを選択

xcodeを選択

 

 タスクの編集

証明書のインストールタスクの設定

プロジェクトが作成できたら、ビルドを実行するためのタスクを編集していきます。

まず「Install an Apple certificate」タスクを右クリックし有効化し、あらかじめ用意した証明書を下記画像の赤枠からアップロードします。

また、証明書のパスワードが必要なので「Variables」タブの「P12password」にパスワードを設定します。 

証明書をアップロード

証明書をアップロード

 

provisioning profileのインストールタスクの設定

つづいて「Install an Apple provisioning profile」ジョブも有効化し、provisioning profile をアップロードします。 

Provisioning Profile をアップロード

Provisioning Profile をアップロード

 

ビルドタスクの設定

 次に「Xcode build」タスクを設定します。

「Signing style」を選択します。署名できればどれでもいいとは思いますが、こちらの環境では「Project Default」以外を設定するとうまくいかなかったので「Project Default」に設定しました。

Sigining style の選択

Sigining style の選択

 

ipaファイルを作成するために「Create app package」にチェックをいれます。

ipaファイルを作成するために export options plistを設定する必要があるため、「Export options」で 「Plist」 を選択し、「Export options plist」にあらかじめ用意した export options plist のパスを入力します。

ipaファイルを作成するための設定

ipaファイルを作成するための設定

 

「Copy Files to: $(build.artifactstagingdirectory)」タスクと「Publish Artifact: drop」タスクは今回は不要なタスクなので右クリックから無効化します。

 

DeployGateアップロードタスクの設定

最後にDeployGate にアップロードするためのタスクを作成します。

残念ながらDeployGate 専用のタスクはないので、Bashを使います。

「Agent job 1」の右側にある「+」をクリックしてタスクの一覧から Bash を選択します。

Bashタスクを追加

Bashタスクを追加

 

Bashタスクが追加できたら、「Type」で「Inline」を選択し、「Script」に以下のコードを張り付け、各パラメータを設定します。ipaファイルが作成されるディレクトリがわかりにくいので、一度ビルドして確認してみるといいと思います。

今回は配布ページの更新も行いたかったので distribution_key を指定しています。詳しくは DeployGate API のページを参照してください。

bashタスクの編集

bashタスクの編集
curl \
  -F "token=xxx" \
  -F "file=@sample.apk" \
  -F "message=sample" \
  -F "distribution_key=abcd1234" \
  -F "release_note=new build" \
  https://deploygate.com/api/users/_your_name_/apps

https://docs.deploygate.com/reference#deploygate-api

 

自動実行の設定

あとは「Trigger」タブの「Enable continuous integration」にチェックをいれて、git pushに反応してジョブが自動実行されるよう設定します。

ジョブの自動実行

ジョブの自動実行

 

さいごに

これで Azure Pipelines でアプリをビルドして、DeployGate にアップロードするまでを自動化できました。

これまでは Xcode 上のビルドで済ませていたので、 export options plist が必要なことを知らなかったりいろいろと躓きポイントがありました。しかし、変更があるたびビルド、アップロード、再配布をしていた手間が省けてかなりいい感じで自動化した甲斐がありました。

それではまた。

 

しもじ

 

~ecbeingではエンジニア仲間を募集中です!~

www.softcreate-holdings.co.jp