Apple va permettre la création d’autres stores pour installer des applications de production. Je ne m’étalerais pas plus sur ce sujet ici, c’est encore trop récent, je n’ai pas toutes les informations. La mécanique devrait être assez similaire, avec quelques éléments supplémentaires.
J’ajoute une précision. Quand je dis “l’application expire au bout d’un temps”, c’est à cause des Provisionning Profiles ou d’une limite spécifique au canal de distribution. On peut obtenir une application qui “n’expire jamais” si on pousse des nouvelles versions avant les dates limites.
Descendons d’un cran en profondeur, je vais commencer à utiliser des termes techniques d’Apple. On a vu qu’il y avait beaucoup de possibilités pour installer une application iOS, mais Apple les regroupe selon 4 types de distribution. Ces termes seront utiles pour créer les bons Provisionning Profiles.
J’en profite pour également introduire la notion de Certificate. On va se pencher sur les deux types qui sont intéressants dans notre cas.
À noter qu’il existe ces mêmes types pré-fixés par “iOS” ou “Mac”. C’est la même chose, sauf qu’ils contraignent à leurs plateformes.
Maintenant, entrons dans le vif du sujet, allons dans la profondeur. La page ressources du compte développeur regroupe tous les éléments nécessaires pour distribuer une application. On y retrouve ceux qui sont existants, expirés, et on peut en créer de nouveaux.
Tous ces éléments sont créés sur notre compte développeur, ce qui a deux conséquences. Ils peuvent servir à toutes les applications sous la propriété de ce compte - cool. Les limites de création concernent l’ensemble du compte, ce n’est pas par application - pas cool.
C’est la liste des appareils enregistrés sur notre compte développeur. Il est nécessaire d’ajouter ici l’UUID d’un appareil sur lequel on souhaite installer l’application en direct ou distribuer sur un store de bêta (donc des distributions de type Development et Ad-Hoc).
La limite est de 100 appareils (pour tout le compte !). Je n’ai qu’une seule occasion par an de supprimer des appareils : le mois précédant la date anniversaire de la souscription au Apple Developer Program. Apple nous le rappelle quand on approche de cette période.
Chaque application possède un identifiant unique sous la forme com.example.app qu’il faut enregistrer dans cette section. On y associe également des Capabilities - des autorisations d’utiliser certains services (Push Notifications, HomeKit, Siri, …).
Pour une même application, on peut être amené à créer plusieurs Identifiers. Par exemple pour différencier des environnements (com.example.app et com.example.app.staging). L’intérêt sera de pouvoir installer les deux applications sur un même téléphone.
Dès que l’on veut installer une application sur un appareil ou la distribuer, il faut signer l’archive (le binaire) de l’application. C’est là qu’entre en jeu le certificat. Il indique que cette application provient de notre compte.
En général, chaque développeur crée son certificat de type Development, afin de pouvoir installer l’application en cours de développement sur son appareil. Et il faut au moins générer un certificat de type Distribution pour déployer l’application sur des stores.
Un certificat est lié au compte développeur, et non à une application - un seul certificat de Distribution peut donc signer toutes nos applications. D’ailleurs, on est limité à un maximum de 3 certificats de type Distribution. Il sera intéressant d’en générer un second lorsque l’on s’approche de la date d’expiration du premier. Ou parce que l’on veut le donner à une équipe externe et pouvoir le révoquer facilement sans nous impacter.
Attention, on ne peut télécharger le certificat contenant la clé privée de signature qu'au moment de sa création. La machine qui signe les applications doit avoir le certificat avec la clé privée dans son keychain.
Un certificat expire au bout d'un an. Une application ne se lancera pas si le certificat associé est expiré ou invalide. Il faudra distribuer une nouvelle version avec tous les éléments valides. L’App Store n’est pas concerné par ce problème.
Un profil est la glu qui lie tous les éléments. On associe un Identifier, un Certificate, un type de distribution et on sélectionne des devices. Le profil permettra d’indiquer à l’appareil si l’application peut être installée et à quels services elle a accès.
On en crée autant qu’il y a d’applications, de type de distribution (Development, Ad-Hoc, …) et d’environnement (si on a plusieurs Identifiers). On se retrouve rapidement à en avoir une grande quantité.
Un profil expire au bout d’un an, et devient invalide si le certificat auquel il est associé expire. La machine qui compile l’application doit avoir les bons profils installés.
Une application ne se lancera pas si le profil qui a été installé avec devient expiré ou invalide. Il faudra archiver et distribuer une nouvelle version avec tous les éléments valides. L’App Store n’est pas concerné par ce problème.
Bonus. La clé d’API permet de s’identifier auprès d’Apple pour utiliser des services de l’App Store Connect. Ce sera utile pour les runners d’une CI lorsqu’une commande interagit avec le compte développeur (ex: récupérer un profile) ou avec l’App Store (ex: soumettre une application).
La génération des clés d’API se fait sur l'App Store Connect, onglet Users and Access, et non depuis le compte développeur.
On a tous les ingrédients nécessaires pour faire monter une belle mayonnaise, il n’y a plus qu’à les assembler. Je vais illustrer avec plusieurs scénarios qui peuvent arriver tout le long d’une année.
On enregistre un Identifier pour notre application et on ajoute les différents appareils de l’équipe dans Devices. Chaque développeur génère son Certificate (Development) puis on crée un Provisioning Profile (Development) (associant les appareils de l’équipe et les certificats des développeurs).
Pour pouvoir déployer les incréments sur un store de bêta, on génère un Certificate (Distribution) puis un Provisioning Profile (Ad-Hoc) en cochant bien tous les appareils de l’équipe.
Pour pouvoir déployer sur TestFlight et sur l’App Store, je vais créer un Provisioning Profile (App Store). On a déjà le bon certificat.
On génère un nouveau Certificate du même type puis modifie tous les Provisioning Profiles qui étaient associés à l’ancien certificat pour sélectionner le nouveau.
On modifie le Provisioning Profile pour le recréer. Pas besoin de le supprimer, on peut cliquer sur “Edit” et le sauvegarder à nouveau.
On ajoute l’appareil dans la liste des Devices puis on modifie les Provisioning Profiles pour cocher l’appareil nouvellement ajouté. Attention, cet appareil ne pourra installer que les prochains builds de l’application (qui seront archivées et signés avec ce nouveau profil).
On suit quasiment les mêmes étapes que la création d’un nouveau projet avec le nouvel Identifier que l’on va créer. Il n’y a pas besoin de générer de Certificates ni de saisir des Devices.
Il va ajouter son appareil dans les Devices, générer son Certificate (Development) puis modifier le Provisioning Profile (Development) pour y cocher son certificat et son appareil. Il modifiera aussi le Provisioning Profile (Ad-Hoc) pour cocher son appareil.
Remarques : À chaque création ou modification, on pensera à installer la clé privée des certificats et les profils sur les machines qui en auront besoin. Certaines étapes peuvent être automatisées par des outils tels que Fastlane et Codemagic, ou par Xcode.
Je termine cette épopée en remontant à la surface. Respirons, c’est presque terminé. Il ne nous reste plus qu’à jeter un coup d'œil sur les types de compte qui existent et ce qu’ils permettent.
On s’enregistre en créant/utilisant une Apple ID. C’est gratuit et accessible à tous. On a accès aux outils comme Xcode et les simulateurs. On peut installer l’application sur un appareil relié à notre poste. On ne fait que du développement, aucune distribution possible. On ne peut pas créer de Certificate, de Profile ou autre.
On souscrit au programme pour 99$ par an, en tant qu’individu ou entreprise. Notre compte développeur aura accès à la distribution Ad-Hoc et App Store. On aura aussi accès à l’App Store Connect. C’est le programme auquel on souscrit dans une immense majorité des cas. On peut tout faire sauf déployer sur un store interne.
On souscrit au programme pour 299$ par an en tant que grande entreprise. Notre compte développeur aura accès à la distribution In-House - c’est seulement pour déployer sur un store interne. L’accès à ce programme est contraint par plusieurs conditions et nécessite une vérification d’Apple. On doit avoir un réel besoin auquel le programme classique ne peut répondre.
Petit cadeau de fin, j’ai fouillé les internets d’Apple pour faire remonter des liens utiles. Les voici :