コラム

UnityでAdMob入れてXcodeでビルドしたらエラーがいっぱい出たけど何とかなったよ!

Unityで作っていたゲームがほぼ完成し、最後にAdMobの広告を入れて後はリリースするだけ…という時にやってくるのがXcodeのビルドエラー。

Android版は無事に準備ができていただけに「こんなところで負けるのか…」感満載の中、何とか乗り越えることができたのでここに記録を残しておこうと思います。

広告の設置方法とかは別のサイトを見てください。

【環境】
・Unity 2018.2.0f2
・Xcode 9.4.1

Google Mobile Ads SDKを入れないといけないらしい

どこかに書いてありましたっけ?

とにかく「GoogleMobileAds.framework」を入れないといけないらしいので入れます。

ここ(Google Mobile Ads SDK)からダウンロードしてきて、プロジェクトのPlugins>iOSに入れればOKです。

ここについてはないちさんのブログの解決策2に詳しく書いてあります。

Unityでやることはこれだけなので、ビルドしてできたものをXcodeで開きましょう。

余談ですが、私は普段Windowsを使っていてUnityもそっちで操作しています。しかし最後の一手だけはMacでXcodeを立ち上げなければなりません。なんと面倒な。

そしてMacの操作は慣れてないのでこの先スクショがありませんがご了承ください。

ARC Weak References

とりあえずXcodeでビルドしてみます。

GeneralのSigningでTeamを設定して、Build SettingsのEnable BitcodeをNoにしてGO!

すると、ARC Weak References とかいうエラーが1つ出てきました。

Cannot create __weak reference in file using manual reference couting GADUNativeCustomTemplateAd.m

__weak とやらがよろしくないようです。

エラーのところからコードの該当箇所が開けるので、__weak を消してみました。

なんと、ここはこれで突破できました(最適な方法かどうかは知りません)。

Apple Mach-O Linker (Id) Error

今回のボスはこっちでした。

エラー文…というか、どこ見ればいいんだか分かりませんがそれっぽいところをコピペしてみます。

Undefined symbols for architecture
arm64:”_OBJC_CLASS_$_ASIdentifierManager”, referenced from:
objc-class-ref in GoogleMobileAds(flat-arm64)
objc-class-ref in GoogleMobileAds(GADGestureIdUtil.o)
“_OBJC_CLASS_$_GLKView”, referenced from:
objc-class-ref in GoogleMobileAds(flat-arm64)
“_OBJC_CLASS_$_MFMessageComposeViewController”, referenced from:
objc-class-ref in GoogleMobileAds(flat-arm64)
“_OBJC_CLASS_$_MFMailComposeViewController”, referenced from:
objc-class-ref in GoogleMobileAds(flat-arm64)
“_kUTTagClassMIMEType”, referenced from:
l16572 in GoogleMobileAds(flat-arm64)
l16709 in GoogleMobileAds(flat-arm64)
“_OBJC_CLASS_$_CTTelephonyNetworkInfo”, referenced from:
objc-class-ref in GoogleMobileAds(flat-arm64)
“_UTTypeCreatePreferredIdentifierForTag”, referenced from:
l16572 in GoogleMobileAds(flat-arm64)
l16709 in GoogleMobileAds(flat-arm64)
“_GLKMatrix4Identity”, referenced from:
l15214 in GoogleMobileAds(flat-arm64)
l15226 in GoogleMobileAds(flat-arm64)
“_CTRadioAccessTechnologyDidChangeNotification”, referenced from:
l14594 in GoogleMobileAds(flat-arm64)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

なるほどわからん。

きっと何かが足りないのでしょうということで、「[Unity] AdMob広告をiPhoneアプリに貼る 」に書かれていたframeworkを追加してみました。

以下のどれが有効だったのは確認していませんが、ともあれ全部入れたらエラーは減りました。

  • AdSupport.framework
  • AudioToolbox.framework
  • AVFoundation.framework
  • CoreGraphics.framework
  • CoreTelephony.framework
  • EventKit.framework
  • EventKitUI.framework
  • MessageUI.framework
  • StoreKit.framework
  • SystemConfiguration.framework

しかしまだエラーは残っています。

仕方がないので再びインターネットを彷徨い、stack overflowのこの記事にたどり着きました。

質問の翌日に素晴らしい回答を貰えているにも関わらず、お礼どころか返信すらしていないとは不届きな…。

ここの回答にある、

Step – 1: You should add MobileCoreServices.framework and GLKit.framework Now Try to Build, if failed follow next step

でエラーがすっきりしました。

  • MobileCoreServices.framework
  • GLKit.framework

を入れてあげましょう。

これで私はエラーの沼から脱出できました。

先人たち、そしてサングラスのナイスガイに感謝!

めでたしめでたし。

COMMENT

メールアドレスが公開されることはありません。