cocoaheads rennes #6

43
Signature et distribution Sur iOS Julien Quéré [email protected] CocoaHeads Rennes #6 12 janvier 2012

Upload: cocoaheadsrns

Post on 30-Apr-2015

4.114 views

Category:

Technology


1 download

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

Page 1: CocoaHeads Rennes #6

Signature et distributionSur iOS

Julien Quéré[email protected]

CocoaHeads Rennes #612 janvier 2012

Page 2: CocoaHeads Rennes #6

Agenda

• Introduction

• Les composants

• Signer pour le développement

• Signer pour la distribution

• Distribuer

• Trucs & astuces

• Démo

Page 3: CocoaHeads Rennes #6

Introduction

Page 4: CocoaHeads Rennes #6

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)

Page 5: CocoaHeads Rennes #6

Programmes dévelopeur

App Store

In House

Ad hoc (limité à 100 devices)

Tarif $99 / an $299 / an

iOS Developer Program iOS Developer Enterprise Program

Page 6: CocoaHeads Rennes #6

Les composants

Page 7: CocoaHeads Rennes #6

Provisioning portal

• Permet de gérer:

• Certificats

• UDID

• Provisionings

http://developer.apple.com/ios/manage/overview/

Page 8: CocoaHeads Rennes #6

iTunes Connect

• Notre backoffice de l’App Store

https://itunesconnect.apple.com/

Page 9: CocoaHeads Rennes #6

Clef privée

CertificatsClef publique

ProvisioningApp ID

UDID

Page 10: CocoaHeads Rennes #6

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

Page 11: CocoaHeads Rennes #6

Certificat

• 2 types de certificats techniquement identiques (X.509):

Développement Distribution

Page 12: CocoaHeads Rennes #6

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

Page 13: CocoaHeads Rennes #6

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

Page 14: CocoaHeads Rennes #6

Certificat

Résumé

Clef publique

Clef privée

CSR

Clef publique

Page 15: CocoaHeads Rennes #6

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

Page 16: CocoaHeads Rennes #6

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

Page 17: CocoaHeads Rennes #6

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

Page 18: CocoaHeads Rennes #6

Resumé

Clef privée

Certificats

Clef publique

Provisioning

App ID

UDID

Page 19: CocoaHeads Rennes #6

Signer pour le développement

Page 20: CocoaHeads Rennes #6

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 « * »

Page 21: CocoaHeads Rennes #6

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

Page 22: CocoaHeads Rennes #6

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

Page 23: CocoaHeads Rennes #6

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 ...

Page 24: CocoaHeads Rennes #6

Problème

• Le wildcard est inutilisable quand il faut identifier précisément l’application:

• Push,

• Game Center,

• iCloud,

• ...

Page 25: CocoaHeads Rennes #6

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

Page 26: CocoaHeads Rennes #6

Signer pour la distribution

Page 27: CocoaHeads Rennes #6

Certificat de distribution

• Fonctionnement strictement identique au certificat de développement

• Unique pour chaque éditeur

• Généré par le team agent

Page 28: CocoaHeads Rennes #6

Provisioning

App Store / In House Ad hoc

Page 29: CocoaHeads Rennes #6

Configuration du projet

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

Page 30: CocoaHeads Rennes #6

La distribution

Page 31: CocoaHeads Rennes #6

La distribution Ad hoc

• Xcode: product / archive

• Organizer / archives / share

• Résultat: fichier IPA

Page 32: CocoaHeads Rennes #6

La distribution Ad hoc

• Glisser l’IPA dans iTunes

• Ajouter l’application dans la synchronisation du device

• Synchroniser

• Attendre ...

Page 33: CocoaHeads Rennes #6

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>

! !

Page 34: CocoaHeads Rennes #6

La distribution OTA

• Xcode: product / archive

• Organizer / archives / share

• Save for Entreprise Distribution

• Résultat: fichier IPA et PLIST

Page 35: CocoaHeads Rennes #6

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 !

Page 36: CocoaHeads Rennes #6

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

Page 37: CocoaHeads Rennes #6

L’App Store

• Organizer / archives / submit

• Entrer les identifiants iTunes Connect

• Sélectionnez l’application et le provisioning

• Attendre ...

• C’est fini

Page 38: CocoaHeads Rennes #6

Trucs & Astuces

Page 39: CocoaHeads Rennes #6

Les sélecteurs automatiques

Page 40: CocoaHeads Rennes #6

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

Page 42: CocoaHeads Rennes #6

Démo ?