Xcode15で作成したアプリにAdMobを設定したい時のメモ
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202023-10-04%2017.03.41.png?alt=media&token=3c207bcd-0f73-4696-a2c8-81fd90a80602)
Xcode15でAdMobを導入した時のことを備忘録としてメモいたしました。
まずは、Google-Mobile-Ads-SDKをプロジェクトにインストールします。
もしまだCocoaPodsをインストールしていない場合は、Terminalを開いて以下のコマンドを実行してください
$ sudo gem install cocoapods
Xcodeプロジェクトのルートディレクトリに移動します。そして、以下のコマンドを実行してPodfile
を作成します:
$ pod init
作成されたPodfile
をテキストエディタで開き、
以下のようにGoogle-Mobile-Ads-SDK
を追加します
# Uncomment the next line to define a global platform for your project
# platform :ios, '14'
target 'XXXXXXXXXX' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for YourProjectName
pod 'Google-Mobile-Ads-SDK'
end
再びTerminalを開き、以下のコマンドを実行してライブラリをインストールします:
$ pod install
pod install
の後、
.xcworkspace
ファイルが生成されます。
これからは、この.xcworkspace
ファイルを使用してプロジェクトを開きます。
.xcodeproj
ファイルではなく、この新しいファイルを使用することを忘れないでください。
これで、Google-Mobile-Ads-SDK
がプロジェクトに追加されました
。公式のドキュメントやサンプルを参照して、広告の表示やその他の機能を実装してください。
お次に、Info.plist
ファイルを作成します。
Info.plist
ファイルは手動で作成するとXcodeが読み取ってくれないので、手動で作成せずXcode上で生成します。
下記の画像の部分のInfoタブのDocument Typesの
+ボタンをクリックで生成されます。
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Fsgy.jpg?alt=media&token=e23902e7-e98b-4c9c-a2f1-6a227999a8a7)
生成されたInfo.plist
に下記を設定します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-XXXXXXXXXXXXXXXXXXXX</string>
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4fzdc2evr5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4pfyvq9l8r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2fnua5tdw4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5a6flpkh64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ludvb6z3bs.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cp8zw746q7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3sh42y64q3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qy4746246.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v4nxqhlyqp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta9lk7p23.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>vutu7akeur.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>y5ghdn5j9k.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n6fk4nfna4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n38lu8286q.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>47vhws6wlr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>eh6m2bh4zr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a2p9lx4jpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4468km3ulz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2u9pt9hc89.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ecpz2srf59.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>pwa73g5rt2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mlmmfzh3r3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4dzt52r2t5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8c4e2ghe7u.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zq492l623r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3rd42ekr43.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qcr597p9d.skadnetwork</string>
</dict>
</array>
</dict>
</plist>
次にアプリのルートファイルに広告が適切に読み込まれるように追記していきます。
import SwiftUI
import GoogleMobileAds // 追加
// クラス追加
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
GADMobileAds.sharedInstance().start(completionHandler: nil)
return true
}
}
@main
struct xxxxApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
// 追加
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
そして広告表示用のstructを作成します
import SwiftUI
import GoogleMobileAds
struct AdView: UIViewControllerRepresentable {
let viewWidth: CGFloat
private let bannerView = GADBannerView()
private let adUnitID = "ca-app-pub-xxxxxxxxxxx/xxxxxxxxxxxxx"
func makeUIViewController(context: Context) -> some UIViewController {
let bannerViewController = UIViewController()
bannerView.adUnitID = adUnitID
bannerView.rootViewController = bannerViewController
bannerViewController.view.addSubview(bannerView)
return bannerViewController
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
// Request a banner ad with the updated viewWidth.
bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth)
bannerView.load(GADRequest())
}
}
そしてアプリの広告を表示したい場所で広告用のstructを呼び出します。
GeometryReader { geometry in
AdView(viewWidth: geometry.size.width)
}.frame(height: 70)
これで設定は完了です。いざbuildします!
なんとbuildエラーでした。Sandbox: rsync.samba(5675) deny(1) file-write-create
という謎のエラーがでてしまいました。https://developer.apple.com/forums/thread/731041
上記リンクによるとENABLE_USER_SCRIPT_SANDBOXINGを無効化する必要があるようです。
XcodeプロジェクトをVsCodeなどのエディタで開いて検索したところ、
xxApp/xxxApp.xcodeproj/project.pbxproj
にENABLE_USER_SCRIPT_SANDBOXING = YES;
と記述があったのでNOに書き換えました
// xxApp/xxxApp.xcodeproj/project.pbxprojより
ENABLE_USER_SCRIPT_SANDBOXING = NO; // 2箇所あるので両方とも変更しました
ではいざbuildです。
なんと無事にbuildが成功し広告が表示されました。毎回設定をわすれるのでメモできてよかったです。
ここまで、お読みくださりありがとうございました!