こんにちは!
ねこじょーかー(@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
をインポートしていきます。
こんな画面が出てくるので、そのままインポートしましょう。
Google Mobile Ads Unity Plugin をすでに入れている場合は、一部更新マークになります。
すると、インポート中にできたゴミファイルを削除していいか聞かれるので、Apply で削除しておきましょう。
ここから少し時間が経つと、統計情報の取得をしてもいいか聞かれます。
どちらでもいいですが、私は No を選択しました。
あと2画面出てくるのですが、両方とも右下のボタンを押せばOKです。
「Add Selected Registries」を選択
「Apply」を選択
これでインポートは完了です。
Dependencies.xml の準備
続いて、SampleDependencies.xml をダウンロードしてきます。
これをプロジェクトのフォルダに置くのですが、2つルールがあるので注意してください。
-
MyPlugin/Editor
の直下に置く - Editor の上位階層のフォルダ名と、Dependencies の前につけた文字列を一致させる。(今回の例だと
MyPluginDependencies.xml
)
たとえば、上位階層のフォルダが「DownhillRush」だとすると、以下の構造になっていればOKです。
次に、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
を開きます。
Cocoapods Integration を、Xcode Project - Add Cocoapods to the Xcode project
に変更します。
xcworkspace のファイルを作らずに、Xcode のプロジェクトファイルの中に CocoaPods の設定を含めるようにする、という変更です。
これですべての準備が整いました。
ビルド
あとはビルドをすれば、エラーなくビルドができるはずです。
私はこの方法にたどり着くまでに、35回もビルドを失敗してしまいました...
今回は iOS で試しましたが、Android でも専用の手順の通りやることで、ビルドが通るようになると思います。
みなさんがこの記事を参考に、一発でビルドが通れば嬉しいです。
おまけ
PlayFab に関するブログも書いているので、よければ合わせてご覧ください。
https://playfab-master.com/