Développer une application iOS entièrement sous Windows (app hybride avec PhoneGap)

E
ERICSTAMANT
Développer une application iOS entièrement sous Windows (app hybride avec PhoneGap)

Dans cet article, je partage mon expérience sur le développement d'une application mobile avec PhoneGap, plus précisément sur le côté “Développement iOS”.

J'ai toujours eu de la difficulté à aimer les produits Apple. Ils créent leurs produits en fonction de créer une dépendance chez les utilisateurs. Dès que tu as du Apple, il te faut du Apple pour tout. Ils ne permettent pas aux gens une pleine liberté sur leur choix. Je ne dénigre pas les utilisateurs de Apple, c'est vrai qu'ils fournissent des produits de qualité, mais j'aime avoir le choix et le contrôle sur ce que je fais.

J'ai été initié au développement d'application mobile dans les derniers mois, et il en va de soi, j'ai dû développer une application iOS, en parallèle à une app Android, d'où le choix de PhoneGap.

Je travaille avec Linux et Windows, mais pas avec Apple. Je n'ai jamais été attiré vers leurs produits.

Pour créer une App iOS, il faut ceci :

Ça prend un iPhone, parce qu'il faut premièrement une double authentification, associé à un iPhone, pour créer et se connecter à un compte Apple. Ensuite, pour créer le certificat de l'application iOS, il faut le device ID de son iPhone…

Mais le pire dans tout ça, pour “soumettre” une application sur le App Store, il faut un logiciel uniquement disponible sur un Mac (xCode)! Même chose pour simplement tester son application avec TestFlight.

J'ai alors découvert que le “freak control” qui s'applique à leur produits, l'est encore plus quand il s'agit de développement sur leurs plateformes.

Note : PhoneGap propose une App Android pour tester en temps réel sur notre device. Apple n'autorise pas ceci. J'ai aperçu une possibilité de faire un clone d'une App iOS PhoneGap, d'en créer une app pour soi-même, de l'envoyer sur TestFlight et l'utiliser ensuite pour connecter à son PC comme avec Android, mais ce n'est pas encore testé de mon côté.

Enfin, lors du développement de cette application, j'ai dû interagir avec plusieurs composantes d'un téléphone, dont la caméra, la gestion des fichiers et les sons. Apple impose beaucoup plus de restriction, donc beaucoup plus de tests. J'ai donc tenté de trouver la façon la plus optimale de travailler.

La création d'une app iOS sous windows, étape par étape :

La signature de l'application

Une app iOS a besoin d'une signature cryptée, comme un certificat SSL, pour être soumise au App Store, ainsi qu'un certificat d'identité du développeur en question. Je détaille ici toute la procédure pour réaliser cela sous Windows.

Suite à la création d'un compte Apple Developer, veuillez suivre ces étapes :

1 - Rendez-vous à cette adresse pour créer/enregistrer le ID de votre APP :

https://developer.apple.com/account/ios/identifier/bundle

Appuyez sur le + et suivez les étapes. Vous devez renseigner le nom de votre App, le ID (vous pouvez indiquer un reverse domaine (ex: com.votresite.votreapp). Puis, cochez les options désirées.

2 - Rendez-vous ensuite ici, pour enregistrer votre device (votre iPhone) :

https://developer.apple.com/account/ios/device/

Pour trouver le UDID, vous devez ouvrir iTunes sur votre PC et brancher votre téléphone.

Voici le lien que j'avais en bookmark pour la procédure : https://www.innerfence.com/howto/find-iphone-unique-device-identifier-udid

3 - Vous devez ensuite créer un certificat pour votre App, ici :

https://developer.apple.com/account/ios/certificate/development

Attention! Bien que votre App soit en mode “Développement”, vous devez choisir un certificat de production! Le certificat de développement est uniquement utile si vous utilisez un Mac avec xCode et que vous branchiez votre téléphone à votre ordinateur pour tester votre App. Pour soumettre à TestFlight, il faut créer un certificat de Production.

Ici, le certificat permettra de générer un fichier .p12, pour le build sur PhoneGap.

Première étape, on crée une clé pour générer le CSR. Pour ce faire, ouvrez GitBash ou autre logiciel de commande semblable. Rendez-vous dans un dossier et collez cette commande :

openssl genrsa -out ios-dev.key 2048

Ensuite, exécutez cette commande, et remplissez les renseignements du certificat :

openssl req -new -key ios-dev.key -out ios-dev.csr

Retournez sur le portail de Apple, suivez les étapes pour la création du certificat et uploader le .csr que vous venez de générer. Enfin, téléchargez le fichier “ios_distribution.cer” et placez-le dans le même dossier que votre clé et CSR.

Retournez dans votre interface de commande et exécutez les commandes suivantes pour générer votre fichier .p12.

openssl x509 -in ios_distribution.cer -inform DER -out developer_identity.pem -outform PEM

winpty openssl pkcs12 -export -inkey ios-dev.key -in developer_identity.pem -out iphone_dev.p12

ENSUITE

Retournez encore une fois sur le portail développeur de Apple, à cette adresse :

https://developer.apple.com/account/ios/profile/production

Appuyez sur le (+) et suivez les étapes. Puis, téléchargez le provisionning profile.

Vous avez donc maintenant en votre possession votre .p12 et votre provisionning profile. Ces 2 fichiers vous seront demandés pour généré le build (.ipa) sur l'outil de build de PhoneGap.

Soumettre sur AppStore pour tester avec TestFlight

Une fois que vous avez votre .IPA, vous voulez l'envoyer sur TestFlight afin de tester votre application sur votre iPhone, mais également d'autres appareils, tel que ceux de vos clients.

Rendez-vous donc ici :

https://developer.apple.com/account/

Appuyez sur "App Store Connect", et créez une entrée pour votre App.

Là, vous êtes confronté à un gros problème :

Pour envoyer votre app sur les serveurs de Apple, ça vous prend xCode sur un MAC. Zut! Je viens de développer mon App, elle fonctionne bien sur Android et dans mon Browser, mais je dois tester sur iPhone!

J'ai alors cherché, comment faire. J'ai envisagé l'achat d'un Mac, mais ça ne m'intéressait vraiment.

J'ai loué un Mac pour m'y connecter à distance (macincloud)! Non, j'aime pas ça, c'est lent, et ça va être du “gossage” pour gérer tout ça.

Finalement, j'ai trouvé un logiciel : AppUploader. Environ 50$ par années, très utile. Vous lancez l'exécutable, puis vous vous connectez à votre compte Apple. À gauche, choisissez “Single IPA”, sélectionnez votre .ipa et l'upload vers le serveur d'Apple s'effectue.

Ensuite, vous attendez… Ça peut être long, vous recevrez un courriel lorsque le processus sera complété.

Suite à la réception du courriel, vous retournez sur App Store Connect, vous remplissez le formulaire d'attestation, et vous attendez encore.. Vous allez recevoir un courriel d'invitation pour tester avec TestFlight.

Vous téléchargez l'app TestFlight sur votre iPhone et entrez le code d'invitation.

Ho! Votre app ne fonctionne pas bien!

Appliquez les correctifs et recommencez le processus!

Laissez-moi vous dire que ce processus est très long, vraiment très long et redondant. Vous pouvez être chanceux et que votre app soit correcte du premier coup, mais en dev, on doit dans la majorité des cas tester et débugger.

J'ai donc trouvé une façon d'éliminer quelques points, et d'avoir à compléter seulement le point #1 et #2.

Simplifier le testing et tester sur plein de device en même temps!

Ici, j'explique une solution à 2 problèmatiques.

1 - Le processus pour tester notre application sous Windows est très compliqué et très long. Nous voulons que ce soit le plus simple et le plus rapide possible.

2 - Votre app semble fonctionner sur votre iPhone, mais pas celui de votre client. Sous Windows, pas possible de tester la compatibilité avec différents appareils et différents OS.

J'ai testé différentes choses pour finalement trouver Kobiton. Un 50$ usd mensuel très bien invertis. Cet outil nous permet de simplement téléverser notre .ipa ou .apk, et de tester ensuite avec une grande variété de device et de OS différents : iPhone 5 à 10, plusieurs types d'Android, tablettes, mais également sur différentes versions du système d'exploitation.

PS : Il y a un trial, mais ce ne sont pas toutes les devices qui sont disponibles.