J'ai commencé à recevoir un grand nombre de plantages signalés par Fabric
pour mon application iOS qui est déjà distribuée sur l'App Store. Les plantages commencent à signaler à partir de 18 Sep
à partir de iOS 13
seulement. Voici le journal des plantages du thread principal qui se bloque.
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
Quelqu'un face à un crash similaire? Comment puis-je me débarrasser de ce problème?
Comme par Alex solution ,
Il semble que le dyld3 enregistre les fichiers clojure générés dans le répertoire app tmp et si vous utilisez NSFileProtectionComplete, les fichiers de fermeture ont également cette propriété.
Pour générer une fermeture de l'application, verrouillez le téléphone, envoyez un Push qui réveillera l'application, puis le crash est généré.
La solution semble être simple, changez simplement les autorisations pour le répertoire tmp de l'application en NSFileProtectionCompleteUntilFirstUserAuthentication et l'application ne se bloquera pas. Je ne sais vraiment pas pourquoi Apple a fait ça.
Cela a fonctionné pour moi.
Commentaires de Rayns
Vous n'avez pas nécessairement besoin d'utiliser les notifications Push pour reproduire le problème. Si votre application est configurée pour utiliser une protection complète des fichiers dans les droits, tout code qui s'exécute alors que les données protégées ne sont pas disponibles entraînera le blocage de l'application. Par exemple, l'application de mon entreprise a une tâche en arrière-plan qui prend plus de 10 secondes à exécuter. Étant donné que les données protégées deviennent indisponibles environ 10 secondes après le verrouillage de l'appareil, l'application se bloque avant que la tâche d'arrière-plan ne puisse terminer son exécution (malgré le temps disponible sur l'assertion).
Mon application a la même situation. Après avoir changé la protection des données en "Complète jusqu'à l'authentification du premier utilisateur", mon application ne plante plus.