症状
・アプリの「お問い合わせ」に、iOS 26環境でアプリが突然終了・フリーズするという報告が相次いだ。・Androidからの報告はなし。
・有料版(広告なし)からの報告もなし。
convertToDiagnosticEvent
はバナー広告のネットワーク通信完了後に診断データを収集・変換する処理。
調査
Xcodeの解析データからスタックトレースを取得。
Thread 70 Queue: com.apple.NSURLSession-delegate (serial)
#0 UnityAds.NetworkTransactionDiagnosticAdapter.convertToDiagnosticEvent
#1 convertToNetworkMetricType
#2 GenericNetworkDiagnosticDecorator.sendNetworkMetricsIfNeed
#5 NetworkSenderBase.createDataTask
#15 _pthread_wqthread自分のコードは一切含まれていない。
Unity Ads SDK内部でクラッシュしている。
はバナー広告のネットワーク通信完了後に診断データを収集・変換する処理。
iOS 26でNSURLSessionTaskMetricsのAPI変更があり、SDK側が対応できていない模様。
調査の結果、以下が判明した。
- UnityLevelPlay v9.3.0使用時はクラッシュ報告なし
- UnityLevelPlay v9.4.1へのアップデート後からクラッシュ開始
- iOS 26.3.1、26.4.2、26.5すべてで発生
- Androidは同バージョンでANR修正済みのため問題なし
- 有料版(バナーなし)は問題なし
つまりiOS 26 × UnityLevelPlay v9.4.1の組み合わせが問題。
・SDK開発元(Unity Technologies)にチケットを提出。
・ユーザーからの報告件数とスタックトレースを添付。
暫定対応
SDK修正版のリリースを待つ間、バナーを一時停止することにした。
教訓
- バナーはLevelPlayにおいて比較的新しい機能(SDK 8.4.0でベータ追加)であり、まだ成熟しきっていない
- SDKのアップデートは必ずしも安全ではない