SDK 3.0 : Compatibilité et problèmes ?

AliGatorAliGator Membre, Modérateur
14:32 modifié dans Apple Developer Programs #1
    Bonjour à  tous,Ayant adhéré au programme à  $99 et ayant donc accès au SDK 3.0, je n'ai encore fait que parcourir la doc, mais je compte installer le SDK 3 sous peu sur mon mac de dev.Cependant j'ai lu/entendu à  gauche à  droite sur le web et ailleurs quelques petites choses qui me freinent :
  • Il semble que lorsqu'on installe le SDK 3.0, on ne peut plus compiler pour le SDK 2.2.1, en fait ça fait foirer la compilation avec les autres SDKs ? C'est toujours d'actualité ça ? (pb dans les fichiers de conf installés par le SDK 3 ou je sais plus trop ce que j'avais lu) ?
  • Si je compile du coup mon appli pour SDK 3.0, pour la tester sur device je vais devoir passer ledit device en OS 3.0, on est bien d'accord ? Je veux dire on ne peut pas développer une appli avec le SDK 3.0 en gardant une compatibilité 2.2.1, genre avec des if pour tester si telle fonctionnalité est dispo car l'utilisateur a l'OS 3, mais si c'est pas le cas et qu'il est encore en 2.2.1, faire autre chose ou juste afficher une alerte...?

(Parce que vu que si on passe un device en OS 3.0 on ne peut pas revenir en arrière en version 2.2.1 ensuite... et comme en plus il parait que l'OS 3.0 beta est encore pas mal plantogène...)


Comme je vais avoir à  faire des devs sous OS 2.2.1 et OS 3, on aura un device, de chaque, mais pour ce qui est du SDK, si l'installation du SDK 3.0 pourrit l'install du 2.2.1 et qu'il est impossible de compiler après pour ce SDK 2.2.1, ça m'emm...bête pas mal quand même.... qqun peut confirmer ou infirmer ce souci ? Ou me dire s'il a été résolu depuis ?

Merci !
«1

Réponses

  • Philippe49Philippe49 Membre
    14:32 modifié #2
    dans 1240914267:

    Il semble que lorsqu'on installe le SDK 3.0, on ne peut plus compiler pour le SDK 2.2.1, en fait ça fait foirer la compilation avec les autres SDKs ?[/b] C'est toujours d'actualité ça ?

    Foirer non . J'ai le SDK 3.0 depuis déjà  longtemps. Le seul inconvénient notable que j'ai eu c'est que les Templates des applis viennent en 3.0, et qu'il faut faire attention avec les réglages (Instruments, doc, ...).
    Mon device est en 2.2.1

    On note des différences conceptuelles également. par exemple la méthode
    - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated
    dépendra de la property UIModalTransitionStyle(cover,flip,dissolve)


    dans 1240914267:

    Si je compile du coup mon appli pour SDK 3.0, pour la tester sur device je vais devoir passer ledit device en OS 3.0, on est bien d'accord ?

    Je l'ai lu comme cela aussi et c'est pour ça que je suis resté en 2.2.1
  • AliGatorAliGator Membre, Modérateur
    14:32 modifié #3
    Ok donc en résumé Philippe tu as le SDK 3.0 d'installé sur ton Mac ("par dessus" le 2.2.1 donc tu as les deux SDKs dans dont dossier Developper quoi), mais tu développes encore en 2.2.1 aussi, y compris sur ton device, resté lui en 2.2.1, et ce sans problème ?
    Et quand tu fais des essais de dev en 3.0 tu les fais sur le simulateur, quoi. Mais ça t'empêche pas de développer avec les deux ?

    Donc le pb dont j'avais entendu parler comme quoi l'install du 3.0 faisait buguer la compilation en 2.2.1 a dû être résolu depuis...
  • Philippe49Philippe49 Membre
    14:32 modifié #4
    dans 1240921459:

    Et quand tu fais des essais de dev en 3.0 tu les fais sur le simulateur, quoi. Mais ça t'empêche pas de développer avec les deux ?

    Je n'ai pas encore essayé d'utiliser 3.0 (comme toi j'étais curieux de la doc), mais effectivement il ne me resterait que le simulateur.

    Je fais un petit essai pour voir ..
  • Philippe49Philippe49 Membre
    14:32 modifié #5
    Bon petit essai :

    Je fais une Utility Application sous 3.0 (le template seulement, mais avec le truc de la nouvelle property UIModalTransitionStyle)  avec le simulateur 3.0. Je lance ==> Ok

    Je lance mon projet actuel (assez conséquent) sous 2.2.1 . Le simulateur semble un peu mouliner, mais ça passe.


  • apocaalypsoapocaalypso Membre
    14:32 modifié #6
    C'est ce que je fais aussi : j'ai le SDK 2.2.1, où là  je peut tester sur mon iPhone en 2.2.1, et lorsque je veux tester une fonctionnalité en 3.0, je la lance sur le iPhone Simulator.
    Tout marche sans problème.
  • AliGatorAliGator Membre, Modérateur
    14:32 modifié #7
    Cool merci donc moi qui n'avait que consulté la doc du SDK 3.0 pour l'instant, mais n'avait pas voulu l'installer de peur que ça me pourrisse mon 2.2.1... bah finalement je vais pouvoir le faire et faire mumuse avec.

    Je ne sais plus d'où me vient cette info comme quoi l'install du SDK 3.0 pourrissait la 2.2.1 (empêchait la compilation avec le SDK 2.2.1), mais si c'était d'actualité à  une époque, ça a l'air d'avoir été résolu donc... très bonne nouvelle :)

    Merci pour ces retours d'expérience rassurants :)
  • AliGatorAliGator Membre, Modérateur
    14:32 modifié #8
    Hello les gens,

    Je remonte ce sujet car j'ai un souci : sur un nouveau MacMini (Intel Core2Duo 2GHz) tout frais sorti de son emballage ce matin (je sais pas si l'installation "fraà®che" joue mais bon), j'ai installé le iPhone SDK 2.2.1, puis ai compilé pour tester un projet que j'avais fait pour la 2.2.1, qui s'est installé sur le device (iPhone) sans problème (après avoir installé le certificat et sa clé privée et le provisionning profile).

    Puis j'ai à  la suite installé le iPhone SDK 3.0àŸ5 (et ai fait passer le même iPhone en OS 3.0àŸ5 aussi), et là , autant je peux compiler pour le simulateur, autant :
    - Dès que je choisis "Device", il n'arrive à  rien compiler car il essaye d'inclure des fichiers système inexistants... en regardant un peu en fait ce sont des fichiers qu'il essaye d'inclure se croyant sur i386 (d'après les #ifdef...) et non sur processeur armv6 de l'iPhone
    - Dans les menus "active architecture" & co, je n'ai en effet que "i386" et "ppc"... même si je choisis la compilation pour le Device !
    - Impossible de trouver nulle part l'architecture "armv6" dans les menus
    - En plus une fois que j'ai sélectionné "iPhone Device 3.0" à  la place de "iPhone Simulator 3.0" dans le menu... bah "iPhone Simulator 3.0" disparait, ne me laissant que "iPhone Device".... et "Mac OS X"  ??? (alors que sur mon mac perso, pour les projets iPhone j'ai que des SDK iPhones dans le menu, et bien un par version du SDK installé)


    Donc je capte pas ce qu'il me fait comme délire, que je puisse pas choisir autant de SDKs que ce à  quoi j'ai l'habitude, et surtout qu'il se croit sur i386 mm pour le device et du coup foire la compilation sur device >:( Surtout avec la première installation en 2.2.1 ça a marché...
    Bien évidemment j'ai lancé le script de désinstallation (en ligne de commande) des DevTools puis essayé de réinstaller le SDK 3.0... même problème.
    Ce soir j'ai re-désinstallé les DevTools, mis le dossier Developer à  la poubelle... et je verrai demain, mais si vous avez des pistes, je suis super preneur parce que là  ça m'inquiète...
  • AliGatorAliGator Membre, Modérateur
    14:32 modifié #9
    Bon je m'auto-répond parce que ça peut servir à  d'autres :
    - Alors qu'hier soir j'avais désinstallé tous les DevTools et jarté le dossier /Developer
    - Ce matin installation du SDK 2.2.1 dans /Developer puis redémarrage (pour être sûr)
    - Puis installation du SDK 3.0àŸ5 dans /Developer3 puis redémarrage

    Résultat, tout est OK :
    - le Xcode dans /Developer fonctionne et n'a bien que les SDK 2.2.1 et précédents (2.0, 2.1, 2.2) mais pas le SDK 3.0, avec les configurations "simulator" (->i386) comme "device" (->armv6)
    - le Xcode dans /Developer3 fonctionne et a bien le SDK 3.0, et me propose bien les configurations "simulator" (->i386) et "device" (->armv6), et j'ai enfin pu compiler une appli SDK 3.0 et surtout la mettre sur mon device maintenant que les configs (archi arm) sont ok
    - Et tjs dans ce Xcode de /Developer3, si j'appuie sur la touche option en cliquant dans le menu Overview pour choisir le target/platform/sdk/archi, j'ai bien toutes les possibilités (et pas que les choix SDK 3.0)  :o






    Par contre j'ai renommé du coup mes dossiers pour voir : j'ai renommé /Developer en /Developer221 et laissé /Developer3 tel quel (donc je n'ai plus de dossier nommé "/Developer" tout court) et... ça continue apparemment de fonctionner (alors que je croyais que même si on pouvait choisir un emplacement lors de l'install, certains trucs étaient obligatoirement installés dans /Developer quand même ?)

    Est-ce gênant du coup de ne plus avoir de dossier nommé "/Developer" ? Dans le PDF ReadMe fournis sur l'image disque d'install du SDK ils disent que par exemple les "System Tools" sont obligatoirement installés dans /Developer, même si on choisit un autre emplacement pour les "Developer Tools Essentials" et le reste... Et c'est vrai que dans /Developer3/Applications/Performance Tools/ j'ai pas de dossier CHUD par exemple... mais bon
    Vu mes déboires j'hésite à  renommer /Developer3 en /Developer et relancer l'installeur du SDK3.0, j'ai peur qu'il me recasse tout...?
  • muqaddarmuqaddar Administrateur
    14:32 modifié #10
    Désolé j'ai personnellement pas pu encore installer le SDK 3.0... donc je ne pouvais essayer de répondre. ;-) Normalement j'aurais les accès cette semaine.
  • muqaddarmuqaddar Administrateur
    14:32 modifié #11
    Me voilà  sur le SDK 3.0.

    Tout marche à  merveille.
    Je compile donc en 3.0 sur le simulateur ou en 2.2.1 sur le device.

    Et je n'ai qu'un seul dossier Developer Ali...

    En passant au 3, je n'ai eu qu'un seul warning sur une méthode deprecated.
  • AliGatorAliGator Membre, Modérateur
    14:32 modifié #12
    Et je parierai que ton warning, c'est sur la propriété "text" des UITableViewCells :) non ?

    Oui au fait j'ai oublié de vous tenir au courant, mais j'ai fini par prendre mon courage à  2 mains et j'ai osé le test :

    1) Renommer mes dossiers en /Developer221 et /Developer3 et ne plus avoir de /Developer --> ça marchait (mais j'ai noté que dans /Developer3 je n'avais pas les CHUD et autres Performance Tools, normal vu ce qui est dit dans le PDF et la procédure que j'ai suivie). A ce stade je n'avais donc plus de dossier nommé /Developer

    2) Relancer l'installation du SDK 3.0àŸ5, en laissant l'emplacement par défaut /Developer. Cela m'a donc recréé une 3e installation (une 2e installation du SDK 3.0)... et cette fois-ci elle fonctionnait.

    3) Mis à  la poubelle /Developer221 et /Developer3, redémarré (on sait jamais je sais qu'il y a des .kext qui trainent dans l'installation des DevTools), croisé les doigts, lancé le Xcode.app de /Developer, compilé en 2.2.1 et en 3.0 pour le Device... aucun pb, j'avais bien i386 pour Simulator et armv6 pour Device... ouff

    4) Vidé la corbeille, redémarré again, prié o:) , refait le test de lancer Xcode et compiler pour divers SDK et architectures/target... et ça marche.


    Ouf ! Donc je sais pas ce qui a cafouillé avec mon installation, mais bon maintenant je suis retombé sur mes pieds, avec un unique dossier /Developer et la possibilité de compiler pour le SDK 3.0 comme les SDK 2.x, pour Simulateur comme pour Device, et tout fonctionne  <3
  • muqaddarmuqaddar Administrateur
    14:32 modifié #13
    dans 1242851421:

    Et je parierai que ton warning, c'est sur la propriété "text" des UITableViewCells :) non ?


    Bingo ! T'es trop fort !
    Faut la remplacer par quoi (je suis pas encore allé voir la doc là -dessus, mais si t'as la réponse...) ?

    Ravi que t'aies réglé tes problèmes.
  • AliGatorAliGator Membre, Modérateur
    14:32 modifié #14
    Bah... c'est écrit dans la doc :P
    text

    The text of the cell. (Deprecated. Use the [tt]textLabel[/tt] and [tt]detailTextLabel[/tt] properties instead.)

    [tt]@property(nonatomic, copy) NSString *text[/tt]
    Je le sais car la seule appli 2.2.1 que j'ai essayé de compiler avec le SDK 3.0 pour voir si elle passait avait une UITableView et j'ai eu ce warning, donc je suis allé voir par curiosité (mais bon, j'ai pas changé mon code qui n'a pas pour vocation de tourner tout de suite sur 3.0, c'était juste pour voir)
  • muqaddarmuqaddar Administrateur
    mai 2009 modifié #15
    dans 1242855151:

    Bah... c'est écrit dans la doc :P
    text

    The text of the cell. (Deprecated. Use the [tt]textLabel[/tt] and [tt]detailTextLabel[/tt] properties instead.)

    [tt]@property(nonatomic, copy) NSString *text[/tt]
    Je le sais car la seule appli 2.2.1 que j'ai essayé de compiler avec le SDK 3.0 pour voir si elle passait avait une UITableView et j'ai eu ce warning, donc je suis allé voir par curiosité (mais bon, j'ai pas changé mon code qui n'a pas pour vocation de tourner tout de suite sur 3.0, c'était juste pour voir)


    Justement j'ai fait exprès de poser la question parce que par exemple, dans la doc 3.0, il est écrit en rouge dans la doc de UITableViewCell :

    – initWithFrame:reuseIdentifier: Deprecated in iPhone OS 3.0

    et aucun warning ni erreur quand je compile pour le 3.0 alors que j'en ai 10 dans mon projet ! (j'espère qu'on peut parler de cela librement car ça ne concerne pas les nouvelles fonctionnalités)
  • AliGatorAliGator Membre, Modérateur
    14:32 modifié #16
    Ah oui alors ça en effet par contre c'est bizarre qu'il ne te mette pas de warning... peut-être vérifier que le niveau de warnings réglé pour ta compilation est suffisamment important ?
    En effet normalement Apple utilise des constantes #define, justement quand on regarde la définition dans les headers de l'iPhone SDK 3.0 de cette méthode, on voit :
    - (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);
    
    et de fil en aiguille au final ça devrait être résolu par le précompilateur en
    #define __AVAILABILITY_INTERNAL_DEPRECATED&nbsp; &nbsp; &nbsp; &nbsp;  __attribute__((deprecated))
    
    donc positionner l'attribut [tt]__attribute__((deprecated))[/tt] normalement pris en compte par gcc. Reste à  savoir s'il n'y a pas une option pour ignorer ces attributs et les warnings associés... ou pas, tout comme on peut régler le "niveau" de warning. J'ai pas cherché encore (pas le temps là ) mais ça serait intéressant de creuser.
  • muqaddarmuqaddar Administrateur
    14:32 modifié #17
    Je continue sur ce sujet.

    Je n'ai pas trouvé sur le site ADC la meilleure méthode pour créer des conditions en fonctions de l'OS utilisé, ou plutôt de la version utilisée.

    Je cherche un truc du genre :

    #if TARGET_OS_IPHONE_30
    


    Par exemple, j'ai un bouton à  créer avec des méthodes deprecated :

    - button.font n'existe plus en 3.0
    - button.titleLabel.font le remplace

    Comment récupérer la version de l'OS, que ce soit avec le simulateur ou le device ?
    Je pensais à  autre chose que : [UIDevice systemVersion] ...

  • AliGatorAliGator Membre, Modérateur
    14:32 modifié #18
    Regarde dans /Developer/Platform/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include/AvailabilityInternal.h il devrait y avoir de quoi faire.

    Par exemple [tt]__IPHONE_3_0[/tt] est défini dans ce header du SDK 3.0 alors qu'il n'est pas défini dans .../SDKs/iPhoneOS2.2.1.sdk/...

    Après je sais pas s'il y a des macros "plus officielles", mais faut creuser dans les parages.
  • muqaddarmuqaddar Administrateur
    14:32 modifié #19
    Merci Ali, je ne connaissais pas ce fichier.

    J'ai donc fait ceci :
    #ifdef __IPHONE_3_0<br />		button.titleLabel.font = [UIFont systemFontOfSize:13.0];<br />	#else<br />		button.font = [UIFont systemFontOfSize:13.0];<br />	#endif
    


    Cela semble fonctionner sans problème, et devrait m'assurer compatibilité avec les prochains SDK 3.x également.
  • DrakenDraken Membre
    14:32 modifié #20
    J'ai un problème non pas avec le SDK 3.0, mais avec la bêta d'iTunes 8.2 livrée avec le SDK.

    J'ai un problème curieux avec la bêta d'iTunes 8.2 livrée avec le SDK 3.0. Je l'ai téléchargé et installé pour mettre l'OS 3.0 sur mon iTouch. Parfait, rien à  redire.

    Ensuite j'ai dus reformater mon disque dur à  la suite d'un problème. Heureusement j'avais une copie du SDK 3.0 et d'iTunes 8.2 sur une clé USB. Mais surprise.. iTunes 8.2 ne fonctionne plus !

    Au lancement, il affiche "L'application iTunes n'a pas pu être ouverte. Mémoire disponible insuffisante.".

    Je l'ai re-chargé à  partir du site d'Apple, sans aucun changement. Toujours ce message d'erreur au lancement !

    Avez-vous une suggestion sur la manière de régler ce désagrément ?




  • DrakenDraken Membre
    14:32 modifié #21
    Problème résolu. L'iTunes 8.2 est en ligne depuis ce matin, et fonctionne bien. Fini les bugs de la version bêta. Ouf !


  • muqaddarmuqaddar Administrateur
    14:32 modifié #22
    OK, merci pour l'info.

    Pour ma part, je me pose cette petite question : quand on ajoute des frameworks à  son projet (quartzCore par exemple), on peut ajouter la version 2.2.1 ou 3.0... pour ma part je reste en 2.2.1 pour la compatibilité, même quand je lance la compil en 3.0 dans le simulateur. Il en est de même avec sqliteLib par exemple, que je vais chercher dans le SDK 2.2.1 et non 3.0.

    Je pense avoir bon ?!
  • AliGatorAliGator Membre, Modérateur
    14:32 modifié #23
    Une fois le framework ajouté à  ton projet, si tu fais un Pomme-I sur ledit framework dans ton panneau "Groups & Files" à  gauche, tu peux choisir le type de chemin d'accès pour ton framework.
    Soit tu mets un chemin d'accès absolu et du coup il ira toujours chercher le même framework (celui du SDK 2.2.1 par exemple, même si tu compiles pour la 3.0), soit tu mets un chemin d'accès relatif au "Current SDK" et il ira chercher le 2.2.1 quand tu compiles en 2.2.1, et le 3.0 quand tu compiles pour la 3.0.
  • muqaddarmuqaddar Administrateur
    14:32 modifié #24
    Merci Ali, je ne connaissais pas ces infos...
  • muqaddarmuqaddar Administrateur
    14:32 modifié #25
    Sinon, une bonne petite nouveauté qui a causé des bidouilles quand on était en 2.2.1 : on peut définir un backgroundColor sur une tableViewCell dans une UITableViewGrouped... et ça marche (pas comme avant).
  • Nebuchad34Nebuchad34 Membre
    14:32 modifié #26
    Grrrr, je suis en train de m'arracher les cheveux.

    Je viens d'activer mon iPhone Dev Program.
    J'ai donc installé le SDK 3.0 et remplacé les methodes deprecated par les nouvelles. Jusque là  tout va bien.

    Mon problème, c'est une "EXC_BAD_ACCESS" error qui intervient soudainement alors que tout marchait bien en 2.0, et le NSZombieEnabled ne me donne rien...

    En fait, je présent une view controller avec une méthode de type

    - (void)foo {
    MyViewController *controller = [[MyViewController alloc] initWithNib bla bla...];
    controller.delegate = self;
    [self presentModalViewController:controller animated:YES];
    [controller release];
    }

    Mon View Controller appelle son delegate quand il a fait ce qu'il devait faire, et dans la méthode delegate, self fait donc :
    [self removeModalViewController];

    Et là , si je fait un deuxième appel à  Foo, et bien ça crashe avec un EXC_BAD_EXCESS ! Et je ne comprends vraiment pas pourquoi !.

    Si quelqu'un a une idée, je suis preneur.
    J'ai trouvé plein de références à  ce probleme en cherchant sur google, mais je n'ai trouvé aucune solution...
  • muqaddarmuqaddar Administrateur
    14:32 modifié #27
    J'ai pas tout compris sur "l'ordre" de ton code... pour t'aider.
    Tu dois appeler une méthode sur un objet releasé ou pas instancié.

    Tu dis que le même code marche sur l'OS 2.2 ?
  • schlumschlum Membre
    14:32 modifié #28
    C'est pas parce que ça " marchait bien " que c'était propre... Il y a sans doute un problème mémoire quelque part qui était " endormi " dans le 2.0.
  • Nebuchad34Nebuchad34 Membre
    14:32 modifié #29
    En fait c'est plus tordu que ça.

    Le principe c'est que j'appui sur un bouton " +" pour ajouter un nouvel élément à  ma table view. Pour ce faire, le "+" associé à  ma fonction foo lance un modal qui permet d'entrer les propriétés du nouvel objet. Quand j'en ai fini, je peux soit valider et revenir à  ma table view. (et là  ça marche), soit valider et immédiatement générer un nouveau modal view (pour éviter à  l'utilisateur de répéter plusieurs opérations). Dans mon code, je ne fait que faire un appel à  foo  directement après avoir  fait appel à  [self removeModalViewController].

    La différence avec une opération entièrement manuelle, c'est le temps nécessaire à  la disparition du modal view controller de l'écran (je sais pas si je suis clair...)

    En gros, si je le fait "manuellement" ça marche. Si j'évite à  l'utilisateur de le faire en rechargement dans le code un nouveua modal view et bien ça plante... Le code appellé est le même, mais je pense qu'au niveau de la mémoire le fait que mon controller n'est pas encore disparu quand j'en appelle une nouvelle instance change tout...

    Je vais donc essayer de procéder autrement... en espérant que vous aurez à  moitié compris ce que j'essaye d'expliquer (pas évident).
    ;)

  • Nebuchad34Nebuchad34 Membre
    14:32 modifié #30
    Voilà , problème résolu.
    Au lieu de supprimer mon view controller pour en créer un autre tout de suite après, je réutilise le même. C'est tout de même plus logique.
    J'y ai en plus ajouté un petit effet de "CurlDown" qui s'y prête très bien.
  • bnkbnk Membre
    juin 2009 modifié #31
    Une question.. en étant passé au SDK3, j'ai la possibilité de compiler pour l'OS 3 et aussi pour l'OS 2.2.1.

    ça veut dire que mon simulateur simule l'iPhone vidéo.
    Si mon application compilée en 2.2.1 n'a pas de bugs et qu'elle n'utilise pas les fonctionnalités de l'OS3; il n'y a pas vraiment d'intérêt à  résoudre les bugs d'affichage qui apparaissent si on compile en v3.

    Soumettre une appli en 2.2.1 ne devrait donc pas poser de problèmes pour les iPhone vidéo si il n'y en a pas sous le simulateur 3 lorsqu'on compile en 2.2.1.

    Quelqu'un peut-il valider ce raisonnement et confirmer que j'ai mis du temps à  me réveiller? :p

    EDIT: en me relisant ça me parait évident ;)
Connectez-vous ou Inscrivez-vous pour répondre.