iOS Code Signing & Provisioning in a Nutshell

Jeg har udviklet apps i mere end 3 år nu, og én ting, der stadig irriterer mig, er Code Signing og Provisioning i iOS. Hvad er signeringsidentiteter? Hvorfor skal jeg oprette Provisioning Profiles og bekymre mig om sådanne ting som en udvikler? Hvis du ikke har nogen gode svar på disse spørgsmål og virkelig ikke ønsker at læse gennem Apple Docs, er dette forhåbentlig artiklen, der eksponerer hele processen for dig og for mig som en reference på mindre end 5 minutter.

Jeg er sikker på, at mange af jer kan lære ting hurtigt bare ved at læse gennem en tekst, men hvad jeg virkelig kan lide, er at få tingene forklaret på en visuel måde med bokse og pile. Så det største problem for mig er, at der ikke er noget diagram eller grafik, der kirsebær alle de relevante dele og viser, hvordan det hele fungerer sammen på en let forståelig måde. Det er grunden til, at jeg vil forsøge at lave et sådant i slutningen af dette indlæg. Lad os komme i gang.

Først skal vi samle de vigtigste termer, som du vil støde på, når du forsøger at finde noget relateret til Provisioning og Code Signing på internettet.

  • Xcode
  • Member Center
  • Keychain
  • Signing Identity
  • Private & Public Key
  • Provisioning Profile
  • App ID

Xcode & Member Center

Hvis du er iOS-udvikler vil du normalt bruge Xcode til at oprette og administrere din app og dine ressourcer og uploade dem til Appstore. Dette er alt, hvad du behøver at vide om Xcode for at følge med i dette indlæg. hvis du vil læse mere om det, skal du klikke her: Xcode

Når du har tilmeldt dig Apple Developer Program, kan du logge ind på Member Center. Det er her, du kan oprette Provisioning Profiles, App ID’er, certifikater osv. Dele af Member Center er direkte forbundet med Xcode. Du kan f.eks. se og oprette dine Signing Identities eller downloade og opdatere Provisioning Profiles i dine Xcode-indstillinger.

Signing Identity, Public & Private Key, Keychain Application

En ting, som vi skal have afklaret, er begrebet Signing. Ved at signere din app kan iOS identificere, hvem der har signeret din app, og verificere, at din app ikke er blevet ændret, siden du signerede den. Signeringsidentiteten består af et offentligt-privat nøglepar, som Apple opretter for dig. Tænk på den offentlige nøgle som en låsemekanisme, så du skal kende den private nøgle for at pakke ud, låse op eller afkode data igen.

Hvor kommer det offentlige og private nøglepar fra, og hvordan anmoder du om et certifikat, der indeholder dem? Alt dette magiske sker, når du opretter en Certificate Signing Request (CSR) via programmet Keychain Access (adgang til nøglering). Hvis du gør det, opretter nøgleringsprogrammet en privat nøgle og en certSigningRequest-fil, som du derefter skal uploade til Apple. Apple vil bekræfte anmodningen og udstede et certifikat til dig. Certifikatet vil indeholde den offentlige nøgle, som kan downloades til dit system. Når du har downloadet det, skal du lægge det ind i din Keychain Access Application ved at dobbeltklikke på det. Den bruges af kryptografiske funktioner til at generere en unik signatur for din applikation, som grundlæggende er din Code Signing Identity.

Certifikatet vil også være tilgængeligt via medlemscentret, men det vil kun indeholde den offentlige nøgle, så opbevar den private nøgle sikkert.

Det er også nødvendigt, at der er et mellemliggende certifikat i din nøglering for at sikre, at dit udvikler- eller distributionscertifikat er udstedt af en anden certifikatudstedende myndighed. Jeg ved godt, at det lyder lidt forvirrende, men det er sådan her, det fungerer. Det installeres automatisk, når du sætter Xcode op første gang, så i bund og grund behøver du ikke at bekymre dig så meget om det, fordi det konfigureres automatisk.

Provisioning Profile & App ID

Som vi ved, kan Apple godt lide at holde tingene sikre, så det er ikke muligt at installere en app på en hvilken som helst iOS-enhed derude kun ved hjælp af certifikatet. Det er her, Provisioning Profiles kommer ind i billedet. Der skal installeres en Provisioning Profile på hver enhed, som din applikationskode skal køre på. Hver Development Provisioning Profile vil indeholde et sæt iPhone Development Certificates, Unique Device Identifiers og et App ID. Et App ID er en todelt streng, der bruges til at identificere en eller flere apps fra et enkelt udviklingsteam.

Enheder, der er angivet i Development Provisioning Profile, kan kun bruges til test af de personer, hvis Development Certificates er inkluderet i profilen. En enkelt enhed kan indeholde flere tilrådighedsstillelsesprofiler. Forskellen mellem udviklings- og distributionsprofiler er, at distributionsprofiler ikke angiver nogen enheds-id’er. Hvis du vil frigive en app, som skal være begrænset til et antal registrerede enheder, skal du bruge en Ad-Hoc-profil til det.

Diagram

Her er det diagram, jeg fandt frem til. Hvis du opdager nogle ting, jeg har overset eller forklaret forkert, så lad mig det vide. Som sagt er det første gang, jeg virkelig har prøvet at sætte mig ind i indmaden i Provisioning og Code Signing. Jeg ved godt at der er meget mere at snakke om, men jeg synes dette er en god start for alt omkring dette emne. Jeg vil forsøge at holde dette indlæg opdateret og rette alt det forkerte så hurtigt jeg kan.

  1. Xcode bliver installeret og Intermediate Certificate bliver skubbet ind i Keychain
  2. Certificate Signing Request (CSR) bliver oprettet.
  3. Privat nøgle genereres sammen med oprettelsen af CSR’en og gemmes i nøgleringen
  4. CSR’en uploades til Member Center
  5. Apple kontrollerer det hele og udsteder certifikatet
  6. Certifikatet downloades til din computer
  7. Certifikatet skubbes ind i nøgleringen og parres med den private nøgle for at danne Code Signing Identity
  8. Den Provisioning Profile oprettes ved hjælp af et certifikat, App-ID og enhedsidentifikatorer og downloades af Xcode
  9. Xcode signerer appen og skubber Provisioning Profiles til enheden
  10. iOS kontrollerer, om alt er korrekt konfigureret.Det betyder, at Provisioning Profile skal indeholde det certifikat, du har brugt til at signere appen, din enheds UDID og det korrekte app-ID.
  11. Din app burde køre nu!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.