AdMob SDK for iOS を組み込む際、いくつかの framework を追加する必要があります。
デベロッパーガイドに追加する framework が書いてありますが、足りません。
実際、何の framework を追加しなければならないのか?ちょっと試してみました。
※ Add-ons は入れてません。
※ SDK のバージョンは 6.8.0 を使用。
まず、適当な SingleView のプロジェクト作成し、AdMob SDK を追加して、ViewController.h, .m に 必要なコードだけを書いてビルドしてみます。
この時点で追加されている framework は
- CoreGraphics
- UIKit
- Foundation
何も追加してないので、当然エラーは出ます。数は 17個。
[code:text]
Undefined symbols for architecture i386:
“_AVAudioSessionPortBuiltInSpeaker”, referenced from:
-[GADDevice audioRouteUsingAVAudioSession] in libGoogleAdMobAds.a(GADDevice.o)
“_AVAudioSessionPortHeadphones”, referenced from:
-[GADDevice audioRouteUsingAVAudioSession] in libGoogleAdMobAds.a(GADDevice.o)
“_AudioServicesPlaySystemSound”, referenced from:
-[GADDefaultGMSGHandler didReceiveVibrateNotification:] in libGoogleAdMobAds.a(GADDefaultGMSGHandler.o)
“_AudioSessionGetProperty”, referenced from:
-[GADDevice audioRouteUsingAudioToolkit] in libGoogleAdMobAds.a(GADDevice.o)
“_AudioSessionInitialize”, referenced from:
-[GADDevice audioRouteUsingAudioToolkit] in libGoogleAdMobAds.a(GADDevice.o)
“_OBJC_CLASS_$_ASIdentifierManager”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
“_OBJC_CLASS_$_AVAudioSession”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
“_OBJC_CLASS_$_CTTelephonyNetworkInfo”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
“_OBJC_CLASS_$_MFMailComposeViewController”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADOpener.o)
“_OBJC_CLASS_$_MFMessageComposeViewController”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADOpener.o)
“_OBJC_CLASS_$_SKStoreProductViewController”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADOpener.o)
“_SCNetworkReachabilityCreateWithName”, referenced from:
-[GADNetworkChecker startNetworkChecking] in libGoogleAdMobAds.a(GADNetworkChecker.o)
“_SCNetworkReachabilityScheduleWithRunLoop”, referenced from:
-[GADNetworkChecker startNetworkChecking] in libGoogleAdMobAds.a(GADNetworkChecker.o)
“_SCNetworkReachabilitySetCallback”, referenced from:
-[GADNetworkChecker startNetworkChecking] in libGoogleAdMobAds.a(GADNetworkChecker.o)
“_SCNetworkReachabilityUnscheduleFromRunLoop”, referenced from:
-[GADNetworkChecker stopNetworkChecking] in libGoogleAdMobAds.a(GADNetworkChecker.o)
“_SKStoreProductParameterITunesItemIdentifier”, referenced from:
-[GADOpener openInAppStore:fallbackURLString:] in libGoogleAdMobAds.a(GADOpener.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[/code]
次に、デベロッパーガイドに書いてある以下の framework を追加。CoreGraphics は既にあるので、3つ追加。
- AudioToolbox
- MessageUI
- SystemConfiguration
- CoreGraphics
ここまででビルドすると、エラーは 8個でこんな感じ。
[code:text]
Undefined symbols for architecture i386:
“_AVAudioSessionPortBuiltInSpeaker”, referenced from:
-[GADDevice audioRouteUsingAVAudioSession] in libGoogleAdMobAds.a(GADDevice.o)
“_AVAudioSessionPortHeadphones”, referenced from:
-[GADDevice audioRouteUsingAVAudioSession] in libGoogleAdMobAds.a(GADDevice.o)
“_OBJC_CLASS_$_ASIdentifierManager”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
“_OBJC_CLASS_$_AVAudioSession”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
“_OBJC_CLASS_$_CTTelephonyNetworkInfo”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
“_OBJC_CLASS_$_SKStoreProductViewController”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADOpener.o)
“_SKStoreProductParameterITunesItemIdentifier”, referenced from:
-[GADOpener openInAppStore:fallbackURLString:] in libGoogleAdMobAds.a(GADOpener.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[/code]
ここから見ると足りなそうなのは、下の3つ。
- AVFoundation
- StoreKit
- CoreTelephony
ここまででビルドすると、エラーは2つ。
[code:text]
Undefined symbols for architecture i386:
“_OBJC_CLASS_$_ASIdentifierManager”, referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[/code]
で、あと足りないのは
- AdSupport
これを追加してビルドすると、エラーは0個。シミュレータで実行すると、広告が表示されました。
AdMob SDK for iOS v6.8.0 で必要な framework は、以下の8個となります。
- AudioToolbox
- MessageUI
- SystemConfiguration
- CoreGraphics
- AVFoundation
- StoreKit
- CoreTelephony
- AdSupport
追記:
AdMob SDK for iOS 7.1.0 から CoreMedia.framework も必要となっているみたいです。