iPad plantage et perte données coredata
busterTheo
Membre
Bonjour à tous, il m'arrive un truc vraiment chaud.
En chargeant la dernière version de mon app en dev sur TestFlight, mon iPad a planté et a installé l'app (sans update) en perdant mes données coredata. Pas grave pour moi, mais comment anticiper si cela arrivait à mes testeurs, notamment mon client ?
Y-a-t-il du code à mettre dans l'app pour anticiper cela et retrouver ses données en cas de perte ?
Merci d'avance...
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je commencerai par essayer de comprendre pourquoi l'iPad a planté. Si c'est à cause de ton app c'est bien de le voir dans une version de test (sauf si des gens utilisent la version de test en production...). Comme ça tu peux le corriger.
Pour récupérer les données en l'état, si tu as mis le fichier Core Data dans un endroit qui se retrouve dans un backup iCloud ou iTunes (voir ici) restaurer la dernière sauvegarde va aussi restaurer les données. Tout ça, bien entendu, si il y a un backup.
Au niveau de la stratégie de backup pour une solution maison je te conseillerai d'essayer d'envoyer tes données dans iCloud. Tu gagne au passage la synchro entre appareils. Mais ça c'est plus compliqué à mettre en place.
De toute façon je pense qu'il faut commencer par comprendre ce qu'il s'est passé. Par exemple as-tu changé ton schéma Core Data par exemple ?
Merci Pyroh pour ta réponse très explicite.
L'iPad a planté, enfin, redémarré pendant que testFlight faisait l'update de mon app.
Puis après ce redémarrage, il restait bloqué sur le chargement.
J'ai fait l'erreur de jeter l'icône de l'app sur le bureau de l'iPad, puis ensuite de la recharger sur testFlight, et là, évidemment le bouton update était changé en install. Et j'ai installé.
En gros je me suis comporté comme un gros naze.
Pourquoi l'iPad a planté... Il plante sans arrêt. En fait il redémarre très souvent.
Je n'ai pas changé mon schéma coreData récemment.
Merci pour le lien - J'ai du mal à comprendre comment faire, mais bon...
Suite à mon erreur, j'ai une question subsidiaire.
Si qq jette son app malencontreusement, et la recharge cette fois-ci d'après l'AppStore, récupère-t-il automatiquement ses données ou pas ?
Merci d'avance
Non, enfin, pour la plupart des cas, non. Ça serait l'horreur sinon !
Tu peux cependant avec iCloud faire quelques sauvegardes et cela sera demandé à l'utilisateur lorsqu'il veut supprimer l'app de garder ou non ces datas.
Les données Keychain sont gardées aussi normalement.
Pour le reste, une donnée locale est une donnée locale.
Merci Larme pour ta réponse.
Donc, j'imagine que la plupart des apps sérieuses ont une sauvegarde dans la cloud.
J'ai fait pas mal de recherches sur ce sujet, et j'avoue que je n'y comprend pas grand chose.
J'ai lu le lien de Pyroh.
Comment ça marche ce truc ?
On vérifie d'abord que le user a effectivement un cloud ?
Et puis en cas de suppression de l'app, c'est l'app qui a dans son code, la proposition de garder ou supprimer les datas, ou c'est automatique ?
Parce que moi, par ex., je n'ai pas de cloud, je suis de la vieille école !
Je sais, c'est pas bien, mais je n'en ai nullement besoin. J'aime bien mes disques durs...
Donc si qq a un bon lien de tuto pour faire une sauvegarde dans l'hypothétique cloud du user, je suis preneur.
Merci d'avance.
Avant d'aller plus loin il serait bon de savoir de quoi on parle exactement. Quelle est la nature de ces données ?
Aussi il peut être intéressant de savoir comment tu initialise la stack CoreData pour qu'on voit où ces données sont stockées.
Pour la suppression de l'App et des données liées c'est la responsabilité de l'utilisateur, pas la tienne. Tu peux être responsable de la corruption des données si ton app fait n'importe quoi mais pas des actions directes de l'utilisateur. Client direct ou pas, faut pas déconner.
Au pire il y a des backups qui sont faits pour les appareils iOS, sur iTunes ou iCloud. En cas de gros soucis on restaure et on en parle plus.
Depuis quelque temps, il est facile d'ajouter la possibilité de copier des fichiers dans d'autres apps : Fichiers, apps de stockage, AirDrop, etc..., voire les envoyer par mail.
L'utilisateur peut donc faire lui-même ses sauvegardes où il le souhaite.
De plus, lorsqu'une app est supprimée, il y a des alertes concernant les données.
Ah merci à tous les deux pour ces précisions.
Concernant la stack coreData, voici le code que j'ai dans le appDelegate.
J'avoue que je plane un peu sur tout ça, mais ça fonctionne nickel.
Voici le code (qui n'est pas de moi) :
// MARK: - Premières Méthodes Apple
// MARK: - Core Data stack
// MARK: - Core Data Saving support
D'après ce que je lis tu mets un fichier SingleViewCoreData.sqlite dans le dossier Documents liés à l'app. C'est une DB commune à l'ensemble des services de l'App.
Maintenant pour tes sauvegardes tu as une poignée de solutions :
Il reste l'option d'autres services de cloud mais je n'en ai pas à te conseiller. Du moins rien de gratuit ou même d'abordable.
Dans tous les cas ce qui va te motiver c'est le coût en temps et le retour sur investissement. Est-ce que c'est prévu dans le contrat, est-ce que ton client est prêt à payer pour l'implémentation, etc.. Tu peux aussi passer par un consultant pour implémenter tout ça (on peut en discuter par MP, j'offre ce genre de services).
Quelle que soit l'action que tu entreprendras ça te coûtera en temps ou en argent (voir les 2). Commence par te demander si tu as vraiment besoin de faire quelque chose 😉
Bonsoir,
Apple a bien revu la cohérence et la synchro entre core data et iCloud (en 2019 je crois).
Il y a certainement des limites, mais pour la petite appli que je me suis faite pour gérer ma cave à vins, ça marche nickel ! Je m'occupe de mettre à jour la base de données locale Core Data, et la synchro iCloud se passe comme un charme; une mise à jour sur l'iPhone apparait quasi instantanément sur l'iPad.
Et c'est le bonheur, par rapport à une version précédente de l'appli où je devais gérer (mal !) tous les cas de synchro entre la base de données locale et iCloud.
Cordialement
Nicolas
@Ristretto j'ai une fonction d'historique que j'aimerai synchroniser. C'est simple, une pile de données basiques. Je vais re donner une chance au produit alors 😉
Merci du retour.
Merci Pyroh pour ces précision auxquelles je vais me tenir.
Purée, tu as mis cela en forme comme un pro.
C'est parfaitement détaillé, je te remercie encore pour le temps passé.
Je vais en rester à ta réponse A, en gardant à l'esprit de m'intéresser quand j'aurais du temps à la B qui a l'air sympa..
Et j'oublie donc la C.
Merci au dernier bar ouvert...