AdMob SDK for iOS に必要な framework

AdMob SDK for iOS を組み込む際、いくつかの framework を追加する必要があります。
デベロッパーガイドに追加する framework が書いてありますが、足りません。

Google AdMob Ads iOS(初級)

実際、何の framework を追加しなければならないのか?ちょっと試してみました。
※ Add-ons は入れてません。
※ SDK のバージョンは 6.8.0 を使用。

まず、適当な SingleView のプロジェクト作成し、AdMob SDK を追加して、ViewController.h, .m に 必要なコードだけを書いてビルドしてみます。
この時点で追加されている framework は

  • CoreGraphics
  • UIKit
  • Foundation

何も追加してないので、当然エラーは出ます。数は 17個。

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)

次に、デベロッパーガイドに書いてある以下の framework を追加。CoreGraphics は既にあるので、3つ追加。

  • AudioToolbox
  • MessageUI
  • SystemConfiguration
  • CoreGraphics

ここまででビルドすると、エラーは 8個でこんな感じ。

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)

ここから見ると足りなそうなのは、下の3つ。

  • AVFoundation
  • StoreKit
  • CoreTelephony

ここまででビルドすると、エラーは2つ。

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)

で、あと足りないのは

  • 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 も必要となっているみたいです。

Appshocker
bitFlyer ビットコインを始めるなら安心・安全な取引所で
ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin