LoginSignup
32
17

More than 3 years have passed since last update.

【Unity + AdMob + CocoaPods + iOS】エラーなくビルドを通すための最適解【Androidにも応用できる】

Posted at

こんにちは!
ねこじょーかー(@nekojoker1234)と申します。

みなさんは、UnityEditor 上だけでなく、実機で動作確認したことはありますか?

実機で動作確認をするには「ビルド」が必要になるのですが、これがまた本当にやっかいです。
何がやっかいなのかと言うと、とにかくエラーが出ることが多く、そしてそのエラー解決も一筋縄ではいきません。

私が遭遇したやっかいなエラーたちは以下の通り。

  • GoogleMobileAds/GoogleMobileAds.h' file not found
  • Undefined symbols for architecture arm64
  • Undefined symbols for architecture armv7
  • linker command failed with exit code 1

エラー内容で調べるといろいろと情報は出てくるのですが、Unity のバージョンが新しいせいか、どれも解決にはいたりませんでした。

もうダメかな...と諦めかけていたとき、ついに解決方法を見つけ、無事にエラーなくビルドすることができるようになりました。

私は解決に数日間かかりハゲそうになったので、他の人がハゲてしまわないよう、この記事に残しておきます。

ということで、さっそく見ていきましょう。

エラーなくビルドを通すための最適解

External Dependency Manager for Unity のインポート

まずは、External Dependency Manager for Unityをダウンロードしてください。

これが今回の肝となるプラグインで、簡単な記述をするだけで、iOS や Android でやっかいな依存関係のエラーを解決してくれるという優れものです。

Google が出しているプラグインなので、安心ですね。

この中にある、external-dependency-manager-latest.unitypackageをインポートしていきます。

スクリーンショット 2020-04-26 16.23.35.png

こんな画面が出てくるので、そのままインポートしましょう。

スクリーンショット 2020-04-26 16.29.38.png

Google Mobile Ads Unity Plugin をすでに入れている場合は、一部更新マークになります。

すると、インポート中にできたゴミファイルを削除していいか聞かれるので、Apply で削除しておきましょう。

スクリーンショット 2020-04-26 16.32.48.png

ここから少し時間が経つと、統計情報の取得をしてもいいか聞かれます。

スクリーンショット 2020-04-26 16.35.16.png

どちらでもいいですが、私は No を選択しました。

あと2画面出てくるのですが、両方とも右下のボタンを押せばOKです。

「Add Selected Registries」を選択

スクリーンショット 2020-04-26 16.38.06.png

「Apply」を選択

スクリーンショット 2020-04-26 16.39.42.png

これでインポートは完了です。

Dependencies.xml の準備

続いて、SampleDependencies.xml をダウンロードしてきます。

これをプロジェクトのフォルダに置くのですが、2つルールがあるので注意してください。

  • MyPlugin/Editorの直下に置く
  • Editor の上位階層のフォルダ名と、Dependencies の前につけた文字列を一致させる。(今回の例だとMyPluginDependencies.xml

たとえば、上位階層のフォルダが「DownhillRush」だとすると、以下の構造になっていればOKです。

スクリーンショット 2020-04-26 17.10.52.png

次に、XML ファイルの中身を修正していきます。

ファイルの一番下を見ると、以下の記載があります。

<iosPod name="Google-Mobile-Ads-SDK" path="../google-mobile-ads-sdk" version="~> 7.0" bitcodeEnabled="true"
        minTargetSdk="6.0">
  <!-- Set of source URIs to search for this Cocoapod spec.
       By default Cocoapods will attempt to fetch the pod specs from:
       * $HOME/.cocoapods/repos
       * https://github.com/CocoaPods/Specs
       -->
  <sources>
    <source>https://github.com/CocoaPods/Specs</source>
  </sources>
</iosPod>

今回は、Google-Mobile-Ads-SDKだけあればいいので、ここを少し修正します。

<iosPod name="Google-Mobile-Ads-SDK" version="~> 7.0" bitcodeEnabled="false" minTargetSdk="6.0">

bitcodeEnabledは色んなサイトで「false にしとけ」と書かれていたので、とりあえず false にしておきます。
pathはローカルの CocoaPod のパスらしいのですが、よくわからないので消しました。

また、ビルド時に「cocoapods.mycompany.com/Specs が見つからない」とエラーになるので、以下のsourcesタグはコメントアウトしておきましょう。

修正前

<!-- Global set of sources to search for Cocoapods.
     These sources will be searched for all Cocoapods specified by
     iosPod. -->
<sources>
  <source>https://cocoapods.mycompany.com/Specs</source>
</sources>

修正後

<!-- Global set of sources to search for Cocoapods.
     These sources will be searched for all Cocoapods specified by
     iosPod. -->
<!--<sources>
  <source>https://cocoapods.mycompany.com/Specs</source>
</sources>-->

これで XML の準備は完了です。

iOS Resolver の設定変更

Assets > External Dependency Manager > iOS Resolver > Settings を開きます。

スクリーンショット 2020-04-26 16.59.27.png

Cocoapods Integration を、Xcode Project - Add Cocoapods to the Xcode projectに変更します。

スクリーンショット 2020-04-26 17.02.29.png

xcworkspace のファイルを作らずに、Xcode のプロジェクトファイルの中に CocoaPods の設定を含めるようにする、という変更です。

これですべての準備が整いました。

ビルド

あとはビルドをすれば、エラーなくビルドができるはずです。

私はこの方法にたどり着くまでに、35回もビルドを失敗してしまいました...

スクリーンショット 2020-04-26 13.18.17.png

今回は iOS で試しましたが、Android でも専用の手順の通りやることで、ビルドが通るようになると思います。

みなさんがこの記事を参考に、一発でビルドが通れば嬉しいです。

おまけ

PlayFab に関するブログも書いているので、よければ合わせてご覧ください。
https://playfab-master.com/

32
17
11

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
17