SlideShare a Scribd company logo
1 of 43
Download to read offline
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

More Related Content

What's hot

CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeadsRNS
 
Transition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers StoryboardsTransition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers StoryboardsCocoaHeads France
 
Test flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebiaTest flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebiaCocoaHeads France
 
Tap publisher par Frédéric Aloé
Tap publisher par Frédéric AloéTap publisher par Frédéric Aloé
Tap publisher par Frédéric AloéCocoaHeads France
 
Presentation clean architecture
Presentation clean architecturePresentation clean architecture
Presentation clean architectureThomas LOMBARD
 
Introduction to WebRTC on iOS
Introduction to WebRTC on iOSIntroduction to WebRTC on iOS
Introduction to WebRTC on iOSCocoaHeads France
 
Firebase par nicolas lehovetzki
Firebase par nicolas lehovetzkiFirebase par nicolas lehovetzki
Firebase par nicolas lehovetzkiCocoaHeads France
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeadsRNS
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelCocoaHeads France
 
La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockNicolas Lourenço
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads France
 

What's hot (20)

CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & Android
 
Transition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers StoryboardsTransition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers Storyboards
 
Test flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebiaTest flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebia
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Tap publisher par Frédéric Aloé
Tap publisher par Frédéric AloéTap publisher par Frédéric Aloé
Tap publisher par Frédéric Aloé
 
Presentation clean architecture
Presentation clean architecturePresentation clean architecture
Presentation clean architecture
 
Nouveauté iOS 6
Nouveauté iOS 6Nouveauté iOS 6
Nouveauté iOS 6
 
Ns operationqueue
Ns operationqueueNs operationqueue
Ns operationqueue
 
Introduction to WebRTC on iOS
Introduction to WebRTC on iOSIntroduction to WebRTC on iOS
Introduction to WebRTC on iOS
 
Firebase par nicolas lehovetzki
Firebase par nicolas lehovetzkiFirebase par nicolas lehovetzki
Firebase par nicolas lehovetzki
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nuls
 
Plugins Xcode
Plugins XcodePlugins Xcode
Plugins Xcode
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter Meuel
 
Multi-Threading Et Cocoa
Multi-Threading Et CocoaMulti-Threading Et Cocoa
Multi-Threading Et Cocoa
 
3D Touch
3D Touch3D Touch
3D Touch
 
La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de Bock
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
Test flight
Test flightTest flight
Test flight
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
 
Native script
Native scriptNative script
Native script
 

Viewers also liked

Opticien Toulouse - Optic Glorieux - Présentation magasin
Opticien Toulouse -  Optic Glorieux - Présentation magasinOpticien Toulouse -  Optic Glorieux - Présentation magasin
Opticien Toulouse - Optic Glorieux - Présentation magasinopticien1
 
Cuales son los detonantes para que se conviertan en hikikomoris
Cuales son los detonantes para que se conviertan en hikikomorisCuales son los detonantes para que se conviertan en hikikomoris
Cuales son los detonantes para que se conviertan en hikikomorisAdilene Moya
 
Amour d ordi.albertoppt
Amour d ordi.albertopptAmour d ordi.albertoppt
Amour d ordi.albertopptcorbeau40
 
Amour d ordi.albertoppt
Amour d ordi.albertopptAmour d ordi.albertoppt
Amour d ordi.albertopptcorbeau40
 
Chapter 5 l'ancien et la croissance eglise
Chapter 5 l'ancien et la croissance egliseChapter 5 l'ancien et la croissance eglise
Chapter 5 l'ancien et la croissance egliseGervaisson Pluviose
 
OIB 2ème semestre 2009
OIB 2ème semestre 2009OIB 2ème semestre 2009
OIB 2ème semestre 2009CCIRouen
 
ICHEC - PME plus - Des aides pour entreprendre à Bruxelles
ICHEC - PME plus - Des aides pour entreprendre à BruxellesICHEC - PME plus - Des aides pour entreprendre à Bruxelles
ICHEC - PME plus - Des aides pour entreprendre à BruxellesAzaerts David
 
Prevención de traumatismos cerebrales
Prevención de traumatismos cerebralesPrevención de traumatismos cerebrales
Prevención de traumatismos cerebralesmateom1coloyo
 
Dossier sarah,camille,lise
Dossier sarah,camille,liseDossier sarah,camille,lise
Dossier sarah,camille,liseSarahfe
 
¿Qué es un blog?
¿Qué es un blog?¿Qué es un blog?
¿Qué es un blog?Carmen Maza
 
Chapter 3 l'ancien en sa qualitã© de dirigeant 6e partie
Chapter 3 l'ancien en sa qualitã© de dirigeant 6e partieChapter 3 l'ancien en sa qualitã© de dirigeant 6e partie
Chapter 3 l'ancien en sa qualitã© de dirigeant 6e partieGervaisson Pluviose
 
Ciencia y tecnologia
Ciencia y tecnologiaCiencia y tecnologia
Ciencia y tecnologiasandmara87
 
Étude sur le redécoupage électoral : Une expérience de réutilisation de donné...
Étude sur le redécoupage électoral : Une expérience de réutilisation de donné...Étude sur le redécoupage électoral : Une expérience de réutilisation de donné...
Étude sur le redécoupage électoral : Une expérience de réutilisation de donné...digiSchool group
 
Formation google analytics - Configuration des evénements
Formation google analytics - Configuration des evénementsFormation google analytics - Configuration des evénements
Formation google analytics - Configuration des evénementsSofteam agency
 

Viewers also liked (20)

Opticien Toulouse - Optic Glorieux - Présentation magasin
Opticien Toulouse -  Optic Glorieux - Présentation magasinOpticien Toulouse -  Optic Glorieux - Présentation magasin
Opticien Toulouse - Optic Glorieux - Présentation magasin
 
Cuales son los detonantes para que se conviertan en hikikomoris
Cuales son los detonantes para que se conviertan en hikikomorisCuales son los detonantes para que se conviertan en hikikomoris
Cuales son los detonantes para que se conviertan en hikikomoris
 
Amour d ordi.albertoppt
Amour d ordi.albertopptAmour d ordi.albertoppt
Amour d ordi.albertoppt
 
Amour d ordi.albertoppt
Amour d ordi.albertopptAmour d ordi.albertoppt
Amour d ordi.albertoppt
 
Chapter 5 l'ancien et la croissance eglise
Chapter 5 l'ancien et la croissance egliseChapter 5 l'ancien et la croissance eglise
Chapter 5 l'ancien et la croissance eglise
 
OIB 2ème semestre 2009
OIB 2ème semestre 2009OIB 2ème semestre 2009
OIB 2ème semestre 2009
 
ICHEC - PME plus - Des aides pour entreprendre à Bruxelles
ICHEC - PME plus - Des aides pour entreprendre à BruxellesICHEC - PME plus - Des aides pour entreprendre à Bruxelles
ICHEC - PME plus - Des aides pour entreprendre à Bruxelles
 
Prevención de traumatismos cerebrales
Prevención de traumatismos cerebralesPrevención de traumatismos cerebrales
Prevención de traumatismos cerebrales
 
2014_1_ciAvanzThesaurusLinguaeGraecae
2014_1_ciAvanzThesaurusLinguaeGraecae2014_1_ciAvanzThesaurusLinguaeGraecae
2014_1_ciAvanzThesaurusLinguaeGraecae
 
2014_2ciAvanzTema5SbdBcaHumanColeccionServicios
2014_2ciAvanzTema5SbdBcaHumanColeccionServicios2014_2ciAvanzTema5SbdBcaHumanColeccionServicios
2014_2ciAvanzTema5SbdBcaHumanColeccionServicios
 
Dossier sarah,camille,lise
Dossier sarah,camille,liseDossier sarah,camille,lise
Dossier sarah,camille,lise
 
¿Qué es un blog?
¿Qué es un blog?¿Qué es un blog?
¿Qué es un blog?
 
Chapter 3 l'ancien en sa qualitã© de dirigeant 6e partie
Chapter 3 l'ancien en sa qualitã© de dirigeant 6e partieChapter 3 l'ancien en sa qualitã© de dirigeant 6e partie
Chapter 3 l'ancien en sa qualitã© de dirigeant 6e partie
 
Ciencia y tecnologia
Ciencia y tecnologiaCiencia y tecnologia
Ciencia y tecnologia
 
2014_2ciBásicoTema1HerramientasDeComunicación
2014_2ciBásicoTema1HerramientasDeComunicación2014_2ciBásicoTema1HerramientasDeComunicación
2014_2ciBásicoTema1HerramientasDeComunicación
 
Las Tics
Las TicsLas Tics
Las Tics
 
Reflexiones
ReflexionesReflexiones
Reflexiones
 
Etica y valores
Etica y valoresEtica y valores
Etica y valores
 
Étude sur le redécoupage électoral : Une expérience de réutilisation de donné...
Étude sur le redécoupage électoral : Une expérience de réutilisation de donné...Étude sur le redécoupage électoral : Une expérience de réutilisation de donné...
Étude sur le redécoupage électoral : Une expérience de réutilisation de donné...
 
Formation google analytics - Configuration des evénements
Formation google analytics - Configuration des evénementsFormation google analytics - Configuration des evénements
Formation google analytics - Configuration des evénements
 

Similar to CocoaHeads Rennes #6

"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hoursLaurent MEURISSE
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Tech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesTech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesMichael Laguerre
 
La signature de code - Code signing
La signature de code - Code signingLa signature de code - Code signing
La signature de code - Code signingAlice and Bob
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8Microsoft
 
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...Christophe Porteneuve
 
Module Encodage Easytouse Light
Module Encodage Easytouse LightModule Encodage Easytouse Light
Module Encodage Easytouse Lightfchaabane
 
Video Encoding Solution
Video Encoding SolutionVideo Encoding Solution
Video Encoding Solutionsthiebe
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsCocoaHeads France
 
Proposition forge agile 1.0
Proposition forge agile 1.0Proposition forge agile 1.0
Proposition forge agile 1.0Laurent MEURISSE
 
QR codes et codes à barres sous Delphi
QR codes et codes à barres sous DelphiQR codes et codes à barres sous Delphi
QR codes et codes à barres sous Delphipprem
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Guillaume Sautereau
 
Wordpress et la sécurité des plugins
Wordpress et la sécurité des pluginsWordpress et la sécurité des plugins
Wordpress et la sécurité des pluginsBoiteaweb
 
Tech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobilesTech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobilesTelecomValley
 
Partagez votre code et non vos secrets
Partagez votre code et non vos secretsPartagez votre code et non vos secrets
Partagez votre code et non vos secretsOpen Source Experience
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsThomas Bassetto
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...ENSIBS
 

Similar to CocoaHeads Rennes #6 (20)

"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Tech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesTech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobiles
 
La signature de code - Code signing
La signature de code - Code signingLa signature de code - Code signing
La signature de code - Code signing
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8
 
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
 
Module Encodage Easytouse Light
Module Encodage Easytouse LightModule Encodage Easytouse Light
Module Encodage Easytouse Light
 
Video Encoding Solution
Video Encoding SolutionVideo Encoding Solution
Video Encoding Solution
 
Apache Cordova 3.3 de zéro
Apache Cordova 3.3 de zéroApache Cordova 3.3 de zéro
Apache Cordova 3.3 de zéro
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
 
Proposition forge agile 1.0
Proposition forge agile 1.0Proposition forge agile 1.0
Proposition forge agile 1.0
 
QR codes et codes à barres sous Delphi
QR codes et codes à barres sous DelphiQR codes et codes à barres sous Delphi
QR codes et codes à barres sous Delphi
 
Cours cordova & REST
Cours cordova & RESTCours cordova & REST
Cours cordova & REST
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010
 
E Id Card
E Id CardE Id Card
E Id Card
 
Wordpress et la sécurité des plugins
Wordpress et la sécurité des pluginsWordpress et la sécurité des plugins
Wordpress et la sécurité des plugins
 
Tech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobilesTech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobiles
 
Partagez votre code et non vos secrets
Partagez votre code et non vos secretsPartagez votre code et non vos secrets
Partagez votre code et non vos secrets
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objets
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 

More from CocoaHeadsRNS

CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeadsRNS
 
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers TransitionsCocoaHeadsRNS
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeadsRNS
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeadsRNS
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeadsRNS
 
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeadsRNS
 
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeadsRNS
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeadsRNS
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeadsRNS
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeadsRNS
 
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeadsRNS
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeadsRNS
 

More from CocoaHeadsRNS (15)

CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubs
 
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical Record
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPods
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock Objects
 
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : Notifications
 
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOS
 
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOS
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOS
 
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOS
 
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératif
 
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central Dispatch
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisation
 

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
  • 4. 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)
  • 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
  • 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 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
  • 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 le dé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 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 ...
  • 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 la distribution
  • 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 ...
  • 31. La distribution Ad hoc • Xcode: product / archive • Organizer / archives / share • Résultat: fichier IPA
  • 32. La distribution Ad hoc • 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
  • 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 contenu d’un provisioning • Plug-in quicklook disponible ici: http://www.macmation.com/blog/ 2011/10/quicklook-plugin-for- mobile-provision-files/
  • 43. 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