iOSアプリ開発の逆引き辞典

iPhone/iPadで使えるアプリ開発のTipsをまとめてみました

Google AdMob SDKの広告を実装して実行するとクラッシュしてしまう問題に対応する

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

<Google> 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での修正方法について紹介します。プロジェクトを選択します。

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

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

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

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

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

参照