Lors de ma dernière mise à jour de l'application, quelques utilisateurs se sont plaints des plantages et j'ai réussi à obtenir un rapport d'erreur. Voici la raison de l'accident du journal de crash symbolisé.Coredata Migration Crash
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
Triggered by Thread: 0
Cela se produit lorsque j'appelle [NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:]
Voici le stacktrace complet:
Thread 0 name: Dispatch queue: SQLQueue 0x12fecca10 for .database.db.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x0000000180640164 __fcntl + 8
1 libsystem_kernel.dylib 0x0000000180625660 fcntl + 84
2 libsqlite3.dylib 0x0000000181ba3f90 0x181b3d000 + 421776
3 libsqlite3.dylib 0x0000000181bb9e50 0x181b3d000 + 511568
4 libsqlite3.dylib 0x0000000181bcdf34 0x181b3d000 + 593716
5 libsqlite3.dylib 0x0000000181bcdd98 sqlite3_wal_checkpoint_v2 + 492
6 libsqlite3.dylib 0x0000000181ba41b0 0x181b3d000 + 422320
7 libsqlite3.dylib 0x0000000181b7b288 sqlite3_step + 976
8 CoreData 0x000000018391b194 _execute + 164
9 CoreData 0x000000018394ffd8 -[NSSQLiteConnection commitTransaction] + 312
10 CoreData 0x0000000183a6ced8 __43-[_NSSQLiteStoreMigrator performMigration:]_block_invoke + 2784
11 CoreData 0x0000000183a36cbc __37-[NSSQLiteConnection performAndWait:]_block_invoke + 40
12 libdispatch.dylib 0x00000001804fe9a0 _dispatch_client_callout + 16
13 libdispatch.dylib 0x000000018050bee0 _dispatch_barrier_sync_f_invoke + 84
14 CoreData 0x0000000183a36c08 -[NSSQLiteConnection performAndWait:] + 144
15 CoreData 0x0000000183a6c35c -[_NSSQLiteStoreMigrator performMigration:] + 184
16 CoreData 0x0000000183a63db0 -[NSSQLiteInPlaceMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:] + 1912
17 CoreData 0x00000001839ee814 -[NSMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:] + 556
18 CoreData 0x0000000183a5f090 -[NSStoreMigrationPolicy(InternalMethods) migrateStoreAtURL:toURL:storeType:options:withManager:error:] + 324
19 CoreData 0x0000000183a5e3ec -[NSStoreMigrationPolicy migrateStoreAtURL:withManager:metadata:options:error:] + 120
20 CoreData 0x0000000183a5fb08 -[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:] + 2440
21 CoreData 0x00000001839fc188 __91-[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:]_block_invoke + 4160
22 CoreData 0x0000000183a08630 gutsOfBlockToNSPersistentStoreCoordinatorPerform + 168
23 libdispatch.dylib 0x00000001804fe9a0 _dispatch_client_callout + 16
24 libdispatch.dylib 0x000000018050bee0 _dispatch_barrier_sync_f_invoke + 84
25 CoreData 0x00000001839f7d70 _perform + 200
26 CoreData 0x000000018390d5e4 -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] + 388
Je n'ai pas plus de détails sur l'accident. Seulement que cela arrive pour quelques utilisateurs et pas tous. Je n'ai aucune idée de comment le reproduire pour une solution correcte. L'utilisateur a signalé que l'application a démarré, a été "gelée" pendant un certain temps et s'est ensuite écrasée. Et cela continue de le faire.
J'ai regardé la dernière version du modèle de données de base depuis que j'ai expédié l'application et ce fichier est toujours le même. Au cours du développement, j'ai ajouté 5 autres versions, mais cela ne devrait pas être un problème non? La version livrée dans l'application avant la mise à jour est intacte ...
EDIT: Les modifications apportées au modèle consistaient simplement à ajouter de nouvelles propriétés aux entités existantes. Mais si l'auto-migration échouait, cela échouerait pour tout le monde, n'est-ce pas? Pas seulement pour quelques utilisateurs?!?
Alors j'espérais que quelqu'un ici pourrait déjà avoir le même problème et une solution sur la façon de le réparer. Ou au moins un moyen de détecter le problème sans que l'application plante. Ensuite, je pourrais simplement recréer la base de données pour ces utilisateurs ...
C'est une trace de la pile intéressante. Les données de base démarrent la migration mais explosent à un moment donné. Je demanderais à l'utilisateur si son appareil manque d'espace. En outre, il peut être utile de modifier votre question pour décrire les modifications que vous avez apportées à votre modèle. –
Hey Tom, je vais demander à l'utilisateur! Qu'est-ce qui vous fait penser qu'il pourrait s'agir d'un espace disque réduit? J'ai mis à jour ma question sur les changements ... Les changements que j'ai apportés au modèle consistaient simplement à ajouter de nouvelles propriétés sur des entités existantes. Mais si l'auto-migration échouait, cela échouerait pour tout le monde, n'est-ce pas? Pas seulement pour quelques utilisateurs?!? Avez-vous une idée de la façon dont je pourrais reproduire l'erreur? – Georg
Comme cela fonctionne pour la plupart des utilisateurs, il semble que la migration soit correctement configurée. Votre trace de pile soutient that-- tout fonctionne, mais alors ** boom **. Cela laisse la question de ce qui est unique chez ces quelques utilisateurs. Le manque d'espace n'affecterait pas la plupart des utilisateurs et pourrait faire exploser les choses au milieu d'une migration qui marche autrement. –