Case 1
広告付きアプリを iOS 15 対応にしたら、ATT 関係でリジェクトされた。
iOS 13 の時に作成したアプリで、AppDelegate の application(:didFinishLaunchingWithOptions:)_ に ATTrackingManager.requestTrackingAuthorization() を記述している場合、Xcode 13 でビルドしたバイナリは iOS 15 のデバイスでは期待通りに動作しない。
iOS 15 からアプリがアクティブ状態にならないと、ATT のプロンプト表示が行われなくなったのが原因である。この場合は、UIApplication.didBecomeActiveNotifcation などの通知を UIViewController のサブクラスで受信する方法で対応できる。要は通知を受信して、Not determined の場合は、ATTrackingManager.requestTrackingAuthorization() を呼び出すコードを実装するだけ。
リジェクトされるまで全然問題に気づかなかった。
Case 2
上記の実装方法で実機およびシミュレータで問題なく動作確認したのに、ATT プロンプトが表示されないという理由でリジェクトされる場合、原因はアプリではなく審査員の iOS 環境にある。設定アプリのプライバシーのトラッキング画面の「Allo Apps to Request to Track」がオフの状態で審査されると、アプリのインストール直後でも ATT プロンプトは表示されない。
App Store Connect の「メモ」に以下のようなスクリーンショットとコメントを記述して審査に提出すると良い。この現象に気づくまで、三回もリジェクトされた。アプリ側の実装に問題がないので、なかなか気づけなかった。スクリーンショットと動画のやりとりをして、ようやく原因にこぎつけた。
Please make sure that "Allow Apps to Request to Track" is on in Settings.app. If the switch is off, the App Tracking Transparency (ATT) prompt is not shown. The ATT prompt is shown at only "Not Determined" status. You should turn on the switch if you check the ATT prompt. You can also change the switch after the app is installed.
おわりに
ATT 関係は一度実装すると見直す機会がないので、リジェクトされるまで気づかない。おそらく今後は大きな仕様変更もないと思うので、今の実装方法でしばらく対応する必要はないと期待している。以上、備忘録も兼ねて、同じ状況に遭遇した誰かの参考まで。