Retour expérience sur un rejet 2.23
John Barbier
Membre
[font=arial,helvetica,sans-serif]Je commencerais par remercier ceux qui ont participé au sujet :
Rejet de l'application par Apple : iCloud en cause.[/font]
[font=arial,helvetica,sans-serif]Début mai, ma première expérience de développement iPhone a été rejetée pour la même raison que celle de Planext :[/font]
[font=arial,helvetica,sans-serif]Voici le contexte qui a été rejeté :
Pour que les utilisateurs de mon application s'approprient rapidement la navigation et les manipulations à faire : je fournissais, avec les ressources downloadée, une petite base SQLite pré-remplie avec quelques images et quelques tables de référence également pré-remplies.
Au viewDidLoad de ma première UIViewControler, je testais la présence de la Base de Données de l'application dans le répertoire /Documents, si elle était absente je faisais une copie de la BdD pré-remplie, puis j'affichais pas mal d'informations que l'utilisateur modifiait à sa convenance.
Voici ce que j'ai fais et qui a marché car mon application est maintenant "Ready for sale" :
1/ J'ai copié la BdD pré-chargée dans "/Library/Caches/Private Data"
2/ J'ai fixé l'attribut "do not back up" sur le répertoire bien que non prit en compte par le Cloud, car d'après ce que j'ai compris, Apple se sert de cet attribut pour faire perdurer les fichiers de "/Library/Caches" dans les situations de "low storage"
3/ j'ai cherché comment fixé cet attribut en regard des versions iOS, car je me suis aperçu qu'Apple rejette l'application si l'implémentation est partielle.
Voici le code qui a été accepté :[/font]
[font=arial,helvetica,sans-serif]4/ J'ai fait 2 vérifications :[/font]
[font=arial,helvetica,sans-serif]Ces 4 points faits j'ai re-proposé mon application en incrémentant mon compteur de version,
suis passé de 1.0.3 en 1.0.4
Mais mon application a été a nouveau refusée pour la même raison avec le même texte qui me parlait de /Documents (j'étais pourtant sur que ce répertoire était vide).... grrrr
Je n'ai pas modifié mon code et mon application a été accepté. Ce que j'ai fais :
Je suis retourné dans iTune Connect dans "Manage Your Applications" + "View Details" + "Resolution Center" j'ai alerté poliment Apple en remplissant le petit pavé (pas vraiment visible facilement) affecté une réponse du développeur au refus de la Review. Un extrait de ce que j'ai dis :[/font]
[font=arial,helvetica,sans-serif]Mon anglais n'est pas parfait, mais Apple a compris car j'ai reçu 2 jours après :[/font]
[font=arial,helvetica,sans-serif]Apple a passé directement mon application en "Waiting for Review", puis "in Review", ...
J'ai l'impression qu'après un refus, il n'est pas recommandé d'incrémenter sa version, j'avais pourtant bien renseigné la version de mon application, non seulement dans xCode, mais également dans iTunes Connect. Ou alors c'est parce que je n'utilise pas l'incrémentation automatique car je préfère la gérer à la main (je trouve ça plus souple)
J'espère que ces quelques mots aideront ceux qui comprennent pas complément ce qu'il faut faire pour résoudre un rejet 2.23
Ce sujet bien que déjà traité dans beaucoup de forum de sites, nécessite de faire une consolidation de beaucoup de conversations pour vraiment tout comprendre.
A+[/font]
Rejet de l'application par Apple : iCloud en cause.[/font]
[font=arial,helvetica,sans-serif]Débuté par Planext, mai 13 2012 15:16[/font]
[font=arial,helvetica,sans-serif]Début mai, ma première expérience de développement iPhone a été rejetée pour la même raison que celle de Planext :[/font]
[font=arial,helvetica,sans-serif]2.23 Apps must follow the iOS Data Storage Guidelines or they will be rejected[/font]
[font=arial,helvetica,sans-serif]We found that on launch and/or content download, your app stores 4.79MB. To check how much data your app is storing: Go to Settings > iCloud > Storage & Backup > Manage Storage > ...[/font]
[font=arial,helvetica,sans-serif]Voici le contexte qui a été rejeté :
Pour que les utilisateurs de mon application s'approprient rapidement la navigation et les manipulations à faire : je fournissais, avec les ressources downloadée, une petite base SQLite pré-remplie avec quelques images et quelques tables de référence également pré-remplies.
Au viewDidLoad de ma première UIViewControler, je testais la présence de la Base de Données de l'application dans le répertoire /Documents, si elle était absente je faisais une copie de la BdD pré-remplie, puis j'affichais pas mal d'informations que l'utilisateur modifiait à sa convenance.
Voici ce que j'ai fais et qui a marché car mon application est maintenant "Ready for sale" :
1/ J'ai copié la BdD pré-chargée dans "/Library/Caches/Private Data"
2/ J'ai fixé l'attribut "do not back up" sur le répertoire bien que non prit en compte par le Cloud, car d'après ce que j'ai compris, Apple se sert de cet attribut pour faire perdurer les fichiers de "/Library/Caches" dans les situations de "low storage"
3/ j'ai cherché comment fixé cet attribut en regard des versions iOS, car je me suis aperçu qu'Apple rejette l'application si l'implémentation est partielle.
Voici le code qui a été accepté :[/font]
[font=arial,helvetica,sans-serif]if (SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(@5.0.1)) {[/font]
[font=arial,helvetica,sans-serif] const char* filePath = [[pathURL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
}
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@5.1)) {
NSError *error = nil;
BOOL success = [pathURL setResourceValue: [NSNumber numberWithBool: YES]
forKey: NSURLIsExcludedFromBackupKey error: &error];
}[/font]
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
}
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@5.1)) {
NSError *error = nil;
BOOL success = [pathURL setResourceValue: [NSNumber numberWithBool: YES]
forKey: NSURLIsExcludedFromBackupKey error: &error];
}[/font]
[font=arial,helvetica,sans-serif]4/ J'ai fait 2 vérifications :[/font]
[font=arial,helvetica,sans-serif]Pour le Cloud :[/font]
[font=arial,helvetica,sans-serif]Je purge mon application de l'iPhone grâce à l'Organizeur de xCode[/font]
[font=arial,helvetica,sans-serif]Je relance une compilation/installation pour me trouver au même point de vérification que Apple ( avant toute intervention de l'utilisateur ), car après l'utilisateur à le droit de stocker dans /Documents ( et ça va dans le Cloud automatiquement si on active le compte iCloud.[/font]
[font=arial,helvetica,sans-serif]Puis : Go to Settings > iCloud > Storage & Backup > Manage Storage > ...[/font]
[font=arial,helvetica,sans-serif]J'ai vérifié que dans la fenêtre "Afficher toutes les applications", mon application était bien associé du texte "No Data"[/font]
[font=arial,helvetica,sans-serif]Pour être sûr que /Documents est vide :[/font]
[font=arial,helvetica,sans-serif]J'ai non seulement regardé dans l'Organizer de xCode (Onglet Device)[/font]
[font=arial,helvetica,sans-serif]mais j'ai aussi utilisé un utilitaire (je sais pas trop si il est bien autorisé) qui s'appelle iExplorer lequel permet de voir tout le contenu de l'iPhone[/font]
[font=arial,helvetica,sans-serif]Ces 4 points faits j'ai re-proposé mon application en incrémentant mon compteur de version,
suis passé de 1.0.3 en 1.0.4
Mais mon application a été a nouveau refusée pour la même raison avec le même texte qui me parlait de /Documents (j'étais pourtant sur que ce répertoire était vide).... grrrr
Je n'ai pas modifié mon code et mon application a été accepté. Ce que j'ai fais :
Je suis retourné dans iTune Connect dans "Manage Your Applications" + "View Details" + "Resolution Center" j'ai alerté poliment Apple en remplissant le petit pavé (pas vraiment visible facilement) affecté une réponse du développeur au refus de la Review. Un extrait de ce que j'ai dis :[/font]
[font=arial,helvetica,sans-serif]...[/font]
[font=arial,helvetica,sans-serif]The /documents directory is empty on launch
I have copy the pre-filled SQLITE (user database) in /Library/Caches/Private Data" directory and I set the "do not back up" attribute on this directory
On my iPhone : Settings > iCloud > Storage & Backup > Manage Storage say "no data" for my application
so I don't understand that you say the same reason to reject my application
To prove my comments have I to present a copy of my Xcode (.m)
Are you sure to have test the good version : 1.0.4 ?[/font]
I have copy the pre-filled SQLITE (user database) in /Library/Caches/Private Data" directory and I set the "do not back up" attribute on this directory
On my iPhone : Settings > iCloud > Storage & Backup > Manage Storage say "no data" for my application
so I don't understand that you say the same reason to reject my application
To prove my comments have I to present a copy of my Xcode (.m)
Are you sure to have test the good version : 1.0.4 ?[/font]
[font=arial,helvetica,sans-serif]...[/font]
[font=arial,helvetica,sans-serif]Mon anglais n'est pas parfait, mais Apple a compris car j'ai reçu 2 jours après :[/font]
[font=arial,helvetica,sans-serif]Hello,[/font]
[font=arial,helvetica,sans-serif]Thank you for providing this information. We will notify you if there are any further issues.[/font]
[font=arial,helvetica,sans-serif]Apple a passé directement mon application en "Waiting for Review", puis "in Review", ...
J'ai l'impression qu'après un refus, il n'est pas recommandé d'incrémenter sa version, j'avais pourtant bien renseigné la version de mon application, non seulement dans xCode, mais également dans iTunes Connect. Ou alors c'est parce que je n'utilise pas l'incrémentation automatique car je préfère la gérer à la main (je trouve ça plus souple)
J'espère que ces quelques mots aideront ceux qui comprennent pas complément ce qu'il faut faire pour résoudre un rejet 2.23
Ce sujet bien que déjà traité dans beaucoup de forum de sites, nécessite de faire une consolidation de beaucoup de conversations pour vraiment tout comprendre.
A+[/font]
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Plus d'informations disponibles dans la doc Apple au lien suivant :
http://developer.app...anceTuning.html
Si j'ai compris (que dans mon cas) il fallait complètement bloquer les backups iCloud puisque mes utilisateurs ne stockes aucune donnée de mon app, il ne font que la consulter.
Je n'ai rien compris de la marche à suivre. Je n'ai rien compris à cette histoire de flags sur mes dossiers et leur hiérarchie.
Ce que je comprend encore moins, c'est que lors de la création de mon Bundle ID, je n'ai pas activé iCloud... enfin coché la case "enable" et il est donc resté en orange.
Si une âme charitable voulait bien expliquer à mon petit cerveau de façon plus simple comment puis-je résoudre ce rejet 2.23.
D"avance merci.
Il faut distinguer l'utilisation d'iCloud pour, par exemple, synchroniser des données entre appareils, et les backup iCloud, qui sont systématiques et se font sur toutes les applications, même si le développer n'à pas dit vouloir utiliser iCloud. Ce second cas ne permet aucune synchronisation de données entre plusieurs appareils mais uniquement de restaurer les données sur un appareil (comme les backup iTunes).
Si je comprends bien tu as un rejet 2.23, tu n'arrives pas le résoudre, malgré le retour d'expérience du présent sujet.
Pour que tu comprennes mieux, je vais te lister ce qui déclenche à coup sûr le 2.23
(y a peut être d'autres cas / une demande de support m'a répondu ce qui suit (j'ai traduis):
A ce jour, Apple veut être sûr que s'il y a des DATA, dans la zone de sauvegarde iCloud /Documents, ces DATA sont venus là qu'à l'issue d'une action volontaire de l'utilisateur, et non pas une action du développeur qui voulait que ces DATA soient modifiables. Donc pour avoir cette certitude :
1/ Apple prend un iPhone vierge de ton application.
2/ Fait une première installation (pas une réinstallation laquelle pourrait avoir un résiduel de données dans /Documents).
3/ Immédiatement après la première installation, et AVANT toutes intervention sur l'application, le répertoire et sous-répertoires de Documents doivent être vides
4/ Vérification
5/ Pas vide = 2.23
Voila.
Ce qui nous trompe c'est qu'il y a plein d'exemples sur Interne qui pré-chargent des données dans /Documents car ces données doivent être modifiées par l'utilisateur
Donc en conclusion :
On peut mettre dans le répertoire /Documents, mais qu'après que l'utilisateur a utilisé l'application (plus qu'une simple navigation)
Bien cordialement