App Storeで既に配布されているiOSアプリケーションについて、Fabric
から報告された膨大な数のクラッシュが発生し始めました。クラッシュは18 Sep
以降のiOS 13
についてのみ報告されます。クラッシュしているメインスレッドのクラッシュログは次のとおりです。
Crashed: com.Apple.main-thread
0 CoreFoundation 0x185180408 OUTLINED_FUNCTION_0 + 4
1 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
2 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
3 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
4 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
5 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
6 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
7 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
8 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
9 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
10 CoreFoundation 0x18525bd68 __CFStringCollectionCopy.cold.1 + 14
同様のクラッシュに直面している人はいますか?この問題を取り除くにはどうすればよいですか?
アレックスの solution のように、
Dyld3は生成されたclojureファイルをアプリのtmpディレクトリに保存するようです。NSFileProtectionCompleteを使用する場合、クロージャーファイルにもこのプロパティがあります。
クラーを生成してアプリを閉じ、電話をロックし、アプリを起動するプッシュを送信すると、クラッシュが生成されます。
解決策は単純なようですが、アプリの一時ディレクトリのアクセス許可をNSFileProtectionCompleteUntilFirstUserAuthenticationに変更するだけで、アプリはクラッシュしません。 Appleがこれを行った理由が本当にわかりません。
これでうまくいきました。
Raynsのコメント
問題を再現するために必ずしもプッシュ通知を使用する必要はありません。資格で完全なファイル保護を使用するようにアプリが構成されている場合、保護されたデータが利用できないときに実行されるコードは、アプリをクラッシュさせます。たとえば、私の会社のアプリには、実行に10秒以上かかるバックグラウンドタスクがあります。デバイスをロックしてから約10秒後に保護されたデータが利用できなくなるため、バックグラウンドタスクの実行が完了する前にアプリがクラッシュします(アサーションでより多くの時間が利用可能であるにもかかわらず)。
私のアプリも同じ状況です。データ保護を「最初のユーザー認証まで完了する」に変更した後、アプリがクラッシュすることはなくなりました。