Signature et distribution
                       Sur iOS




CocoaHeads Rennes #6                  Julien Quéré
   12 janvier 2012               julien@cocoaheads.fr
Agenda
•   Introduction

•   Les composants

•   Signer pour le développement

•   Signer pour la distribution

•   Distribuer

•   Trucs & astuces

•   Démo
Introduction
A quoi ça sert ?


•   Certifier l’identité du développeur

•   Gérer des droits d’accès

•   Limiter l'exécution d’applications (programme payant)
Programmes dévelopeur

                         iOS Developer Program     iOS Developer
                                                 Enterprise Program

App Store

In House

Ad hoc
(limité à 100 devices)


Tarif                          $99 / an             $299 / an
Les composants
Provisioning portal

•   Permet de gérer:

    •   Certificats

    •   UDID

    •   Provisionings


               http://developer.apple.com/ios/manage/overview/
iTunes Connect
•   Notre backoffice de
    l’App Store




                     https://itunesconnect.apple.com/
Clef privée



Clef publique   Certificats



  App ID        Provisioning



   UDID
Clefs privée et publique


•   Paire de clefs RSA 2048 bits

    •   Système de clef asymétrique

    •   La clef privée est ... privée !    Salut Alice    Salut Alice



                                          xwc8!*$EZAc    xwc8!*$EZAc
Certificat
•   2 types de certificats techniquement identiques (X.509):


               Développement                Distribution
Le CSR

•   CSR: certificate signing request (PKCS#10):




                       Nom + adresse email       Chiffré avec la clef privée




                          Clef publique          En clair



                          Anatomie d’un CSR
La génération
•   Avec le CSR, le provisioning portal génère un certificat

•   Il contient votre clef publique, nom et adresse email

•   Il est signé par la clef privée d’Apple

                                 Nom

                          Adresse email            Chiffré avec la clef privée Apple


                           Clef publique

                         Anatomie d’un certificat
Résumé
                   CSR

Clef privée
              Clef publique




                 Certificat

              Clef publique
App ID

    •   Chaine de caractère identifiant une application (format reverse-DNS):
                      Bundle Seed ID             Bundle ID



                     A1337CDP9A.fr.cocoaheads.demoApp

➡Généré par Apple                       ➡Généré par les développeurs
➡Unique                                 ➡Modifiable
➡Utilisé pour keychain et accessoires   ➡Devrait être unique à chaque application
UDID

•   Identifiant unique de chaque appareil iOS: Unique Device IDentifier

•   40 caractères (hexa)

•   Ajout via l’iOS Provisioning Portal ou l’Organizer de Xcode


     Nombre d’UDID limité à 100 pour une distribution Ad hoc
Le provisioning
  •   Le provisioning associe:
      ➡ une ou plusieurs identités
      ➡ un App ID à matcher
      ➡ éventuellement: des UDID


Le provisioning dit: «telle application, signée par tel développeur peut être
exécutée sur cet appareil»
Resumé
 Clef privée
                        Certificats

Clef publique



  App ID
                        Provisioning

   UDID
Signer pour le développement
La stratégie générique

•   Le « provisioning générique de développement »:

        Toute l’équipe

        Tous les appareils iOS connus

        Utiliser un wildcard pour l’AppID: « com.cocoaheads.* » voire
        même « * »
Le wildcard
•   Consiste à terminer son AppID par une *

•   Signifie « n’importe quoi »

•   Permet de matcher plusieurs AppID ...


A1664CDP9A.fr.cocoaheads.*             A1664CDP9A.fr.cocoaheads.demoApp

                                       A1664CDP9A.fr.cocoaheads.example

                                       A1664CDP9A.fr.lacantine.cocoaheads
Le wildcard
•   Consiste à terminer son AppID par une *

•   Signifie « n’importe quoi »

•   Permet de matcher plusieurs AppID ...


       A1664CDP9A.*                    A1664CDP9A.fr.cocoaheads.demoApp

                                       A1664CDP9A.fr.cocoaheads.example

                                       A1664CDP9A.fr.lacantine.cocoaheads
Xcode s’occupe de tout
•   Xcode gère un « iOS Team Provisioning Profile: * »

•   Il tient à jour un provisioning avec:

       Toute l’équipe

       Tous les appareils iOS connus

       L’App ID: «bundleSeedID.*»

•   Tout se passe dans l’organizer ...
Problème
•   Le wildcard est inutilisable quand il faut identifier précisément
    l’application:

    •   Push,

    •   Game Center,

    •   iCloud,

    •   ...
La stratégie spécifique

  Créer un provisioning avec AppID spécifique

  Limiter les dévelopeurs

  Limiter les UDID

➡Tout se passe sur le provisioning portal
Signer pour la distribution
Certificat de distribution


•   Fonctionnement strictement identique au certificat de développement

•   Unique pour chaque éditeur

•   Généré par le team agent
Provisioning
App Store / In House        Ad hoc
Configuration du projet

•   Vérifiez bien que vous signez avec une identité de distribution quand il le
    faut ...
La distribution
La distribution Ad hoc

•   Xcode: product / archive

•   Organizer / archives / share

•   Résultat: fichier IPA
La distribution Ad hoc

•   Glisser l’IPA dans iTunes

•   Ajouter l’application dans la
    synchronisation du device

•   Synchroniser

•   Attendre ...
La distribution OTA
 •   Le principe: l’installation se fait grâce à un lien web ...
itms-services://?action=download-manifest&url=http://foo.com/manifest.plist
                  <?xml version="1.0" encoding="UTF-8"?>
                  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                  <plist version="1.0">
                  <dict>
                  !    <key>items</key>
                  !    <array>
                  !    !    <dict>
                  !    !    !    <key>assets</key>
                  !    !    !    <array>
                  !    !    !    !    <dict>
                  !    !    !    !    !    <key>kind</key>
                  !    !    !    !    !    <string>software-package</string>
                  !    !    !    !    !    <key>url</key>
                  !    !    !    !    !    <string>http://webd.fr/cocoaheads/DemoApp.ipa</string>
                  ! <string>http://webd.fr/cocoaheads/DemoApp.ipa</string>
                  !    !    !    !    </dict>
                  !    !    !    </array>
                  !    !    !    <key>metadata</key>
                  !    !    !    <dict>
                  !    !    !    !    <key>bundle-identifier</key>
                  !    !    !    !    <string>fr.cocoaheads.DemoApp</string>
                  !    !    !    !    <key>bundle-version</key>
                  !    !    !    !    <string>1.0</string>
                  !    !    !    !    <key>kind</key>
                  !    !    !    !    <string>software</string>
                  !    !    !    !    <key>title</key>
                  !    !    !    !    <string>CocoHeads DemoApp</string>
                  !    !    !    </dict>
                  !    !    </dict>
                  !    </array>
                  </dict>
                  </plist>
                  !    !
La distribution OTA
•   Xcode: product / archive

•   Organizer / archives / share

•   Save for Entreprise Distribution

•   Résultat: fichier IPA et PLIST
La distribution OTA


•   Sur le device, lancer le lien: itms-services://?
    action=download-manifest&url=http://webd.fr/
    cocoaheads/demoAppOTA.plist


•   Appuyer sur installer ... C’est fini.

•   Astuce: utilisez un QRCode !
L’App Store
•   Ajouter l’application sur iTunes Connect

•   Ready to Upload Binary

•   Xcode: product / archive

•   Organizer / archives / validate

•   Entrer les identifiants iTunes Connect

•   Sélectionnez l’application et le provisioning

•   Attendre ...

•   Corriger ... Et recommencer
L’App Store
•   Organizer / archives / submit

•   Entrer les identifiants iTunes
    Connect

•   Sélectionnez l’application et le
    provisioning

•   Attendre ...

•   C’est fini
Trucs & Astuces
Les sélecteurs automatiques
Anatomie d’un IPA
•   Ce n’est qu’une archive ZIP ...

•   Contient un APP ... Qui n’est qu’un dossier

•   Il contient:

    •   Le binaire

    •   Les ressources

    •   Le provisioning
Voir le contenu d’un provisioning

•   Plug-in quicklook disponible ici:
    http://www.macmation.com/blog/
    2011/10/quicklook-plugin-for-
    mobile-provision-files/
Démo ?
julien@cocoaheads.fr
  CocoaHeads Rennes #6              thomas.dupont@cocoaheads.fr




Signature et distribution sur iOS
  Mail    : julien@cocoaheads.fr
  Web     : www.cocoaheads.fr
  Twitter : @CocoaHeadsRNS

CocoaHeads Rennes #6

  • 1.
    Signature et distribution Sur iOS CocoaHeads Rennes #6 Julien Quéré 12 janvier 2012 julien@cocoaheads.fr
  • 2.
    Agenda • Introduction • Les composants • Signer pour le développement • Signer pour la distribution • Distribuer • Trucs & astuces • Démo
  • 3.
  • 4.
    A quoi çasert ? • Certifier l’identité du développeur • Gérer des droits d’accès • Limiter l'exécution d’applications (programme payant)
  • 5.
    Programmes dévelopeur iOS Developer Program iOS Developer Enterprise Program App Store In House Ad hoc (limité à 100 devices) Tarif $99 / an $299 / an
  • 6.
  • 7.
    Provisioning portal • Permet de gérer: • Certificats • UDID • Provisionings http://developer.apple.com/ios/manage/overview/
  • 8.
    iTunes Connect • Notre backoffice de l’App Store https://itunesconnect.apple.com/
  • 9.
    Clef privée Clef publique Certificats App ID Provisioning UDID
  • 10.
    Clefs privée etpublique • Paire de clefs RSA 2048 bits • Système de clef asymétrique • La clef privée est ... privée ! Salut Alice Salut Alice xwc8!*$EZAc xwc8!*$EZAc
  • 11.
    Certificat • 2 types de certificats techniquement identiques (X.509): Développement Distribution
  • 12.
    Le CSR • CSR: certificate signing request (PKCS#10): Nom + adresse email Chiffré avec la clef privée Clef publique En clair Anatomie d’un CSR
  • 13.
    La génération • Avec le CSR, le provisioning portal génère un certificat • Il contient votre clef publique, nom et adresse email • Il est signé par la clef privée d’Apple Nom Adresse email Chiffré avec la clef privée Apple Clef publique Anatomie d’un certificat
  • 14.
    Résumé CSR Clef privée Clef publique Certificat Clef publique
  • 15.
    App ID • Chaine de caractère identifiant une application (format reverse-DNS): Bundle Seed ID Bundle ID A1337CDP9A.fr.cocoaheads.demoApp ➡Généré par Apple ➡Généré par les développeurs ➡Unique ➡Modifiable ➡Utilisé pour keychain et accessoires ➡Devrait être unique à chaque application
  • 16.
    UDID • Identifiant unique de chaque appareil iOS: Unique Device IDentifier • 40 caractères (hexa) • Ajout via l’iOS Provisioning Portal ou l’Organizer de Xcode Nombre d’UDID limité à 100 pour une distribution Ad hoc
  • 17.
    Le provisioning • Le provisioning associe: ➡ une ou plusieurs identités ➡ un App ID à matcher ➡ éventuellement: des UDID Le provisioning dit: «telle application, signée par tel développeur peut être exécutée sur cet appareil»
  • 18.
    Resumé Clef privée Certificats Clef publique App ID Provisioning UDID
  • 19.
    Signer pour ledéveloppement
  • 20.
    La stratégie générique • Le « provisioning générique de développement »: Toute l’équipe Tous les appareils iOS connus Utiliser un wildcard pour l’AppID: « com.cocoaheads.* » voire même « * »
  • 21.
    Le wildcard • Consiste à terminer son AppID par une * • Signifie « n’importe quoi » • Permet de matcher plusieurs AppID ... A1664CDP9A.fr.cocoaheads.* A1664CDP9A.fr.cocoaheads.demoApp A1664CDP9A.fr.cocoaheads.example A1664CDP9A.fr.lacantine.cocoaheads
  • 22.
    Le wildcard • Consiste à terminer son AppID par une * • Signifie « n’importe quoi » • Permet de matcher plusieurs AppID ... A1664CDP9A.* A1664CDP9A.fr.cocoaheads.demoApp A1664CDP9A.fr.cocoaheads.example A1664CDP9A.fr.lacantine.cocoaheads
  • 23.
    Xcode s’occupe detout • Xcode gère un « iOS Team Provisioning Profile: * » • Il tient à jour un provisioning avec: Toute l’équipe Tous les appareils iOS connus L’App ID: «bundleSeedID.*» • Tout se passe dans l’organizer ...
  • 24.
    Problème • Le wildcard est inutilisable quand il faut identifier précisément l’application: • Push, • Game Center, • iCloud, • ...
  • 25.
    La stratégie spécifique Créer un provisioning avec AppID spécifique Limiter les dévelopeurs Limiter les UDID ➡Tout se passe sur le provisioning portal
  • 26.
    Signer pour ladistribution
  • 27.
    Certificat de distribution • Fonctionnement strictement identique au certificat de développement • Unique pour chaque éditeur • Généré par le team agent
  • 28.
    Provisioning App Store /In House Ad hoc
  • 29.
    Configuration du projet • Vérifiez bien que vous signez avec une identité de distribution quand il le faut ...
  • 30.
  • 31.
    La distribution Adhoc • Xcode: product / archive • Organizer / archives / share • Résultat: fichier IPA
  • 32.
    La distribution Adhoc • Glisser l’IPA dans iTunes • Ajouter l’application dans la synchronisation du device • Synchroniser • Attendre ...
  • 33.
    La distribution OTA • Le principe: l’installation se fait grâce à un lien web ... itms-services://?action=download-manifest&url=http://foo.com/manifest.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> ! <key>items</key> ! <array> ! ! <dict> ! ! ! <key>assets</key> ! ! ! <array> ! ! ! ! <dict> ! ! ! ! ! <key>kind</key> ! ! ! ! ! <string>software-package</string> ! ! ! ! ! <key>url</key> ! ! ! ! ! <string>http://webd.fr/cocoaheads/DemoApp.ipa</string> ! <string>http://webd.fr/cocoaheads/DemoApp.ipa</string> ! ! ! ! </dict> ! ! ! </array> ! ! ! <key>metadata</key> ! ! ! <dict> ! ! ! ! <key>bundle-identifier</key> ! ! ! ! <string>fr.cocoaheads.DemoApp</string> ! ! ! ! <key>bundle-version</key> ! ! ! ! <string>1.0</string> ! ! ! ! <key>kind</key> ! ! ! ! <string>software</string> ! ! ! ! <key>title</key> ! ! ! ! <string>CocoHeads DemoApp</string> ! ! ! </dict> ! ! </dict> ! </array> </dict> </plist> ! !
  • 34.
    La distribution OTA • Xcode: product / archive • Organizer / archives / share • Save for Entreprise Distribution • Résultat: fichier IPA et PLIST
  • 35.
    La distribution OTA • Sur le device, lancer le lien: itms-services://? action=download-manifest&url=http://webd.fr/ cocoaheads/demoAppOTA.plist • Appuyer sur installer ... C’est fini. • Astuce: utilisez un QRCode !
  • 36.
    L’App Store • Ajouter l’application sur iTunes Connect • Ready to Upload Binary • Xcode: product / archive • Organizer / archives / validate • Entrer les identifiants iTunes Connect • Sélectionnez l’application et le provisioning • Attendre ... • Corriger ... Et recommencer
  • 37.
    L’App Store • Organizer / archives / submit • Entrer les identifiants iTunes Connect • Sélectionnez l’application et le provisioning • Attendre ... • C’est fini
  • 38.
  • 39.
  • 40.
    Anatomie d’un IPA • Ce n’est qu’une archive ZIP ... • Contient un APP ... Qui n’est qu’un dossier • Il contient: • Le binaire • Les ressources • Le provisioning
  • 41.
    Voir le contenud’un provisioning • Plug-in quicklook disponible ici: http://www.macmation.com/blog/ 2011/10/quicklook-plugin-for- mobile-provision-files/
  • 42.
  • 43.
    julien@cocoaheads.fr CocoaHeadsRennes #6 thomas.dupont@cocoaheads.fr Signature et distribution sur iOS Mail : julien@cocoaheads.fr Web : www.cocoaheads.fr Twitter : @CocoaHeadsRNS