◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-07-06上級

同意ダイアログより先に広告SDKを初期化していた — Claude Code で ATT と AdMob の順序を直す

起動と同時に広告SDKを開始すると、ATT の同意が取れる前に IDFA が空のまま初期化され、フィルレートは正常なのに計測だけが薄くなります。散らばった初期化順序を Claude Code で洗い出し、ATT の解決を待ってから広告を開始する形へ直した実装を共有します。

Claude Code265iOS26AdMob13ATT個人開発130

✦ プレミアム記事

新しいアプリを段階公開している最中に、AdMob の管理画面で妙なことに気づきました。フィルレートも eCPM もほぼ普段どおりなのに、SKAdNetwork 経由で計測できたインプレッションの割合だけが、以前より明らかに薄いのです。広告は出ているのに、広告の「計測」だけが欠けている、という状態でした。

心当たりを一つずつ潰していって、最後に残ったのが初期化の順序でした。私が個人開発で続けている壁紙アプリでは、起動と同時に広告SDKを開始していました。その時点ではまだ App Tracking Transparency(ATT)の同意ダイアログを出しておらず、広告SDKは IDFA が空のまま立ち上がっていたのです。同意を求めるより先に、計測の土台を組み立ててしまっていました。

原因が腑に落ちるまでは、何が欠けているのかから順にたどるのがいちばんの近道でした。Claude Code に初期化経路の全量を出させ、ATT の解決を待ってから広告を開始する形へ束ね直し、二度と順序が崩れないようにガードを掛けるまでを、実際のコードとともに残しておきます。

同意ダイアログの前に MobileAds を開始すると何が欠けるのか

iOS では、アプリがトラッキング用の識別子(IDFA)にアクセスするために、ATT の許可が必要です。ユーザーが「許可」を選ぶまで、ASIdentifierManager が返す IDFA は全ゼロの値になります。

広告SDKは初期化のタイミングで、利用できる識別子や計測の設定を読み込みます。ここで IDFA がまだ空だと、SKAdNetwork のアトリビューションや、メディエーション各社へ渡る初期化情報が、同意前の状態を前提に組み上がってしまいます。広告の配信そのものは IDFA がなくても成立するため、フィルレートは下がりません。落ちるのは計測の側だけです。だからこそ、収益の数字を見ているだけでは気づきにくいのです。

初期化の順序広告配信IDFA計測(SKAdNetwork 等)
ATT より先に広告SDKを開始出る空のまま初期化薄くなる
ATT の解決後に広告SDKを開始出る許可時は取得済み揃う

配信は変わらないのに計測だけがずれる。この「静かなズレ」が、順序バグのいちばん厄介なところでした。

壊れていた初期化順序(Before)

問題のコードは、SwiftUI のアプリ起動時に広告SDKを開始していました。ATT の要求は、別の画面で広告が何度か表示された後に、思い出したように呼ばれていました。

import GoogleMobileAds
 
@main
struct WallpaperApp: App {
    init() {
        // ❌ 起動と同時に広告SDKを開始している。
        // この時点では ATT の同意が取れておらず、IDFA は空のまま初期化される。
        MobileAds.shared.start()
    }
 
    var body: some Scene {
        WindowGroup { RootView() }
    }
    // ATT の要求は、この後どこか別の画面で
    // requestTrackingAuthorization を呼んでいた(=手遅れ)
}

init() は起動のいちばん早い段階で走ります。ATT のダイアログはアプリがアクティブになってからでないと表示すらされないため、この順序では「同意を取る前に計測基盤を確定させる」ことが構造的に避けられませんでした。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦フィルレートは落ちていないのに SKAdNetwork の計測だけが薄いとき、原因が ATT より先の広告SDK初期化にあると切り分けられるようになる
✦起動時に MobileAds を開始していた壊れた順序を、ATT の解決を待ってから開始する形へ Before/After のコード付きで直せるようになる
✦二度と順序が崩れないように、初期化経路を1本に束ねて CI とアサーションで守る設計を自分のアプリに入れられるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-10-12
SPM に移したら、起動した瞬間にアプリが落ちるようになりました — dyld の一行を Claude Code と読み解いた記録
CocoaPods から Swift Package Manager へ移した直後、ビルドは通るのに起動した瞬間に落ちました。dyld の一行から原因を切り分け、直し方と確認コマンドまでをまとめます。
⟐ Claude Code2026-09-04
Claude Code に project.pbxproj だけは直接触らせていません
Xcode のプロジェクトファイルは、開けなくなる壊れ方より開けてしまう壊れ方のほうが高くつきました。直接編集をやめてスクリプト経由に寄せるまでに測ったことと、いま引いている線を書き残します。
⟐ Claude Code2026-04-21
Claude Code で『モバイルアプリ収益ダッシュボード』を作る — AdMob・App Store Connect・Google Play Console の API 統合から日次レポート自動配信まで
AdMob・App Store Connect・Google Play Console の売上を1つのダッシュボードに統合し、日次レポートの自動配信までを Claude Code と実装した記録です。掲載パーサーを実測して見つけた集計欠陥3件と修正版も収録しています。