【Unity × AdMob】iOSのビルドで丸2日潰れる

Unityで作ったゲームをAndroidではサクッと審査待ち状態まで進めて、意気揚々とiOS用にとビルドをやったらAdMob(Googleのモバイル用広告配信)関連のエラーだらけで、タイトル通り丸々2日間この作業で潰れました。。。

一歩前進かと思ったら、また新たなエラーの繰り返しで、ほとんど2日間の記憶がないです。そんなわけで、ほとんど記録を残していないので、あまり参考にならないかもですが最終的にうまくいったことを中心にメモしておきます。

ちなみに、最後には救世主(AI)によって助けられました。もっと早く訊いておけばよかったです。どうも役に立たないと思っていたAIでしたが、テクニカルなことを訊くと神回答の連発でした。

解決までの経緯

問題解決まで、どういった道を辿ったかを時系列で記しておきます。

【システム環境①】
・MacBook Air M1
・macOS 11
・Unity 2022.3.9f1
・Xcode 14.0

  1. UnityのAdMob用SDK「Google Mobile Ads Unity Plugin v8.5.2」を使ったゲームをUnity上でiOS用にビルド
    => これは成功(もしかしたらエラーが出ていたかも…この時はログをあまり見ていない)
  2. Macに実機(iPadとiPhone)を繋いで、Xcodeからビルド作業
    => 「Undefined symbol〜」というエラーが大量に出て、実機にビルドされず。
  3. Xcodeに問題ありそうなので、バージョンを最新の15.0に変えてみる。macOSのバージョンが対応していなかったので、こちらも最新の13.6(Ventura)に変える。
    => ダウンロードからインストールにと、かなり時間を食う
    【システム環境②】
    ・Xcode 15.0
    ・macOS 13.6
  4. Xcode上のビルドエラーが「Command PhaseScriptExecution failed with a nonzero exit code」というものになる。ここで色々試すも中々解決しない。Xcodeのバージョンは14.2だと、うまくいくケースが散見されたので、またもXcodeのバージョンを変える。
    【システム環境③】
    ・Xcode 14.2
  5. この辺の記憶が曖昧。ここでUnity上のビルドでもAdMob SDKが利用するCocoaPodsに関するエラーが出て、Xcodeでの作業にすら進めなくなる。
  6. AdMob SDK「Google Mobile Ads Unity Plugin」のバージョンを色々変えるもうまくいかない(最終的にはv8.5.2のまま)。
    「iOS framework addition failed due to a CocoaPods installation failure」(ビルド先のフォルダにCocoaPodsをインストールできない模様)というエラーから抜け出せず、Unity Adsに広告配信は切り替えようかと頭をよぎる。しかし、ここまでやってきて悩む。。
  7. ここでAIにすがることを思いつき、Bingチャットを開く。エラーメッセージをぶっきら棒に投げると、原因と解決策をきちんと回答してくれる。手数も多く、詰み気味だったので本当に助かる。
    AIへの質問
    unityでiOS用のビルドを行うと以下のエラーになります。解決策を教えてください。

    iOS framework addition failed due to a CocoaPods installation failure. This will will likely result in an non-functional Xcode project.After the failure, “pod repo update” was executed and failed. “pod install” was then attempted again, and still failed. This may be due to a broken CocoaPods installation.

    AIの回答
    このエラーは、Unityがpod installコマンドを正しく実行できないために発生するUnityのバグのようです³。しかし、解決策はあります。手動でpodをインストールすることができます。以下の手順を試してみてください。

    – ビルドしたプロジェクトのフォルダを右クリックして、「フォルダ内で新規ターミナル」を選択します。
    – ターミナルが開いたら、「pod update」と入力してエンターを押します。
    – pod updateが完了したら、Xcodeでビルドを行ってください。

    これで、エラーが解消されるはずです。参考になれば幸いです。😊

    ソース: Bing との会話 2023/9/24
    (1) CocoaPods installation failure when building for iOS – Unity Forum. https://forum.unity.com/threads/cocoapods-installation-failure-when-building-for-ios.1167700/.
    (2) CocoaPods on M1 (Apple Silicon) fails with ffi wrong architecture. https://stackoverflow.com/questions/66644365/cocoapods-on-m1-apple-silicon-fails-with-ffi-wrong-architecture.
    (3) Unity iOS Xcode ビルドエラーまとめ – Qiita. https://qiita.com/Bulldog_Market/items/962e804bc645efea4b62.
    (4) 【Unity + AdMob + CocoaPods + iOS】エラーなくビルドを通す …. https://qiita.com/nekojoker/items/231273c8422a88485b27.
    (5) undefined. https://guides.cocoapods.org/using/troubleshooting.html.

  8. AIの回答にあった「pod update」をやってみるもエラーになるが、手動でビルド先にCocoaPodsをインストールするやり方に光明を見出す。ちょっと試してみようかと思っていたrbenvを使ってRubyをMacにインストールして、その環境にCocoaPodsを入れる。これを使って再び「pod update」するとエラーなく完了! この辺りは、以下でもう少し詳しく説明します。
    ちなみに、これ以降Unityでのビルドはエラーなく成功するようになりました(他のプロジェクトでは未確認)。
  9. Xcodeで実機にビルドしようとすると以下のようなエラーが出る。これは画像にあるようにXcodeにある「Enable Bitcode」を「No」にすれば解決。ビルドし直すと無事実機にビルドでき、作ったゲームも動いた😭
    (エラー抜粋)
    FBLPromises(FBLPromise.o)’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)bitcode_no

うまくいったやり方

上記8番目に書いた「pod update」が成功するまでの手順を残しておきます。

  1. Homebrewでrbenvをインストール。Homebrewが入っていない場合は、こちらにあるインストールコマンドをターミナルで実行。
    # Homebrewでrbenvをインストール
    % brew install rbenv

    # .zshrcに環境変数を追加
    % vi ~/.zshrc# .zshrcには下記を追記
    eval “$(rbenv init – zsh)”
    export PATH=”$HOME/.rbenv/bin:$PATH”

    # .zshrcを読み込む
    % source ~/.zshrc

  2. Rubyをインストール

    # rbenvでインストール可能(安定版)なRubyのバージョンを確認
    % rbenv install -l
    3.0.6
    3.1.4
    3.2.2
    jruby-9.4.3.0
    mruby-3.2.0
    picoruby-3.0.0
    truffleruby-23.1.0
    truffleruby+graalvm-23.1.0

    Only latest stable releases for each Ruby implementation are shown.
    Use ‘rbenv install –list-all / -L’ to show all local versions.

    # バージョンを指定してRubyをインストール
    % rbenv install 3.2.2

    # 使用するRubyのバージョンを指定(グローバルに設定)
    % rbenv global 3.2.2

  3. CocoaPodsのインストール
    # gemコマンドがrbenbでインストールしたRubyを指しているかを確認
    # 以下のようなパスになっているかを確認
    % which gem
    /Users/<ユーザー名>/.rbenv/shims/gem

    # CocoaPodsのインストール
    % gem install cocoapods

  4. Unityから出力するiOSのビルド先フォルダに移動して「pod update」を実行
    # iOSのビルド先に移動
    % cd <Unityのプロジェクトフォルダ>/<iOSのビルドフォルダ>

    # CocoaPodsのインストール
    % pod update

最後に

AIに訊いたことがきっかけで解決への糸口をつかむことができました。記事では1回分の応答しか掲載していませんが、他にも何回か質問していて、どれも的を射た回答でした。

エラーメッセージをそのまま全文送るだけでも、その原因を教えてくれるので助かります。テクニカルなことは本当に頼りになるので、最初からドシドシ使うのがよさそうです。

sponsor