Aller au contenu


XCode et SDK 2.2: compilation et debug sur un iPhone jailbreaké

Si votre iPhone est jailbreaké, il faudra ruser un peu pour pouvoir compiler directement vos applis créées avec XCode vers votre téléphone (Build&Go).  Cette fonctionnalité est tout de même super pratique, étant donné qu’elle permet également l’affichage de la console, ou encore le debug.  Alors après pas mal de recherches, et en complément de mon précédent post traitant de la compilation des applis sans provisioning profile valide, voila la méthode qui a fonctionné pour moi, en utilisant le SDK 2.2, ainsi qu’un iPhone jailbreaké avec firmware 2.2:

Sur l’iPhone, après l’avoir débranché du Mac

1. dans Cydia, ajoutez la source http://www.iphone.org.hk/apt/
2. Installez ensuite le MobileInstallation Patch 2.2 qui se trouve dans la rubrique ‘Tweaks’
3. Téléchargez une nouvelle application gratuite sur l’Appstore (avec l’iPhone, pas de synchro iTunes, important!), puis lancez-la et quittez
4. Redémarrez votre téléphone

Sur le Mac

1. Créez un certificat self-signed (la procédure dispo chez Apple), appelez le par ex ‘iPhone Developer’
2. Renseignez ce certificat dans votre XCode, dans les paramètres de compilation de votre projet: Code Signing > Code Signing Identity
3. Editez le fichier Info.plist de votre projet en cours, et rajoutez-y la paire key/value suivante:

<key>SignerIdentity</key>
<string>Apple iPhone OS Application Signing</string>

4. Sauvegardez et éditez le fichier suivant: /Developer/Platforms/iPhoneOS.platform/Info.plist
ajoutez-y les clés PROVISIONING_PROFILE_ALLOWED et PROVISIONING_PROFILE_REQUIRED:

<key>NATIVE_ARCH</key>
<string>armv6</string>
<key>PLIST_FILE_OUTPUT_FORMAT</key>
<string>binary</string>
<key>PROVISIONING_PROFILE_ALLOWED</key>
<string>NO</string>
<key>PROVISIONING_PROFILE_REQUIRED</key>
<string>NO</string>
<key>SDKROOT</key>
<string>iphoneos2.2</string>

5. redémarrez XCode, puis rebranchez l’iPhone sur le Mac…

Voila, ca devrait être bon, vous pouvez tenter un Build&Go depuis le Xcode!

Merci à tous ces gens (javacom, …) qui oeuvrent pour trouver ces solutions :)

Posté dans développement, iPhone. Tags , , .

35 commentaire(s)

  1. chaufmaurice dit

    cela m’intéresse, mais je ne suis pas sûr d’un détail:

    Est-ce que cette astuce me permettrait de créer, compiler (à partir de la SDK gratuite d’Apple) et transférer des applications sur mon iPhone jailbreaké ?

    Mon but est de tester sur mon iPhone une appli que j’ai créé à partir de la SDK gratuite. Est-ce possible ?

    merci

  2. C’est tout à fait le but de cet article :) Grâce à cette méthode, il est possible de compiler des applications développées avec le SDK, via XCode, directement vers l’iPhone, afin de pouvoir tester et débugger. Cela, sans avoir besoin de s’affilier au programme Apple iPhone Developer, qui coûte $100. Mais bon, comme je l’ai déjà dit dans un article précédent, payer $100 pour tester sur son propre téléphone…

  3. chaufmaurice dit

    nickel alors !!

    merci bien bkill

  4. texashd dit

    Bonjour,

    J’ai configuré le projet HelloWorld comme décrit ci-dessous.

    Lorsque je lance « Build and Go » j’ai l’erreur suivante :
    Command /usr/bin/codesign failed with exit code 1
    /…/Release-iphoneos/HelloWorld.app: Resource busy

    J’utilise Mac OS X Version 10.5.6, Xcode 3.1.1 et compile pour l’iPhone OS 2.1.

    Est-ce que cette procédure fonctionne avec un iPhone jailbreaké avec firmware 2.1?
    Si oui, auriez-vous une idée d’où peu provenir mon erreur.

    Rq: Dans le trousseau d’accès le certificat créé (My Name) affiche l’erreur suivante: « Ce certificat racine n’est pas approuvé » Est-ce normal ?

    Merci

  5. texashd dit

    Après avoir placé l’application sur le disque dur du Mac et non sur un disque réseau, la compilation fonctionne correctement.
    Merci Encore.

  6. bkill dit

    @texashd: parfait :) concernant le certificat qui affiche le message « Ce certificat racine n’est pas approuvé », c’est tout à fait normal étant donné que celui-ci a été créé par vous, et n’a pas ensuite été validé par une autorité telle qu’Apple. Ceci dit, il reste tout à fait valable dans le cas présent!

  7. Guepard dit

    Hello,
    merci pour ce tuto que j’ai fort envie d’essayer.
    Mais j’ai une question avant :
    On ne peut plus synchroniser avec itunes après avoir réalisé cette bidouille ?

    Merci

  8. bkill dit

    @Guepard: si, tu peux. Cette manip n’entraîne aucun problème de synchronisation avec iTunes par la suite.

  9. Guepard dit

    Parfait, merci pour ta réponse rapide ! :-) Je vais tester ça.
    Bonne continuation

  10. Extra, ça marche parfaitement ! 😀
    Enorme remerciement bkil !!!

  11. Je me met en device – 2.2.1 | Release il me sort une erreur :

    CodeSign error: a valid provisioning profile is required for product type ‘Application’ in SDK ‘Device – iPhone OS 2.2.1’

    Vous en pensez quoi ?

  12. @Karim: j’aurai besoin de plus de détails pour comprendre le problème :) As-tu déjà fait cette opération par le passé avec la version 2.2 (pour laquelle cet article était écrit) ? Dans ce cas, il faudra également mettre à jour le MobileInstallation patch qui a été adapté pour la nouvelle version. En tout cas, la manip de modif du fichier /Developer/Platforms/iPhoneOS.platform/Info.plist fonctionne encore avec la 2.2.1, il ne faut juste pas oublier de redémarrer XCode après la modif. Peut-être également que la config « release » pose problème, si tu repasses en « debug », ca donne quoi?

  13. Rafael dit

    J’ai un nouveau macbook alu unibody, avec un iphone jailbreaké 2.2.1 et ça a marché comme sur des roulettes. Merci 1000 fois !

  14. iNino dit

    Salut!

    – J’ai Installé le SDK 2.2.1 et j’ai un iphone 2G en 2.2.
    -J’ai fait un petit programme , le test marche sur mac mais quand je choisis de compiler sur le Device 2.2 (Debug/Release) , ile me mit cette erreur :
    CodeSign error: a valid provisioning profile is required for product type ‘Application’ in SDK ‘Device – iPhone OS 2.2

  15. iNino dit

    Que veut dire :
    CodeSign warning: provisioning is not applicable for product type ‘Application’ in SDK ‘Device – iPhone OS 2.2’; ignoring…

    Et aussi:
    Command /Developer/user/bin/distcc failed with exit code 255

  16. salut à vous,

    Bravo pour cet exploit qui à l’air fort utile, cependant j’ai une petite question, est il possible de compiler (avec le SDK apple officiel) une application sur l’iphone tout en étant sous linux ? En gros on écrit le code sous linux, puis on le compile grace à l’iphone, est ce possible ?

  17. bkill dit

    @iNino: est-ce que ton second commentaire veut dire que tu as réussi à mettre en place la compilation vers ton iPhone jailbreaké? Ce warning du CodeSign s’affiche simplement parce que le provisioning est désactivé dans le XML (PROVISIONING_PROFILE_ALLOWED et PROVISIONING_PROFILE_REQUIRED), alors que les options de compilations disent qu’il faut signer. Le message indique simplement que ce n’est pas nécessaire (d’où le ‘ignoring’ en fin)

  18. bkill dit

    @Human-Behind: la compilation avec le SDK officiel ne fonctionne que sur Mac.

  19. jacques dit

    Salut bkill !
    Merci tout d’abord de proposer cet article sur le net, ca m’aide beaucoup !
    J’ai une petite question : est ce que c’est le meme principe pour un ipod touch NON jailbreaké ( 2.2.1) ?
    Car je compile une application genre « helloworld » avec ( Device -2.2.1| Debug) et j’obtiens un warning ( CodeSign Warning : provisioning is nont applicable for product type ‘Application’ in SDK ‘Device – iphone 2 2.2.1 ignoring) donc ca n’a pas l’air problématique…
    Par contre, j’obtiens aussi une erreur : Codesign error : no certificate for identifier « iPhone Developper » was found in your keychain…

    merci beaucoup pour un éventuel futur coup de main :)
    je continu mes reches et repasseraici si j’ai résolu mon probleme !

  20. bkill dit

    @jacques: si je ne me trompe, le principe est identique pour un iPod: tu dois donc le jailbreaker vu qu’il faut y installer le MobileInstallation Patch (via Cydia)…

  21. jacques dit

    merci pour la réponse :)

    et c’est vraiment obligatoire de le jailbreaké ?
    merci!

  22. bkill dit

    @jacques: oui :) pour y installer Cydia, le MobileInstallationPatch, ou même pour simplement pouvoir accéder à ton iPod Touch en SSH, il devra être jailbreaké.

  23. jacques dit

    et bien… c’est fait !! :)
    mon iphone est jailbreaké !! donc j’ai mis a jour cydia puis ajouter la source (http://www.iphone.org.hk/apt/) et enfin installé MobileInsallation Patch
    j’ai pas installé une autre application avec l’Appstore, car j’ai besoin d’un login / password que je n’ai pas ! ( car j’ai pas rempli le formulaire où ca demande une carte bancaire, enfin je crois que ca doit etre pour ca..)
    et j’ai toujours « Codesign error : no certificate for identifier “iPhone Developper” was found in your keychain…
     » quand je fais  » Build and go » )
    et pourtant , dans mon mac, j’ai bien le certifiat « iPhone Developer » dans le trousseau d’acces (keychain ?) dans session et système ( j’en ai fait 2 !)
    par contre les 2 certificats ne sont pas approuvés mais dans la mesure où ils sont self signed, ca doit rien changé….

    Un truc qui me chagrine, quand je branche l’ipod, j’ai aucun message qui me demande de l’utiliser pour xcode…

    merci beaucoup pour ton aide :)

  24. jacques dit

    j’ai oublié de préciser que j’avais bien redémarer l’ipod 😉

  25. bkill dit

    @jacques: tu peux te créer un compte iTunes sans carte de crédit en passant par un chemin un peu détourné 😉
    Suis la manip décrite dans le lien de cet article: http://blog.episode-2.com/2008/10/29/comment-se-creer-un-compte-itunes-pour-nimporte-quel-pays/
    Pour ton certificat, tu dis en avoir un nommé ‘iPhone Developer’ et le message d’erreur t’indique comme identifiant ‘iPhone Developper’, avec deux P, peut-être cela vient-il de là ?

  26. jacques dit

    merci pour cette réponse rapide, c’est génial, ca m’embete un peu de monopoliser les commentaires…
    effectivement , j’avais fait une gaffe avec le P mais je l’avais rectifié et ca n’avait rien changé !
    en tout cas, je pense que ca vient bien de xcode ( que mon ipod soit branché ou non , ca fait pareil !)

  27. Rafael dit

    @jacques: je viens d’avoir la même erreur après avoir fait une faute de frappe similaire (iPhone Developer au lieu de iPhone developer). J’allais dans « Edit Project settings » et « Code Signing Identity » avait bien la bonne valeur. Mais quand je suis allé dans « Project »> »Edit Active Target Nomdemonprojet » la valeur « Code Signing Identity » était mauvaise… Je l’ai corrigée et ça a marché.
    J’espère que ça pourra aider.

  28. Falvel dit

    Bonjour, je suis tomber sur ton super tuto, tout d’abord merci.

    Par contre, j’ai un soucis.
    qunad je tente de faire le « build & go » je tombe sur la fameuse erreur : Codesign error: no certificate for identifier « iPhone Developer » was found in your keychain

  29. gabriel dit

    Je sais pas si tu lit encore cette partie de ton blog mais j’ai un petit soucis.
    J’ai un mac sous ppc donc j’ai du faire une manip pour l’installer.
    J’ai donc 2 dossier « plateforms » un sur la racine du DD l’autre dans developer et quand je modifie le info.Plist du plateforms dans developer j’ai CodeSign error: a valid provisioning profile is required for product type ‘Application’ in SDK ‘Device – iPhone OS 2.2
    SI je modifie celui dans la racine j’ai Command /usr/bin/codesign failed with exit code 1
    /…/Release-iphoneos/HelloWorld.app: Resource busy
    Moyen de m’aider vite fait ?
    J’ai un iphone 2.2.1 avec MobileInstallation patch 2.2.1 et j’ai bien mit la ligne dans le info.plist de mon projet et j’ai bien le certificat iPhone Developer

  30. bkill dit

    @Falvel: si tu as bien suivi toute la procédure décrite dans cet article, alors la seule voie que je pourrais proposer est de vérifier la chose suivante:
    accède à ton trousseau d’accès (keychain) puis menu « préférences », puis onglet « certificats », et assure-toi que les deux selectbox (OCSP et CRL) sont sur l’option « désactiver ». En espérant que ca puisse t’aider…

    http://lists.apple.com/archives/Apple-cdsa/2008/Jul/msg00010.html

  31. bkill dit

    @gabriel: je n’ai pas rencontré ce problème personnellement, mais as-tu lu le commentaire de texashd, plus haut? es-tu dans une situation similaire ?

  32. Falvel dit

    C’est déjà désactiver malheureusement :/
    je suis en train de tout vérifier au fur et a mesure.
    j’ai bien le MobileInstallation Patch (pour firmware 2.0 jusqu’a 2.2.1)
    j’ai le firmware 2.2.1
    je viens d’éteindre l’ iphone, apres avoir télécharger un jeu sur l’app store (sans synchro avec le mac)
    pour créer le certif, j’ouvre le trousseau d’accès. j’ajoute un certificat que j’appel ‘iPhone Developer’.
    j’ai bien rajouter les ligne dans les plist.
    je ferme xcode, puis ouvre mon projet (un jeu que j’ai fait en suivant un tuto sur le net : il fonctionne en simulateur)

    par contre c’est peut être la que je me trompe :
    en haut a gauche de la fenetre xCode, je prend : Device 2.2.1 (project setting) en mode Debug

    La j’ai un warning et une erreur.
    le warning : CodeSign warning: provisioning is not applicable for product type ‘Application’ in SDK ‘Device – iPhone OS 2.2.1’; ignoring…

    et l’erreur version longue : cd /Users/nicolas/Documents/Developpement/PTI/Pong
    setenv CODESIGN_ALLOCATE /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
    setenv PATH « /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin »
    /usr/bin/codesign -f -s « iPhone Developer » –resource-rules=/Users/nicolas/Documents/Developpement/PTI/Pong/build/Debug-iphoneos/Pong.app/ResourceRules.plist –entitlements /Users/nicolas/Documents/Developpement/PTI/Pong/build/Pong.build/Debug-iphoneos/Pong.build/Pong.xcent /Users/nicolas/Documents/Developpement/PTI/Pong/build/Debug-iphoneos/Pong.app
    Codesign error: no certificate for identifier « iPhone Developer » was found in your keychain

  33. bkill dit

    @Falvel: question peut-être idiote, mais … peux-tu vérifier que le nom de ton certificat ne comporte pas les quotes autour? iPhone Developer et non ‘iPhone Developer’

  34. gabriel dit

    @bkill : j’ai vu ces post et non mon projet est sur le bureau de mon mac donc rien par rapport au réseau

  35. Falvel dit

    Bonjour,
    Malheureusement non, le nom du certificat ne comporte pas de simple quote :(
    Je crois que je vais abandonner le développement d’application pour iphone/ipod :/

    Encore merci de ton aide.