いま使っているノートPCはMacBook Proなのですが、次に購入するのはOculus RiftやHoloLens開発のできるWindowsのノートにしようと思っています。そうすると、iOS向けのビルドができなくなってしまうな、ということで、Cloud BuildでのiOSビルドについて調査しました。
以前はCloud Buildは無料で使えたのですが、現在は有償サービスとなっています。
Unity TeamsのAdvancedプランに含まれています。
月額9ドルで、Cloud Buildに加えてストレージやコラボレートの機能も含まれています。契約期間などに縛りは無いようですし、初月は無料なので、比較的気軽に試せるのではないでしょうか。
Cloud Buildの流れは、GitHubやBitbucketにコミットされたソースコードをクラウド上で直接ビルドし、結果のバイナリをダウンロードして実機で動作させる、ということになります。設定によっては、リポジトリの変更を自動的に検知して自動ビルドを行ったり、結果をメールだけでなくSlackで共有できたりもします。
設定についてはたくさん情報があるのでそれほど難しくはありませんが、もともとiOSまわりは証明書がややこしいので注意して進める必要があります。
naichさんのブログではApp Store用のMobile Provisionを作成されていますが、今回はすぐ実行したいのでAdHocで行っています。
GitHubやBitbucketはOAuthで権限を取得できるので、privateの状態で問題ありません。
ただ、実際にビルドを試したところ躓いたので共有のため記載しておきます。
まず、現在の最新版のUnity 2019.1.3f1を使ってプロジェクトを作成しました。Build Settingsウインドウを開き、Scenes in Buildにビルドしたいシーンを追加しておきます。動作確認のため、Text Mesh Proで作ったテキストをシーンに配置してコミットし、早速Cloud Buildを行いました。
簡単なシーンでも30分弱かかるので、放置しておいて忘れた頃にビルドが出来上がる、という使い方になります。なので、すぐ実機で動作確認したい、という使い方は難しいですね。Windowsマシンをメインにするなら、Andoridですぐ動作確認しつつ、iOSは勝手に出来上がったビルドを時々検証する、というワークフローになる気がします。
AR関連アプリをARKit/ARCoreで作ってしまうと機種依存になってしまうので、こういう時にARFoundationが便利なわけですね。(もしくは、WindowsのUnity Editor上でいろいろな確認ができるようにしておくなど)
そして出来上がったビルドなのですが、起動した瞬間にクラッシュして動作しませんでした。内容は下記ですが、ちょっと意味がわかりません。
Text Mesh Proを削除してビルドすると動作するので、そのあたりに原因がありそうです。
Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000 VM Region Info: 0 is not in any region. Bytes before following region: 4335321088 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL UNUSED SPACE AT START ---> __TEXT 000000010267c000-00000001038e4000 [ 18.4M] r-x/r-x SM=COW ...udbuildsample
比較のため、同じプロジェクトからローカルでXcode経由でビルドしての実行や、証明書をCloud Buildと全く同じにするためにAdHocでipaを生成して手動インストールしたりもしましたが、どれもちゃんと動作しました。Cloud Build経由でのビルドだけがクラッシュします。
原因が全くわからないので、仕方なくUnity 2018.4 LTSでプロジェクトを作り直し、Cloud Buildの設定も2018.4を使用するようにしたところ、Text Mesh Proを使った状態でもきちんと起動しました。
考えてみると、Unity 2019系はまだ破壊的アップデートを繰り返している上に、Cloud Buildで指定できるバージョンは大雑把に「Latest 2019.1」と、その下のバージョンNoまでは考慮されていません。なので、何かの不整合が起こっていたのではないかと思います。
ということで、Cloud Buildを使用するときには2018.4 LTSなどの枯れたバージョンを採用するのが良さそうです。
また、キーチェーンで証明書をリクエストしたり、クラッシュログを取得したりするときにはやっぱりMacが必要でした(Windowsでできる方法もあるらしいのですが)。なので、Macはハイスペックではなくても持っておいたほうが無難そうですね。
コメント
Under Development, select the type of provisioning profile to create and click Continue. Note : If youre just getting started, you should use a Distribution Ad Hoc certificate, as this allows you to build your game and test it on devices.