2018/01/23

Swift – AdMob広告実装に当たってハマった点

ついに自分のアプリがリリースされたので、広告実装に向けて諸々開発中なのですが、ハマってます。
ちょっと内容を整理する上で記事にまとめました。

解決したら更新します。

問題

cocoapodsを利用して、Firebaseをインストールしたが、import GoogleMobileAds の箇所で「No such module ‘GoogleMobileAds’」が出る。

問題詳細

xcodeのworkspaceを開いて、pod → GoogleMobileAdsフォルダを見てもframeworkが無いのでうまくインポートされてない(気がする)。
そのため、GoogleMobileAdsのframeworkを何らかの方法でプロジェクトにインストールする必要がありそう。

試行錯誤して、GoogleDevelopers(https://developers.google.com/admob/ios/download?hl=ja)のサイトから入手した
フレームワークを自分でXcodeに追加しても、GoogleMobileAdsをインポートできず、「No such module ‘GoogleMobileAds」と出続けてしまう。
(=フレームワークのインポートが失敗している)

対処例1

http://blog.livedoor.jp/healthlifeuuu-sakusei2/archives/1056512750.htmlより

入手したフレームワークをLinkBinaryWithLibrariesやLinked Frameworks and Librariesに追加してみたところ、左のエリアにはちゃんとframeworkが使えるような感じに出てきます。
しかし、その方法ではフレームワークはコピーされないようなので、調べた下記を試してみます。

・BuildPhases > CopyBundleResouecesにフレークワークを追加

さっきの場合、GoogleMobileAdsをXcodeに追加する際にはドラッグしたらそのまま追加される感じでしたが、CopyBundleResouecesに追加する際には「Copy items if needed」というチェックの欄があります。

そこにチェックを入れることで、フレームワークがコピーされます。
そして、そのコピーしたフレームワークは左側のエリアに出てきます。
これをLinkBinaryWithLibraries(Linked Frameworks and Libraries)にドラッグして追加することで、エラーは解決されるらしい。。

つまり、①BuildPhases > CopyBundleResouecesにGoogleMobileAdsを追加(コピー)する。
左エリアにフレームワークが表示されるので、②そのフレームワークファイルをLinkBinaryWithLibraries(Linked Frameworks and Libraries)にドラッグして追加する。

対処例2

また、別のサイトでは、

BuidSettings > Search Paths > Framework Search Paths に、 「 ${PODS_ROOT}/Google-Mobile-Ads-SDK/Frameworks 」 と追加したところ問題なくビルドできるようになった。

という話もありました。

http://umadash.hatenadiary.jp/entry/2016/05/18/150329より

対処法3

海外のAdmob導入動画を参考にし、 GoogleMoboleAdsをダウンロードしたSDKから直接Xcodeに放り込み、「必要ならコピー」にチェックを入れてOKしたら、エラーが出ずにインポートできるようになりました。(2chより)

対処例4

https://forums.developer.apple.com/thread/86219より

Project Settings > Targets and Build Phasesを選択して、Link Binary With Libraries にGoogleMobileAds.frameworkがあることを確認する。

失敗例1

こっちは失敗例です。

https://qiita.com/mippai_prpr/items/9fa102aa7ac18330ff09より

失敗例2

Link Binary With Librariesの所に「GoogleMobileAds.framework」が入っている事は確認済み。

Framework search passというのはBuildSettingの中から、数値を「$(SRCROOT)」とかにすると通る、みたいな事が書いてあったのですが、
やってみたところ「$(SRCROOT)」と打ち込んでも勝手に「Users/(ユーザー名)/Desktop/(アプリ名)」という数値に切り替わってしまいます。

詳細の設定方法

このサイトに詳しく載っています。
https://i-app-tec.com/ios/admob.htmlより

終わりに

後ほど試してみますが、かれこれ4-5時間ハマってるので、何とかこれで対処したいですね。。
これでもダメだったときはAdMobではなく、nendとか利用しようと思って、とりあえず申し込みだけ行いました。

何とかうまくいってくれー


お知らせ

ヒヨコ歩数計という歩きながらヒヨコが育っていくアプリを作って、いろんな方に結構使ってもらっています。
RealmSwift, Admobの動画・インステ・バナー広告、UICollectionView、iOS-Charts、UITableViewを使用しているので、是非ご利用ください!