Funktioner ved at bygge og levere iOS-applikationer
I denne artikel deler vi erfaringerne med at samle og levere iOS-applikationer til brugere, som Plarium Krasnodar-studiet har samlet i processen med at fejlsøge CI/CD.
Træning
Enhver person, der på en eller anden måde er involveret i udviklingen af applikationer til Apple-enheder, har allerede sat pris på den kontroversielle bekvemmelighed ved infrastrukturen. Vanskeligheder findes overalt: fra udviklerprofilmenuen til fejlfindings- og byggeværktøjerne.
Der er masser af artikler om "grundlæggende" på internettet, så vi vil forsøge at fremhæve det vigtigste. Her er hvad du skal bruge for at bygge din applikation med succes:
en macOS-baseret enhed, der fungerer som en build-server;
genereret udviklercertifikat, som yderligere vil blive brugt til at underskrive ansøgningen;
oprettet applikation med unikke ID (Vigtigheden af bundle-id'en skal bemærkes, fordi brugen af jokertegn-id gør det umuligt at bruge mange funktioner i applikationen, for eksempel: Tilknyttede domæner, Push-meddelelser, Apple-logon og andre);
Et udviklercertifikat skal genereres via nøglering på enhver macOS-enhed. Certifikattypen er meget vigtig. Afhængigt af applikationsmiljøet (Dev, QA, Staging, Production) vil det variere (Udvikling eller Distribution), ligesom typen af applikationssignaturprofil.
Hovedtyper af profiler:
Udvikling - beregnet til at underskrive ansøgningen fra udviklingsteamet, et udviklingscertifikat bruges (typenavn iPhone-udvikler: XXXXX);
Ad Hoc - beregnet til at underskrive en testapplikation og intern verifikation af QA-afdelingen, udviklerens distributionscertifikat bruges (typenavn iPhone Distribution: XXXXX);
App Store - release build til ekstern test via TestFlight og upload til App Store, udviklerens distributionscertifikat bruges.
Ved generering af udviklings- og ad hoc-profiler er det også angivet enhedsliste, hvorpå du kan installere en build, som giver dig mulighed for yderligere at begrænse adgangen for brugere. Der er ingen liste over enheder i App Store-profilen, da adgangskontrol under lukket beta-test håndteres af TestFlight, som vil blive diskuteret senere.
For klarhedens skyld kan du præsentere udviklerens profil i form af en tabel nedenfor. Dette gør det nemmere at forstå, hvilke parametre vi skal bruge til montering, og hvor de skal hentes fra.
samling
For at gøre det nemmere at adskille samlinger efter projekt og miljø bruger vi profilnavne som f.eks ${ProjectName}_${Instance}, det vil sige projektnavn + instans (afhænger af applikationsmiljøet: Dev, QA, GD, Staging, Live, og så videre).
Når den importeres til build-serveren, ændrer profilen sit navn til et unikt ID og flyttes til mappen /Users/$Username/Library/MobileDevice/Provisioning Profiles (Hvor $Username svarer til brugerkontonavnet på build-serveren).
Der er to måder at bygge en *.ipa-fil på - legacy (PackageApplication) og moderne (via XcAchive-oprettelse og -eksport). Den første metode anses for at være forældet, da app-filpakkemodulet siden version 8.3 er blevet fjernet fra Xcode-distributionen. For at bruge det skal du kopiere modulet fra den gamle Xcode (version 8.2 og tidligere) til mappen: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
$Method — leveringsmetode, svarer til applikationssignaturprofiltypen, dvs. for udvikling vil værdien være udvikling, for Ad Hoc - ad-hoc og for App Store - app-store.
$BundleID — Applikations-id, som er angivet i applikationsindstillingerne. Du kan tjekke med kommandoen:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName и $ProfileId — Indstillinger for udviklernavn og signaturprofil-id, der blev brugt tidligere og skal matche værdierne i eksportindstillingerne.
$TeamID — ticifret ID i parentes efter udviklerens navn, eksempel: iPhone-udvikler: …… (XXXXXXXXXX); kan tjekkes i nøglering.
Dernæst, ved at bruge eksportkommandoen, får vi den nødvendige *.ipa-fil:
Nu skal den indsamlede fil leveres til slutbrugeren, det vil sige installeret på enheden.
Der er mange tjenester til distribution af udvikling og ad hoc builds, såsom HockeyApp, AppBlade og andre, men i denne artikel vil vi tale om en selvstændig server til distribution af applikationer.
Installation af applikationen til iOS foregår i 2 trin:
Modtagelse af applikationsinstallationsmanifestet gennem Items Service.
Installation af *.ipa-filen i henhold til oplysningerne angivet i manifestet via HTTPS.
Derfor skal vi først generere et installationsmanifest (filtype *.plist) med kommandoen:
Som du kan se, indeholder manifestet næsten alle de parametre, der er involveret i opbygningen af applikationen.
Applikationsversion ($AppVersion) kan kontrolleres med kommandoen:
defaults read $ProjectDir/Info CFBundleVersion
Parameter $ipaUrl indeholder et direkte link til at downloade *.ipa-filen. Fra den syvende version af iOS skal applikationen installeres via HTTPS. I den ottende version har manifestets format ændret sig lidt: blokke med indstillinger for applikationsikoner som
<images>
<image>...</image>
</images>
For at installere applikationen er en simpel HTML-side med et link som dette nok:
hvor apiKey и apiIssuer har feltværdier fra API-nøglegenereringssiden.
Dernæst, efter vellykket validering, indlæser vi applikationen med kommandoen --upload-app med de samme parametre.
Applikationen vil blive testet af Apple inden for en eller to dage og vil derefter blive tilgængelig for eksterne testere: De vil få tilsendt links til installation via e-mail.
En anden måde at downloade en applikation gennem altool er at bruge App-specifik adgangskode.
For at få den app-specifikke adgangskode skal du gå til link og generer det i afsnittet Sikkerhed.
Dernæst skal du oprette en build-serverpost i nøglering med denne adgangskode. Fra version 11 af Xcode kan dette gøres med kommandoen:
Som en parameterværdi -p du kan tage værdien $AppPswd i ukrypteret (eksplicit) form.
Men, som allerede nævnt, fra et ydelsessynspunkt er det bedre at vælge API Key til altool-autorisation, da forskellige versioner af Xcode har visse problemer ("kan ikke se" nøglering, autorisationsfejl under upload osv.).
Det er alt, faktisk. Jeg ønsker alle involverede succesfulde builds og problemfri udgivelser i App Store.