mercredi 15 septembre 2010

Envoyer sur son iphone ses applications développées, sous Xcode, sans avoir de certificat Apple

Introduction :

Vous venez de réaliser votre application sous xcode et vous etes impatient de la tester sur votre iphone seulement au moment de la transferer ce message apparait : "Code Sign error: The identity 'iPhone Developer' doesn't match any valid certificate/private key pair in the default keychain"

Et oui, pour pouvoir transférer ses applications sur son iphone il faut faire partie du iPhone Developer Program et donc payer 79 €  l'année (rien que ça...).

Mais il existe une solution (pour les iphones jailbreakés) qui consiste à créer son propre certificat iphone. Il faut ensuite certifier son application et la transferer via "ssh" sur son iphone.

Pas de panique voici la démarche à suivre  ;-)

Pré-requis :

- Un iphone jailbreaké (j'utilise la version 3.1.3).
- Un mac ou un PC avec OSX dessus :-) (prochain tuto).
- Xcode (j'utilise la version 3.2.1)

1ère étape  :

On va commencer par créer un certificat. Pour cela rendez vous dans Applications puis Utilitaires. Lancez Trousseau d'accès. 
A partir du menu Trousseau d'accès (en haut à gauche) choisir "Assistant de certification" puis "Créer un certificat..."
Une fenetre "Assistant de certification" s'ouvre alors. Dans le champ "Nom" entrez le nom de certificat que vous voulez mais retenez le. Dans "Type d'identité" sélectionnez "Racine auto-signé" et dans "Type de certificat" "Signature de code".
Cochez "Me laisser ignorer les réglages par défaut" et faites continuer. Une fentre d'avertissement s'ouvre choisissez "Continuer".
Dans "Numéro de série" entrez n'importe quel nombre ou chiffre et dans "Période de la validité" laissez 365. Faites ensuite "Continuer" jusqu'à "Terminer".

2ème étape :

Nous allons maintenant effectuer quelques réglages sous Xcode. Ne branchez pas l'iphone pour le moment.
Ouvez votre projet puis dans "Project" choisissez "Edit Project Settings". 
Une fenêtre s'ouvre. Dans l'onglet Build puis "Configuration" sélectionnez dans le menu déroulant "All Configurations". Toujours dans l'onglet Build, se rendre dans la partie "Code Signing" et dans "Code Signing Identity" sélectionner Don't Code Sign". Faire de même pour "Any iPhone OS Device" qui se situe juste en dessous.
Fermez enfin la fenêtre.
Dans Overview, sélectionnez dans le menu déroulant  iPhone Simulator avec votre version et "Release" ou "Debug" cela n'a pas d'importance, il faudra juste retenir le mode que vous choisissez.
Exécutez ensuite le programme en faisant Build and Run, le simulateur se lance (Un dossier "Release-iphoneos" ou "Debug-iphoneos" a été crée dans le dossier build de votre programme).
Quittez le simulateur et retournez dans "Overview" sélectionnez "iPhone Device" avec votre version et exécuter le programme.
Normalement il devrait y avoir build succeeded et un message "Error Starting Executable No provisionned iPhone OS device connected" c'est normal vu que l'iPhone n'est pas branché.
Quittez Xcode.

3ème étape :

Sur votre iPhone, installez "Openssh" (si ce n'est pas deja fait), pour cela lancez Cydia et dans l'onglet recherche tapez openssh puis faites "Installer" en haut à gauche.
Connectez ensuite l'iphone au même réseau wifi que votre ordinateur : allez dans Réglages Wifi et sélectionnez le réseau en nottant l'adresse IP.

4ème étape :

Ouvrir le Terminal.
Entrez les commandes suivantes :
platform=/Developer/Platforms/iPhoneOS.platform
allocate=${platform}/Developer/usr/bin/codesign_allocate
export CODESIGN_ALLOCATE=${allocate}

Vous pouvez désormais signer votre code en entrant cette commande:
codesign -fs "nom de votre certificat" votre_projet/build/Release-iphoneos ou Debug-iphoneos/votre_projet.app/votre_projet

5ème étape :

Dans le dossier /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOSvotre_version.sdk se trouve un fichier SDKSettings.plist. Nous allons le modifier.
Ouvrir le terminal et tapez la commande suivante :
sudo nano /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOSvotre_version.sdk/SDKSettings.plist

Dans la partie "DefaultProperties" mettre CODE_SIGNING_REQUIRED à NO et AD_HOC_CODE_SIGNING_ALLOWED à NO et vérifiez que CODE_SIGNING_ENTITLEMENTS est bien vide.
Vous devriez avoir ceci :

<key>AD_HOC_CODE_SIGNING_ALLOWED</key>
          <string>NO</string>
          <key>CODE_SIGNING_REQUIRED</key>
          <string>NO</string>
          <key>CODE_SIGN_ENTITLEMENTS</key>
           <string></string>

6ème étape :

Pour envoyer le programme sur l'iphone grâce au ssh il faut entrer cette commande:
scp -r programme.app root@ip_de_iphone_notée_précedement:/Applications
Il est demandé d'entrer un mot de passe, le mot de passe par défaut est : "alpine".


Il ne vous reste plus qu'à redémarer ou "respring" (si vous avez SBsettings) votre iphone pour voir apparaitre votre application. :-)

Aucun commentaire:

Enregistrer un commentaire