7/24/2017

[Unity5.6] AdMob? Cocoapods? Firebase? BuildError!

※完全ではないかもしれないけれどiPhoneで頑張って表示させる方法を書きました。




[Unity5.6] AdMobのテストバナー広告をリリース前にiPhoneで表示させる方法

※完全ではないかもしれないけれどAndroidでを頑張って表示させる方法を書きました。
[Unity2017.1.0f3] Android端末にAdMobのテストバナー広告をリリース前に表示させる方法


  ※曖昧な知識で書いているので何かと間違っているかも。あくまで自分の失敗記録です。

またもや壁にぶつかりまくりやで。今作りかけていたアプリがなんとかセーブデータ作成までできた?ので
AdMobも使ってみよう!とトライしてみましたが、見事にハマったよ!

AdMob For Unityを使う

Unity上で作業するために AdMob for Unity からパッケージをダウンロード。
UnityのプロジェクトにImportPackageでインポート。

GoogleMobileAds
PlayServicesResolver
Plugins
というフォルダがプロジェクト内に展開される。

シーンには空のゲームオブジェクトにAdCtrlという名前をつけてAdCtrl.csという名前をつけたシングルトンをアタッチ。どのシーンにも広告が出てくるようなイメージ。

iPhone、Android両方にバナーを表示させようかなと思っているので、インスペクタ上でIDを入れる場所を作っておいた。

記述は色々参考にしているよ。

Udemyの2D講座でのAdMobの設定方法をベースに、iPhoneも設定するためにこちらのサイトを参考にしているよ。

クリアメモリ/【Unity】AdMobをUnityアプリに実装する方法

2D講座のやり方に倣って、TestModeの場合はテスト広告を表示するように設定してみている。IDを入れてないので何も表示されないけど、ログではちゃんと動いていることになっている。(後にテストIDを入れておいた)



TouchScriptも入れてるのでログがごちゃ混ぜになっているけれど、
Test Modeのチェックを外してプレイしてみるとエラーが表示されている。



Unityでは思った通りに動いているようだ。
こんな感じで地道にやってみていてなんとなくうまくいきそうな気がして、よし、一旦書き出して試してみよう!とBuildをクリック。
iOS用に書き出せた。

怒涛のエラーラッシュに打ちひしがれる

次はXcodeを起動。プロジェクトを開いてiPhoneを繋いでビルド。

しかし、Xcodeでエラー出まくってiPhone用に書き出しできない。

修正するのはこの2つ
  1. @import Foundation; という書き方を変える必要がある。
  2. Apple Mach-O Linker Errorを解消しなければならない。
1は
@import Foundation; 

#import<Foundation/Foundation.h>
と書き換えるといいと書いてあったのでやってみたらうまくいった。
他の箇所も同じような書き方にしてうまくいった。

こちらを参考にしました:
Project Unknown's Blog/我がトラウマ、広告実装(AdMod)を行う

2については、Apple Mach-O Linker Errorの意味を知ることから。
正直調べても理解できなかったのだけど、Podfileを作成しなければならないとか、Firebaseのインストールができていないとか足りないものが多いのだけわかった。AdMobで広告を表示させるために必要なもの。。。まだぼんやりしてるなあ。。。

Qiita/【Xcode】【iOS】ライブラリ導入時のApple Mach-O Linker Error. library not found for -lcurl【謎のエラー?】

一番の問題点

・CocoaPodsを知らなかった
・Firebaseも知らなかった
・ターミナルの使い方を知らなかった

ダメじゃん。。。
調べまくっても書いてあることがさっぱりわからない!
少しだけわかるようになってきて参考にしたのはこちら。

Qiita/【Swift】CocoaPods導入手順
iPhone アプリ開発/[iPhone] アプリにAdMob広告を貼る(Firebase)

とはいえ、ターミナルで何をするのか理解するまでにえらい時間がかかって

これをターミナルで恐る恐る入力してみた。
パスワード要求されたから入力してみたらなんかインストールはうまくいったらしい。

Password:
Successfully installed cocoapods-1.2.1 Parsing documentation for cocoapods-1.2.1 1 gem installed


ターミナルはこういう感じの画面になるよ。


しかし、ここから長かった。

Unityでなんやかんやした後に途中でさらなるエラーが出てBuildすらできなくなってしまった。
途中でプロジェクト名を変えたからなの???
広告なんて入れるのやめちゃえ!って諦めかけていた。

こんなエラー↓
 IOException: Win32 IO returned ERROR_ALREADY_EXISTS. Path:
詳細:
System.IO.File.Move (System.String sourceFileName, System.String destFileName) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/File.cs:337)
Google.IOSResolver.GenPodfile (BuildTarget buildTarget, System.String pathToBuiltProject)
Google.IOSResolver.OnPostProcessGenPodfile (BuildTarget buildTarget, System.String pathToBuiltProject)
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:232)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115)
UnityEditor.Build.BuildPipelineInterfaces+AttributeCallbackWrapper.OnPostprocessBuild (BuildTarget target, System.String path) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:65)
UnityEditor.Build.BuildPipelineInterfaces.OnBuildPostProcess (BuildTarget platform, System.String path, Boolean strict) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:274)
UnityEditor.HostView:OnGUI()



cocoapodsはインストールされてるっぽいのでそのままにして、もう一度Firebaseの設定方法を読み直した。
そして、一旦AdMob関連のファイルを全部削除してやり直すことにした。
AdCtrlというゲームオブジェクトも一旦削除。
スクリプトはバックアップ取って削除。

次にやったのはターミナルを開いてpodfileの作成。

で、Xcodeを起動してpodfileに
firebase/core

とファイル内に追加で書いて保存。
残っていたプロジェクトの設定にあったXcodeのバージョンを最新にしてみたりして条件を整えた。




ターミナルを開いて
 pod install と入力してみた。

なんかわからないけれどできたっぽかった。
でもまださっぱりわからない。

Unityの方は、名前変更しておかしくなったパスを修正し、広告関連なしでBuildしてみたらうまくいった!
とりあえずエラーの原因が一つ解消したので、もう一度AdMob用のAssetをImportPackageで入れ直し、ゲームオブジェクトも作り直してXcode用にBuildしたらようやくこっちも成功した。
ふう〜。

フォルダをみたら
Unity-iPhone.xcworkspaceというファイルができている!!!
あんなに探しても見つからなかったのに!
これを開くんですね‹‹\(´ω` )/›› ‹‹\(  ´)/›› ‹‹\( ´ω`)/››

 Xcodeを起動。
なんか今までと違う!!!

いくつかエラーを解消してビルドしたらなんかやっと成功した。
辛かった。

翌日またエラーが出てあわてる

しかし!!!
今日ちょっとテスト広告を表示させるスクリプトを追加してみようかなーなんてUnityで修正して再ビルドしたらまたエラーが出た!
ちょっとちょっと! 

 IOException: Win32 IO returned ERROR_ALREADY_EXISTS. Path:

またかよ。。。
なんか修正したスクリプトを元に戻してみたけどダメ。
iOS用に書き出したフォルダに入れたGoogleService-Info.plistも削除したけど何も変わらず。当たり前といえば当たり前か。。。

やっぱりこれかなあと思いつつ、
UnityのAdMob関連のフォルダをまた削除して、
GoogleMobileAds.unitypackageをサイトからもう一度ダウンロードして
インポートしてビルドしてみた。するとエラーが消えた。。。

あれかな、Xcodeでビルドする時にエラー修正した@import〜 を#import〜に書き直したりしているのが影響してるのかな。。。いや違うだろうな。。。ほんとよくわからない。。。
しかし、エラーの内容をゆっくり落ち着いて読んで、これまでエラーが出なかったのに急に出るようになった要因を探っていけばまあ、ぼんやりでもあたりがつけられるので、思い切って怪しいファイルを含めないようにして再ビルドするのは解決法の一つなのかもしれない。
※バックアップを必ず取っておくこと!

Framework系で何かあるというのはわかった。
今回つまづいているのがAdMob周りを追加してからなのもわかった。

これはリリース前にAdMobをテストしようとしているからなんだろうか。
リリースしてから貼れば大丈夫なんだろうか。。。

テスト広告は結局表示されていない。。。

こういうのがちゃんと理解できて解決できるようになったら再度この辺りはまとめて書こうと思う。

エラーの数だけ成長していると信じてがんばる(* >ω<)

0 コメント:

コメントを投稿