cocoaheads rennes #6
DESCRIPTION
Slides de la présentation "Signature et Distribution" de la session des CocoaHeads Rennais du 12 janvier 2012. Présentation assurée par Julien Quéré.TRANSCRIPT
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
App Store
In House
Ad hoc (limité à 100 devices)
Tarif $99 / an $299 / an
iOS Developer Program iOS Developer Enterprise Program
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
CertificatsClef publique
ProvisioningApp ID
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
xwc8!*$EZAc xwc8!*$EZAc
Salut Alice
Certificat
• 2 types de certificats techniquement identiques (X.509):
Développement Distribution
Le CSR
• CSR: certificate signing request (PKCS#10):
Clef publique
Nom + adresse email Chiffré avec la clef privée
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
Chiffré avec la clef privée Apple
Anatomie d’un certificat
Adresse email
Clef publique
Certificat
Résumé
Clef publique
Clef privée
CSR
Clef publique
App ID
• Chaine de caractère identifiant une application (format reverse-DNS):
A1337CDP9A.fr.cocoaheads.demoApp
Bundle Seed ID Bundle ID
➡Généré par Apple➡Unique➡Utilisé pour keychain et accessoires
➡Généré par les développeurs➡Modifiable➡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:
Le provisioning dit: «telle application, signée par tel développeur peut être exécutée sur cet appareil»
➡une ou plusieurs identités
➡un App ID à matcher
➡ éventuellement: des UDID
Resumé
Clef privée
Certificats
Clef publique
Provisioning
App ID
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
A1664CDP9A.*
Le wildcard
• Consiste à terminer son AppID par une *
• Signifie « n’importe quoi »
• Permet de matcher plusieurs AppID ...
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>! ! ! ! </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>
! <string>http://webd.fr/cocoaheads/DemoApp.ipa</string>
! !
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 ?
[email protected] Rennes #6
Signature et distribution sur iOSMail : [email protected] : www.cocoaheads.frTwitter : @CocoaHeadsRNS