web-dev-qa-db-fra.com

iOS 13 - Crashed: com.Apple.main-thread EXC_BREAKPOINT (CoreFoundation)

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?

5
Sazzad Hissain Khan

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.

Reproduction et test

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).

0
Sazzad Hissain Khan

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.

0
JImmy Liu