CocoaHeads Rennes #6

Post on 30-Apr-2015

4.113 views 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 of CocoaHeads Rennes #6

Signature et distributionSur iOS

Julien Quéréjulien@cocoaheads.fr

CocoaHeads Rennes #612 janvier 2012

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

Démo ?

julien@cocoaheads.fr

thomas.dupont@cocoaheads.frCocoaHeads Rennes #6

Signature et distribution sur iOSMail : julien@cocoaheads.frWeb : www.cocoaheads.frTwitter : @CocoaHeadsRNS