酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

iOSアプリでGoogle AdMobのバナー広告を実装して表示させようとするとクラッシュする問題に対応した

AdMob SDK v6.2.xの時にも発生していたような気もしますが、Xcode 5(iOS 7 SDK)とAdMob SDK v6.4.1の組み合わせでバナー広告を表示させようとしたところ、実行時に以下のようなエラーメッセージが出力されると共にアプリケーションがクラッシュしてしまいました。

To get test ads on this device, call: request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil];
-[GADObjectPrivate changeState:]: unrecognized selector sent to instance 0xb37fcc0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[GADObjectPrivate changeState:]: unrecognized selector sent to instance 0xb37fcc0'

これは呼び出そうとした[GADObjectPrivate changeState:]メソッドが存在しない為に例外が発生してしまっています。実装したプログラムに問題ない場合でも、シミュレータ/実機でアプリケーションを実行するとアプリケーションがクラッシュします。

修正の仕方

Xcode 5での修正方法について紹介します。プロジェクトを選択します。

f:id:ch3cooh393:20150704204817p:plain

Targetsの「AdMobSample」を選択します。

f:id:ch3cooh393:20150704204830p:plain

タブから[Build Settings]を選択します。さらに[All]を選択します。

f:id:ch3cooh393:20150704204912p:plain

[Linking]という項目がありますので、[Other Linker Flags]が存在していることを確認します。Other Linker Flagsの右側の空白部分をダブルクリックします。

f:id:ch3cooh393:20150704204844p:plain

追加すべきリンクオプションが表示されますので-ObjCを追加します。

f:id:ch3cooh393:20150704204926p:plain

以上で実行時にアプリケーションがクラッシュする不具合は修正できます。

参照