Le fonctionnement des licences Apple Developer (2/3)

Dans la première partie de ce billet, nous avions vu ce qu’est une licence Apple Developer, et via quels canaux il est possible de déployer des applications iOS.

Cette seconde partie fait le lien entre les licences et les canaux : nous allons en effet voir que ce sont le choix d’une licence et le paramétrage de ses composantes qui permettent de distribuer certaines applications via certains canaux uniquement.

Fonctionnement d’une Licence Apple Developer

De manière générale, une licence Apple Developer permet :

  1. Durant les phases de développement, à certains développeurs, de tester certaines applications en développement, sur certains périphériques de développement;
  2. De distribuer l’application développée via des canaux de distribution (spécifiques selon la licence).

Ce qui permet, à une application de pouvoir être installée et de fonctionner sur un iDevice compatible, est sa « signature » : lors de l’export du fichier IPA de l’application depuis XCode, l’application est signée à partir des données recueillies depuis la licence Apple Developer utilisée (voir ci-dessous).

Il existe deux modes d’exports d’un fichier IPA :

  1. Développement: en mode développement, le fichier IPA de l’application pourra être installé sur un iDevice compatible via les canaux permis par la licence utilisée, et ne pourra fonctionner que sur des périphériques de développement déclarés sur la licence. De plus, l’application utilisera la configuration « Debug » déclarée par le projet dans XCode;
  2. Distribution: en mode distribution, le fichier IPA de l’application à distribuer pourra être installé sur un iDevice compatible via les canaux permis par la licence utilisée, et ne pourra fonctionner que sur les périphériques autorisés depuis ce canal. De plus, l’application utilisera la configuration « Release » déclarée par le projet dans XCode.

La licence contient donc toutes les informations permettant d’identifier :

  1. Des développeurs;
  2. Des périphériques de développement;
  3. Des applications.

Toutes ces informations sont gérées sur le portail des membres d’une licence Apple Developer.

Ce portail possède deux groupes d’utilisateurs : « Membres » et « Administrateurs ». Pour mettre en place les informations de licences décrites ci-dessous pour un projet iOS, il faut contacter les administrateurs de la licence; ce sont les seuls autorisés à pouvoir créer et configurer les composantes de la licence.

Composantes d’une licence Apple Developer

Périphériques de développement

Quelle que soit la licence utilisée, quand le fichier IPA de l’application en cours de développement est signé en mode « Développement », cette application ne devient installable (via les canaux autorisés par la licence), et fonctionnelle que sur des périphériques de développement inscrits sur la licence.

Une licence Apple Developer permet donc d’inscrire une quantité limitée d’appareils sous iOS, watchOS ou tvOS. Ces appareils sont identifiés par un numéro unique « UDID », qu’il est possible de retrouver facilement depuis iTunes. Le site suivant donne un détail pas à pas de la procédure pour trouver l’UDID d’un iDevice : What’s my UDID

La limite d’appareils qu’il est possible d’enregistrer sur une licence est de :

  • 100 iPhone;
  • 100 iPad;
  • 100 iPod Touch;
  • 100 Apple TV;
  • 100 Apple Watch.

ATTENTION : lorsqu’un périphérique est enregistré, il l’est jusqu’à la date anniversaire de la licence. S’il est supprimé, sa suppression ne sera donc effective qu’à la date anniversaire de la licence. Tous les périphériques non supprimés à la date d’anniversaire de la licence sont automatiquement renouvelés pour 1 an.

Une gestion rigoureuse du parc de périphériques de développement est donc primordiale.

Certificats Développeur / Distribution

La licence permet de créer et gérer des certificats :

  1. « Developer » : permettent d’identifier les développeurs de la licence;
  2. « Distribution » : permettent d’identifier la licence utilisée pour le développement.

Les certificats « Developer » et « Distribution » ont une date d’expiration d’un an, mais ils sont automatiquement renouvelés par la licence à leur date d’expiration.

À tout moment il est possible de révoquer un certificat. Quand un certificat est révoqué, il devient invalide, et une erreur survient lors de la signature de l’application avec ce certificat.

Pour indiquer à XCode quel certificat il faut utiliser pour signer les applications lors de l’export du fichier IPA de l’application, il faut renseigner les paramètres (Build Settings) « Code Sign Identity » avec le certificat «iPhone Developer » à utiliser pour la configuration « Debug » et le certificat «iPhone Distribution » pour la configuration « Release ».

Certificats « Developer »

Les certificats « Developer » sont utilisés pour signer une application pendant les phases de développement. Ces applications ne pourront être installées que sur des périphériques de développement inscrits sur la licence.

Un certificat « Developer » identifie un développeur. Il y a donc autant de certificats « Developer » que de développeurs d’applications iOS sur la licence.

C’est au développeur de créer son propre certificat « Developer » depuis sa machine de développement, après avoir été invité sur la licence par l’un des administrateurs. Pour ce faire, le développeur doit suivre la démarche indiquée par Apple depuis le Member Center à cette adresse :

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

Après avoir suivi cette manipulation, un certificat contenant une clé publique du développeur est disponible sur la licence. Le développeur doit télécharger ce certificat et double-cliquer dessus afin de l’enregistrer dans le « Trousseau d’accès » de sa machine. Une fois enregistré dans le « Trousseau d’accès », le développeur constate que son certificat est associé à une clé privée qu’il a généré lors de la procédure donnée par Apple.

Seule cette association de « certificat + clé privée » permet à un développeur de pouvoir exporter une application en mode « Développement ».

ATTENTION : quand un développeur change de poste de travail, il doit donc impérativement exporter (au format sécurisé P12) son certificat et sa clé privée depuis le trousseau d’accès, puis l’importer sur le nouveau poste de travail. Sans cette manipulation, il ne pourra plus signer d’applications en mode “Développement”.

Certificats « Distribution »

Les certificats de « Distribution » sont utilisés pour signer une application prête à être distribuée via un des canaux susmentionnés. Il y a au maximum 2 certificats de distribution sur une licence Apple Developer. Ils permettent d’identifier la licence (et donc le développeur indépendant ou l’entreprise) à partir de laquelle a été signée l’application pour la distribution.

Ce sont uniquement les administrateurs de la licence qui peuvent créer des certificats de distribution en suivant la procédure indiquée à cette adresse : https://developer.apple.com/account/ios/certificate/distribution/create

De la même manière, un certificat contient une clé publique, et la machine utilisée pour la génération du certificat possède la clé privée associée.

ATTENTION : Un même certificat de distribution étant utilisé pour distribuer toutes les applications développées sur la licence, il est donc primordial de partager le fichier sécurisé P12 contenant le certificat de distribution et sa clé privée associée, entre tous les membres de la licence habilités à distribuer une application

Révocation des certificats

À tout moment, les gestionnaires d’une licence peuvent « révoquer » un certificat. Cela peut, par exemple, servir à interdire des développeurs à utiliser la licence, ou encore, à remplacer un certificat de « Distribution » dont la clé privée aurait été perdue.

  1. La révocation d’un certificat « Developer » permet de ne plus autoriser un développeur à exporter des applications en mode « Development ». Cela n’a aucune incidence sur les applications déjà déployées (avant la révocation du certificat) sur des périphériques de développement par ce développeur;
  2. La révocation d’un certificat de Distribution permet de ne plus autoriser les développeurs possédant ce certificat et sa clé privée, à distribuer des applications pour les différents canaux permis par la licence. En outre, la révocation d’un tel certificat peut avoir une incidence sur les applications déjà distribuées et signées avec le certificat révoqué, selon le type de la licence :
    • Licence Apple Developer (Standard) : les applications distribuées (sur l’AppStore) avec un certificat « Distribution » révoqué, ne sont pas impactées. Il n’est en revanche plus possible de distribuer d’applications avec ce certificat;
    • Licence Apple Developer Enterprise : les applications distribuées (store privé, EMM, OTA, ad-HOC …) avec un certificat de distribution révoqué, ne sont plus utilisables. Il faut redistribuer une nouvelle version de ces applications avec un certificat de distribution valide.

Identifiants d’applications (App Id) et Wildcard

Identifiant d’application / App Id

Un identifiant d’application est une chaîne de caractères, identifiant de manière unique une application ou un groupe d’applications, sur une licence Apple Developer. L’App Id permet aussi de renseigner les capacités permises par l’application telles que (liste non exhaustive) :

  1. L’accès au GameCenter;
  2. La capacité d’envoyer des notifications PUSH;
  3. L’utilisation du kit domotique ou de santé (HomeKit et HealthKit);
  4. La capacité d’utiliser iCloud (service de cloud d’Apple);
  5. La capacité d’utiliser Apple Pay (service de paiement par iDevice d’Apple) …

Pour signer et exporter le fichier IPA d’une application depuis XCode, il faut donc, au préalable, avoir renseigné son « App Id » depuis la page adéquate du portail de la licence, disponible au lien suivant : https://developer.apple.com/account/ios/identifier/bundle/create

L’App Id renseigné sur la licence doit correspondre au champ « Bundle Identifier » de la target « Application » du projet XCode de l’application iOS.

Un App Id est généralement constitué de la concaténation de :

  1. L’identifiant de l’organisation qui développe (identifiant arbitraire);
  2. Nom de l’application.

Exemple : « com.mycompany.myApplication » est un « App Id » identifiant l’application « Mon Application » développée par « Ma Compagnie »

Wildcard App Id

Un « Wildcard App Id » est un identifiant d’applications, correspondant à plusieurs applications dont le Bundle Identifier est commun. Un « Wildcard App Id » permet de ne déclarer qu’un seul identifiant d’application (Wildcard), pour un groupe d’applications. Il fonctionne comme un « App Id », et permet également de renseigner des capacités des applications qu’il représente.

Le « Wilcard App Id » est la concaténation d’une partie commune à toutes les applications qu’il représente, suivi du symbole « * ».

Exemple : « com.mycompany.games.* » est un « WildCard App Id » qui identifie les jeux développés par « Ma Compagnie ».

ATTENTION : Un « App Id » et un « Wildcard App Id » doivent être uniques. Ils doivent impérativement être une seule chaîne de caractères contenant au moins un point. XCode génère un «Bundle Identifier » automatiquement à la création du projet, qu’il convient de ne pas modifier et de renseigner en tant qu’App Id sur la licence.

Provisioning Profile

Comme il a été indiqué ci-dessus, la licence contient :

  • Des certificats;
  • Des identifiants d’applications;
  • Des périphériques de développement.

XCode permet, à partir de toutes ces informations, d’autoriser certains développeurs seulement, à signer et exporter certaines applications sur certains périphériques de développement (en mode « Development »), ou sur tous les périphériques pouvant accéder à l’application (en mode « Distribution »).

Cette association entre des applications, des certificats et des périphériques est gérée grâce à un objet nommé « Provisioning Profile ». C’est l’objet central d’une licence Apple Developer, et c’est lui qui permet véritablement la signature d’une application lors de son export depuis XCode. Il y a deux types de Provisioning Profile :

  1. « Development» : utilisé uniquement pour l’export d’applications sur des périphériques de développement;
  2. « Distribution» : utilisé uniquement pour la distribution de l’application (mise en production).

Pour signer et exporter le fichier IPA d’une application depuis XCode, le logiciel a besoin d’utiliser un Provisioning Profile renseigné sur la licence. Il faut donc au préalable récupérer les Provisioning Profile de la licence dans XCode depuis le menu « XCode > Preferences > Account > [Choix du compte] > View Details > Download All » comme l’indique cette image :

Distribution Certificate

Il doit y avoir un Provisioning Profile de chaque type ( Development / Distribution) par App Id ou Wildcard App Id. Pour définir des Provisioning Profile sur la licence, il faut contacter un administrateur qui le créera depuis cette page : https://developer.apple.com/account/ios/profile/create

Provisioning Profile de développement

Un Provisionning Profile de développement permet d’associer des développeurs (identifiés par leurs certificats développeur), à un App Id ou un Wildcard App Id et à des périphériques de développement.

Exemple :
Exemple de Provisionning Profile de Développement

Ici, le Provisionning Profile de Développement « OurGames Development » ne permettra qu’à Quentin Michel et Jean d’installer les jeux (games.*) produits par « Ma compagnie » (com.mycompany) uniquement sur les 3 périphériques spécifiés. Pour rajouter, par exemple, le périphérique « iPod Touch 3g » et la développeuse  « Céline LAMAISON », il faut modifier le Provisioning Profile sur la licence et rafraîchir les Provisionning  Profile récupérés depuis XCode.

 

Provisionning Profile de distribution

Un Provisionning Profile de distribution permet de signer une application pour la distribution, pour les canaux autorisés par la licence. Un profil de distribution associe un App Id ou un Wildcard App Id à un certificat de distribution seulement :

Exemple de Provisionning Profile de Distribution

Ici, le Provisionning Profile de Distribution « OurGames Distribution » permet à tous les utilisateurs possédant le certificat « MyCompany Distribution Certificate » et sa clé privée associée de distribuer des projets dont le Bundle Identifier commence par « com.mycompany.games ».

Il existe deux types de Provisionning Profile de distribution :

  • Le Provisionning Profile de production: c’est celui qui permet de distribuer l’application à tous les iDevices compatibles pour la production. Sur la licence Standard, il s’appelle « App Store Provisionning Profile »; sur la licence Enterprise, il s’appelle « In-House Provisionning Profile »;
  • Le Provisionning Profile Ad-Hoc : il permet de distribuer l’application uniquement aux iDevices compatibles enregistrés sur la licence.

 

Tableau récapitulatif

  1. ROUGE: pas de distribution possible via ce canal pour la licence et le mode spécifiés;
  2. ORANGE FONCÉ: distribution possible via ce canal pour la licence et le mode spécifiés, uniquement sur les périphériques enregistrés sur la licence et autorisés par le Provisionning Profile de développement correspondant à l’application;
  3. ORANGE CLAIR: distribution possible via ce canal pour la licence et le mode spécifiés, uniquement sur les périphériques enregistrés sur la licence sans restriction, avec utilisation du Provisioning Profile Ad-Hoc;
  4. VERT: distribution possible via ce canal pour la licence et le mode spécifié pour tous les iDevices compatibles avec utilisation du Provisioning Profile de production (AppStore / In-House).

* D2 et D3 : Attention, en mode distribution « In-House » avec la licence Enterprise, Apple impose que l’accès à l’application authentifie les utilisateurs afin de ne pas concurrencer l’AppStore d’Apple.

** B1: distribution sur AppStore ou TestFlight (voir partie 3/3)

 

Ce sont toutes ces composantes des licences Apple Developer qui permettent d’identifier d’où provient une application, mais également de limiter la distribution d’une application à un nombre limité de périphériques. C’est aussi cette mécanique et sa combinaison avec les procédures de validation des applications par Apple, qui garantissent une fiabilité forte des applications et leurs provenances.

Dans la prochaine et dernière partie de cet article sur les Licences Apple Developer, nous verrons comment utiliser une licence dans un projet XCode, afin de déployer une application iOS via différents canaux.

Leave a Reply

Your email address will not be published. Required fields are marked *