2024-10-20



公式ではsudo gem install cocoapodsとあるが、当方環境では配下のツールのバージョンエラーがどうたらでうまくインストールできなかった。
なので、HomeBrewを使う方法でインストールした。
brew install cocoapods
最後に/usr/local/binにシンボリックリンクを貼るところでエラーが発生したので、手動でリンクを貼る。
cd /usr/local/bin ln -s /usr/local/Cellar/cocoapods/1.13.0/bin/pod
これでpodコマンドが使えるようになった。
pod --version 1.13.0
Podfileを作成するにはProjectName.xcodeprojがあるフォルダでpod initを実行する。xcodeprojフォルダの中では無いので注意。
cd MyProject ls -alF MyProject MyProject.xcodeproj # ここで実行 pod init
Google Moble SDKをPodfileに追加する
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
platform :ios, '14.0'
target 'MyProject' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for MyProject
pod 'Google-Mobile-Ads-SDK'
end
post_install do | installer |
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
end
end
end
ここで、このプロジェクトはiOS Deployment Target を14.0にしているので、上記のiOSの箇所もコメントアウトを外して14.0に設定している。またそれをした場合、インストール後のライブラリのターゲット設定も14にしないと警告が出まくるので、post_installで自動設定するようにした。
プロジェクトにインストールする
pod install --repo-update Updating local specs repositories Analyzing dependencies Downloading dependencies Generating Pods project Integrating client project Pod installation complete! There is 1 dependency from the Podfile and 6 total pods installed.
Xcodeでプロジェクトを開く。ProjectName.xcworkspaceファイルをダブルクリックしないとAdMobを認識しないので注意!!
Info.plistを手動編集する
左ペインの「Info」を右クリック→Open As→Source Codeで開く。
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
</array>
<key>GADIsAdManagerApp</key>
<true></true>
</dict>
</plist>
テスト広告を表示するだけなら↑ページサンプルそのままで良いらしい。本番はca-app-pub-が自分のものに差し替え。
ビルド前にワーニングをつぶす。ほとんどが、iOS Deployment Targetが合っていないぞ、というもの。エラーをクリックして該当箇所に飛んで、プロジェクト本体のDeployment Targetとバージョンを合わせる。5箇所くらいなはず。
Swift UIでAdMobバナー広告および全画面広告を表示するサンプルを書く。
メイン関数ファイルに、以下AdMobの初期化コードを書く。
| Swift | AdMobApp.swift | GitHub Source |
//
// AdMobApp.swift
// AdMob
// Created by ServerNote.NET on 2023/09/18.
//
import SwiftUI
import GoogleMobileAds
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
GADMobileAds.sharedInstance().start(completionHandler: nil)
return true
}
}
@main
struct AdMobApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
AdMobView()
}
}
}
そして以下がメインビュー。AdMobBannerViewを常時表示、そしてその下のTextをタップするとAdMobScreenViewを起動し全画面広告を表示する。showAdObjectの都度loadAdObjectしているのがポイント。こうしないと2回目以降エラーになる。
| Swift | AdMobView.swift | GitHub Source |
//
// AdMobView.swift
// AdMob
// Created by ServerNote.NET on 2023/10/19.
//
import SwiftUI
import GoogleMobileAds
struct AdMobBannerView : UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> some UIViewController {
let view = GADBannerView(adSize: GADAdSizeBanner)
let viewController = UIViewController()
view.adUnitID = "ca-app-pub-3940256099942544/2934735716"
view.rootViewController = viewController
view.load(GADRequest())
viewController.view.addSubview(view)
viewController.view.frame = CGRect(origin: .zero, size: GADAdSizeBanner.size)
return viewController
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
}
}
class AdMobScreenView: NSObject, ObservableObject, GADFullScreenContentDelegate {
static var shared = AdMobScreenView()
var adObject:GADInterstitialAd?
override init() {
adObject = nil
super.init()
}
func loadAdObject() {
GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest()) { (ad, error) in
if let _ = error {
print("AdMobScreenView.loadAdObject error=\(error!)")
return
}
print("AdMobScreenView.loadAdObject success")
self.adObject = ad
self.adObject?.fullScreenContentDelegate = self
}
}
func showAdObject() {
self.loadAdObject()
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
let root = windowScene?.windows.first!.rootViewController
self.adObject?.present(fromRootViewController: root!)
}
func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
print("AdMobScreenView.didFailToPresentFullScreenContentWithError")
}
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("AdMobScreenView.adWillPresentFullScreenContent")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("AdMobScreenView.adDidDismissFullScreenContent")
}
}
struct AdMobView: View {
@ObservedObject var adScreen = AdMobScreenView.shared
var body: some View {
VStack() {
AdMobBannerView().frame(width: 320, height: 50)
Text("Tap to open full screen AD")
.font(.largeTitle)
.onAppear() {
adScreen.loadAdObject()
}
.onTapGesture {
adScreen.showAdObject()
}
}
}
}
struct AdMobView_Previews: PreviewProvider {
static var previews: some View {
AdMobView()
}
}
SDKに変更があったら随時更新します。お疲れ様でした。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
CUDA13環境下でGPU使用版のllama-cpp-pythonを導入する
CUDA13環境下でGPU使用版のPyTorchを導入する
LetsEncrypt/certbotの証明書自動更新がエラーになる場合
Wav2Lipのオープンソース版を改造して外部から呼べるAPI化する
Wav2Lipのオープンソース版で静止画の口元のみを動かして喋らせる
【iOS】アプリアイコン・ロゴ画像の作成・設定方法
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【2】
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【1】
【Xcode】iPhone is not available because it is unpairedの対処法
進研ゼミチャレンジタッチをAndroid端末化する
CUDA13環境下でGPU使用版のPyTorchを導入する
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Apache】サーバーに同時接続可能なクライアント数を調整する
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Googleスプレッドシートを編集したら自動で更新日時を入れる
LinuxからWindowsの共有フォルダをマウントする
size_tとssize_tを使い分けてSegmentation Faultを予防する
Wav2Lipのオープンソース版で静止画の口元のみを動かして喋らせる