Unity Cloud Buildを使ってiOSアプリの自動配布環境を構築する
Unity Cloud Build(UCB)はクラウド上のサーバでUnityのプロジェクトをビルドすることができるサービスです。今回はさらにアプリ開発者向けテスト配信サービスのdeploygateと組み合わせてビルド、アプリのデプロイ、配信までの自動化を行ってみます。
1.全体像
手順をひとつずつ追っていく前に全体像を把握します。
① GitHubにコードをpush (UnityのプロジェクトファイルはGitHubで管理)
② UCBはコードがpushされたことを検知してpull/ビルドを実行
③ ビルドが完了したらipaファイルをdeploygateへデプロイ
④ テスターはインストールページからアプリをインストール
2.事前確認
Unity Cloud Buildを使用するためにはUnity Teams Advancedのサブスクリプション契約が必要です。Unity Plus/Proプランを契約していれば3 seats分のUnity Teams Advancedが無料で付与されます。
使用しているアカウントにUnity Teams Advancedのシートが割り当てられているかはブラウザからUnity IDにログインして確認することができます。
もし、Unity Plus/Pro契約をしているにもかかわらず、Teams Advancedが付与されていない場合はPlus/Pro契約をしたときにUnityから以下のような「Unity Teams Advanced 無料引換クーポンについてのご案内」メールが送られてきているか確認してみてください。
Unity Plus/Pro契約で付与されるTeams Advancedは、メールに記載されているクーポンコードをUnity IDページの[製品と引き換える]メニューで入力することで初めて使えるようになります。メール文には30日以内とありますが、私の場合は過ぎていても引き換えできました。
また、iOSアプリをビルドするにはApple Developer Programの契約が必要です。Unity Teams Advanced、Apple Developer Programそれぞれ契約を行った状態で先に進んでください。
3.Unityプロジェクトとサービスとの紐づけ
ビルドを行いたいUnityプロジェクトをエディタで開き、メニューの[Window] -> [General] -> [Services]を選択します。
Servicesパネルが表示されるのでプルダウンメニューからorganizationを選択して[Create]ボタンを押します。
会社等の組織(organization)アカウントから個人アカウントに対してProラインセンスが割り当てられている場合で、メニューのorganizationに表示されないときはアカウント権限がマネージャー以上になっているか確認してください。ユーザ権限だとorganizationにプロジェクトを作成できません。
作成したUnity IDにログインしてダッシュボードのDevelopタブを選択してプロジェクト一覧にエディタから作成したプロジェクトが追加されていることを確認します(今回の例ではCloudBuild01)。
この画面の[Create New Project]から作成することも可能ですが、エディタで開いたプロジェクトから作成した方が直感的で分かりやすいためこちらの方法で作成しました。
これでこのプロジェクトとServicesが紐づいて様々な設定が行えるようになりました。次に該当プロジェクトの[view]ボタンを押してCloud Buildの設定に進みます。
4.Unity Cloud Build(UCB)の設定:GitHub
プロジェクトのダッシュボード上で[Cloud Build] -> [Config]を選択しします。まず最初にビルドするUnityプロジェクトファイルを引っ張ってくるためにGitHubとの連携設定を行います。GitHubにUnityプロジェクトのリポジトリを作成していない場合は作成しておいてください。
Source Control Settingsの[EDIT SOURCE CONTROL]をクリックします。
ソースコードの管理プロバイダーとしてGitHub以外にBitbucketやGitLabが選択できますが、今回はGitHubを選択して先に進みます。
使用しているGitHubアカウントとのOAuth認証が完了するとリポジトリ選択画面が表示されるので、対象のリポジトリを選択します。
ソースコードの設定が完了すると以下のような画面になります。これでGitHubとの連携は完了です。次に[SETUP NEW TARGET]をクリックしてビルドターゲットの設定に進みます。
5.ビルド設定
まずどのプラットフォームのビルドを行うかを指定します。今回はiOSを選択します。
次にブランチやどのUnityバージョンでビルドを行うかの設定を行います。
ラベルは任意の文字列で構いません。BranchはGitHubでブランチを分けている場合はビルド対象のブランチを選択します。
Auto Detect Versionを有効にするとUnityプロジェクトのProjectSettingsから自動でビルドを行うUnityバージョンを検出してくれます。無効の場合は直接Unityバージョンを指定します。
Auto-buildを有効にすると、GitHubにコードの変更をPushしたときに自動でビルドが実行されるようになります。ここではOnにしておきます。
設定が終わったら[CREDENTIALS]ボタンを押して次に進みます。
6.証明書の設定
iOSアプリのビルドには正規の開発者によってビルドが行われたかを証明するための証明書が必要になります。また証明書の内容によってはインストール可能な端末も制限されています。これによって不正アプリの配布や海賊版アプリの横行を防いでいるわけですね。
それでは署名の設定をしていきます。
Bundle IDは com.DefaultCompany.XXXX のようなIDを設定します。このIDはApple Developer Programで設定したBundle IDとUnityのPlayer Settingsで設定してあるBundle Identifierの3つが全て一致している必要があります。
他の項目は以下のようにそれぞれ設定します。
・Xcodeバージョン:Latest Compatible Version
・iOS Credentials:Apple Developer Programで取得したcerファイル
・名前:任意の文字列
・Mobile Prov File:Apple Developer Programで取得したmobileprovisionファイル
・p12 File:cerファイルとkeyファイル(秘密鍵)で生成した.p12ファイル
cer(証明書)ファイルとmobileprovisionファイルの取得方法は長くなるのでここでは解説を省略します。p12ファイルについては秘密鍵とcerファイルがあればWindowsでもopensslを使って作成することができます。
設定を終えたら[BUILD]ボタンを押します。
7.ビルド
ビルドが開始されるとダッシュボードの[Cloud Build] -> [History]からビルドが進行していることが確認できます。
ほとんど空っぽのプロジェクトでもビルドの完了には20分程度かかるので気長に待ちましょう。ビルドが成功すると以下の画面のようになり、アプリ(ipaファイル)のダウンロードボタンが作成されます。
ダウンロードボタンを押してipaファイルをダウンロードしておきます。また、この画面ではShare Link機能でスマホからアプリをインストールできるページを作成することや、ビルド時の詳細なログを確認することができます。
さらに[Notification]の設定からAutomatic Build Sharing機能を有効にしてIntegrationでメールやSlack等と連携するとメッセージにインストールページのリンクを入れることも可能です。
ここまでの手順で自動配布の目的は達成できましたが、ビルド後のIntegration設定項目にはない処理や、テストアプリ配信サービスとして便利な機能を提供しているdeploygateへの自動デプロイ方法を次の項目で解説します。
8.deploygateの設定
deploygateのアカウントを作成してダッシュボードを表示します。次に画面左側にあるの[アップロード]ボタンを押して先ほどビルドして得られたipaファイルをアップロードします。
アップロードが完了するとアプリページが作成されます。右上の[共有用のリンクを追加ボタンをクリックします。
スマホからアプリをインストールできるページが作成されます。
このときブラウザのURL欄に表示される
"https://deploygate.com/distributions/XXXX"
の"XXXXX"部分をメモしておきます。
さらにdeploygateのアカウントページに移り、プロフィール設定のAPI Keyを同様にメモしておきます。
このdistribution_keyとAPI Keyを使ってUnity Cloud Buildからdeploygateへ自動デプロイを行います。
9.Unity Cloud Buildの設定:デプロイ
Unity Cloud Buildはビルドの前後でシェルスクリプトを実行することができます。この機能を使ってビルド完了後にdeploygateにipaファイルをデプロイします。
まずUnity Cloud Buildのダッシュボードの[Config]からAdvanced Optionsの[EDIT ADVANCED OPTIONS]をクリックします。
advanced optionsのPost-Build Script Pathの項目に実行するスクリプトのパスを指定します。画像の例では Assets/Scripts/deploy_app.sh としています。
パスの構成からお気付きかと思いますが、スクリプトファイルはビルドするUnityプロジェクトファイルに配置することで実行することができます。
スクリプトファイルはプロジェクト内のどの場所に配置しても構いませんが、配置した場所を適切にパスとして指定してください。
記入が終わったら[SAVE]ボタンを押して保存します。Unity Cloud Build側の設定はこれで完了です。
10.デプロイスクリプトの作成
deploygateにipaファイルをデプロイするスクリプトを作成します。テキストエディタ等で以下の内容をdeploy_app.shとして作成してください。
#!/bin/sh
echo "Deploy to deploygate"
build_number=`awk -F\" '/"buildNumber"/{print $4}' build_manifest.json`
version_number=`awk -F: '/bundleVersion/{print $2}' ProjectSettings/ProjectSettings.asset | sed -e "s/ //g"`
curl \
-H "Authorization: token <your api token>" \
-F "file=@$2/build.ipa" \
-F "message=${version_number} (${build_number})" \
-F "distribution_key=<XXXX>" \
"https://deploygate.com/api/users/<your name>/apps"
<your api token>はdeploygateのAPI Key、distribution_keyはアプリ配布ページURLのdistributions/XXXXの"XXXX"部分、<your name>はユーザ名をそれぞれ記述します。
deploygateのAPIリファレンスは以下を参考にしてください。
build_numberとversion_numberは説明欄にアプリのバージョンとUnity Cloud Buildのビルド番号が入るようにしています。特になくても大丈夫ですが、あるとどのビルドと対になっているかわかるので開発時には便利かと思います。GitHubのコミットとビルド番号の対応はUnity Cloud Buildのダッシュボードで確認できます。
スクリプトファイルはUnity Cloud Buildのadvanced optionsで指定したパスの位置に配置します。今回の例ではプロジェクト内の Assets/Scripts/deploy_app.sh なので、Unityエディタ上でScriptsフォルダを作成し、そこにドラッグアンドドロップしてください。
(本来ScriptsフォルダはC#用のゲーム内コードを配置するフォルダなので別にした方が良いかもしれません)
配置が終わったらコミットしてGitHubリポジトリにpushします。正常に動作しているかUnity Cloud Buildのダッシュボードから[History] -> ビルドターゲットの[VIE DETAILS] -> [FULL LOG]を確認したり、deploygateにipaファイルがデプロイされているか確認してみてください。
2020.08.17追記
gitコマンドも使えるので、コミットIDからコメントを取得して一緒にデプロイすることもできます。
commit_id=`awk -F\" '/"scmCommitId"/{print $4}' build_manifest.json`
comment=`git show ${commit_id} --no-patch --pretty=%B`
11.まとめ
Unity Cloud Buildとdeploygateを使ってiOSアプリのビルドからデプロイ、配布までの自動化を行ってみました。開発者が都度ローカルでビルドしたものをテスターに配布するのは手間がかかります。
こうしたCI/CDツールを使うことで効率よく開発を進めることができたり、アプリを色々な人に使ってもらうことで品質を上げることができます。
Unity Cloud Buildではビルドの前後でスクリプトを実行できるため、Google Play StoreやApp Storeに自動でデプロイすることも可能だと思います。Unity Plus/Proは契約しているけどTeams Advancedは使ってないよという方は、この機会にUnity Cloud Buildを使ってみてはいかがでしょうか。🌱
この記事が気に入ったらサポートをしてみませんか?