Bug sur version de l'App Store ... alors que tout est OK sur Simulator et mes iPhones/iPod !

Hello à  tous,


J'ai un big souci : vendredi dernier j'ai mis en ligne sur l'App Store une mise à  jour majeure de mon app "Booble".


Bien évidement cette version a été préalablement testée , re-testée, sur-testée même (!) aussi bien sur mon iPhone 6s, iPod Touch, iPhone 5c que sur le Simulator de Xcode ... et tout était OK.


Or les Booble mise à  jour via l'App Store rencontrent eux un sérieux problème : les composants dessinés par UIBezierPath et stockés dans des UIImage ....disparaissent !


Depuis Vendredi je croule sous les plaintes de mes utilisateurs (très rapidement j'ai retiré Booble de l'App Store mais malheureusement plusieurs milliers de mise à  jour ont déjà  été effectuées ... )... alors si vous avez une piste / solution je suis preneur !


OldNick.


Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur
    mars 2017 modifié #2

    Or les Booble mise à  jour via l'App Store rencontrent eux un sérieux problème : les composants dessinés par UIBezierPath et stockés dans des UIImage ....disparaissent !

    Pourrais-tu détailler le fonctionnement?

    Le problème se produit-il uniquement sur les mises à  jour ? Si oui, stockes-tu quelque chose dans la sandbox ou les user defaults ?
  • Merci Céroce de te pré-occuper de mon souci ...


    Le problème ne se produit pas uniquement sur les mises à  jour (avant de retirer Booble de l'App Store, je l'ai fait acheter par un copain ... et le problème est aussi présent) ... et non, je ne stocke rien dans les user defaults, pour la sandbox, je ne l'utilise pas ...


    Ce qui me fait bondir, c'est que lorsque je transfère l'app via Xcode mon app fonctionne à  merveille ! Je suis un peu désemparé ....


    Voici comment je dessine mes composants :


     


    Dans mon .h, je déclare mon UIImage : 



    @property (weak, nonatomic) IBOutlet UIImage *ImageCochonnet;

     


    Dans mon .m, je l'initialise :



    - (void) CreationImageCochonnet
    {
        UIGraphicsBeginImageContext(CGSizeMake(400,400));
        [[UIColor colorWithRed:178.0/255.0 green:178.0/255.0 blue:178.0/255.0 alpha:0.4] setFill];
        UIBezierPath *Carre1blanc = [UIBezierPath bezierPathWithRect:CGRectMake(0,0,200,200)];
        [Carre1blanc fill];
        UIBezierPath *Carre2blanc = [UIBezierPath bezierPathWithRect:CGRectMake(200,200,200,200)];
        [Carre2blanc fill];
        
        [[UIColor redColor] setFill];
        UIBezierPath *Carre1rouge = [UIBezierPath bezierPathWithRect:CGRectMake(200,0,200,200)];
        [Carre1rouge fill];
        UIBezierPath *Carre2rouge = [UIBezierPath bezierPathWithRect:CGRectMake(0,200,200,200)];
        [Carre2rouge fill];
        
        [[UIColor blackColor] setStroke];
        UIBezierPath *Rond = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0,400,400)];
        Rond.lineWidth = 7.0;
        [Rond stroke];
        UIImage *Fond = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        UIBezierPath *Clipp = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0,400,400)];
        UIGraphicsBeginImageContext(CGSizeMake(400,400));
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextAddPath(context,Clipp.CGPath);
        CGContextClip(context);
        [Fond drawAtPoint:CGPointZero];
        ImageCochonnet = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }

     


    En t'écrivant ces lignes, je m'aperçois que j'ai déclaré mon UIImage comme un composant crée via l'Interface Builder ... or non, un malheureux copié/collé me l'a fait déclaré de la sorte .... le plus propre aurait été :



    @property (strong, nonatomic) UIImage *ImageCochonnet;

     


    Est-ce que mon souci pourrait provenir de là  ?


    Le plus pénible c'est que tout fonctionne bien dans mes devices comme dans le simulator .... impossible pour moi de reproduire le problème ....


    Encore un immense merci pour ton coup de main ...


  • CéroceCéroce Membre, Modérateur
    mars 2017 modifié #4

    Est-ce que mon souci pourrait provenir de là  ?

    Non, c'est plus une indication pour toi et Xcode qu'autre chose.

    Je ne vois rien d'évident.
    Quand appelles-tu ce code ? Il faut évidemment qu'il y ait un contexte graphique courant, c'est à  dire une vue prête à  se dessiner.

    Il y a un moyen de réduire la vitesse des animations sur le simu. À essayer, parce que je sens le coup de la capture de vue qui ne marche pas parce que la vue n'est pas encore à  l'écran. ça marcherait sur le simu et les iPhones récents, mais pas les vieux.
  • LeChatNoirLeChatNoir Membre, Modérateur

    Essaye de tester sur un device en mode release.


     


    Peut être que ton pb ne se voit pas en mode "Debug".


  • J'appelle ce code seulement si mon UIImage ImageCochonnet == nil :



    if (ImageCochonnet == nil) {
        [self CreationImageCochonnet];
    }

    ... c'est peut-être ça le problème .... mais alors pourquoi cela marche parfaitement sur mes iPhone/iPod/iPad et dans le simulateur ?


     


    Cette UIImage est ensuite "chargée" dans une UIImageView ... elle-même chargée dans une autre UIImageView par addSubview.


     


    Mon app est traduite en 3 langues (français, anglais et espagnol) ... le problème m'a été remonté pour le français et l'anglais.

  • --> LeChatNoir : ta suggestion est TOP !!!! En mode release, j'arrive à  reproduire le problème (ouf !) ... reste plus qu'à  le résoudre ...


    Un immense merci à  toi !!! 


    Que ferais-je sans vous tous CocoaCafé dream team .....?


  • CéroceCéroce Membre, Modérateur
    Maintenant la question: comment ça a pu passer la validation d'Apple ???
  • --> Céroce : tu crois que les lutins ont pris le temps de mesurer leurs boules ? (Booble mesure les distances boules/cochonnet)


    Ok je sors ... xd

  • Pour votre info, j'ai trouvé d'ou venait le problème : pour des questions de gestion mémoire ...j'avais déclaré mon UIImage en "weak" ... le mode debug s'en contrefout et conserve l'UIImage (contrairement au mode release)... je l'ai donc passée en "strong" ... et tout va mieux ...bref merci à  vous deux - une fois de plus - Céroce et LeChatNoir pour votre coup de main ....


  • LeChatNoirLeChatNoir Membre, Modérateur


    Si ça urge vraiment, tu peux demander une "expeditive review"  pour que la validation se fasse dans les 24h. T'as le droit à  une ou 2 par an de mémoire.


  • --> LeChatNoir : cool pour l'info ...sais-tu comment on formule une telle demande ?


  • J'ai trouvé : c'est dans "Contactez-nous" sur la home page de iTunes Connect (cf: http://mobileroadie.zendesk.com/hc/en-us/articles/200091766-Requesting-Expedited-App-Review-on-iTunes) ...malheureusement la page n'est pas accessible  B)

  • J'ai essayé le "Contact us" figurant dans le mail m'informant que mon app est "Waiting for Review" ... et là  ça marche ...on peut demander une "Expéditive review" .....merci encore à  tous !


Connectez-vous ou Inscrivez-vous pour répondre.