Fitur ngawangun sareng nganteurkeun aplikasi ios

Dina artikel ieu kami babagi pangalaman assembling sarta nganteurkeun aplikasi ios ka pamaké, nu studio Plarium Krasnodar geus akumulasi dina prosés debugging CI / CD.

Fitur ngawangun sareng nganteurkeun aplikasi ios

palatihan

Saban jalma anu dina hiji cara atanapi anu sanés kalibet dina pamekaran aplikasi pikeun alat Apple parantos ngaapresiasi genah kontroversial tina infrastruktur. Kasesahan kapanggih dimana-mana: ti menu profil pamekar ka alat debug sareng ngawangun.

Aya seueur tulisan ngeunaan "dasar" dina Internét, janten kami bakal nyobian nyorot hal utama. Ieu naon anu anjeun peryogikeun pikeun ngawangun aplikasi anjeun suksés:

  • akun pamekar;
  • alat basis macOS anu bertindak salaku server ngawangun;
  • dihasilkeun sertipikat pamekar, nu bakal salajengna dipaké pikeun asup aplikasi;
  • aplikasi dijieun kalawan unik ID (pentingna Identifier kebat kudu dicatet, sabab pamakéan wildcard ID ngajadikeun eta teu mungkin migunakeun loba fungsi tina aplikasi nu, contona: pakait domain, Push Bewara, Apple Sign In jeung sajabana);
  • keureutan tanda tangan aplikasi.

Sertipikat pamekar kedah didamel ngalangkungan Keychain dina alat macOS mana waé. Jinis sertipikat penting pisan. Gumantung kana lingkungan aplikasi (Dev, QA, Pementasan, Produksi) eta bakal béda (Pamekaran atawa Distribusi), sakumaha bakal tipe profil signature aplikasi.

Jenis utama profil:

  • Pangwangunan - dimaksudkeun pikeun nandatanganan aplikasi tim pamekaran, sertipikat Pangembangan dianggo (jenis nami iPhone Developer: XXXXX);
  • Ad Hoc - dimaksudkeun pikeun nandatanganan aplikasi uji sareng verifikasi internal ku departemen QA, sertipikat Distribusi pamekar dianggo (jenis nami Distribusi iPhone: XXXXX);
  • App Store - ngaleupaskeun ngawangun pikeun nguji éksternal via TestFlight sarta unggah ka App Store, sertipikat Distribusi pamekar dipaké.

Nalika ngahasilkeun propil Pangwangunan sareng Ad Hoc, éta ogé dituduhkeun daptar alat, dimana anjeun tiasa install wangunan, nu ngidinan Anjeun pikeun salajengna ngawatesan aksés pikeun pamaké. Henteu aya daptar alat dina profil App Store, sabab kontrol aksés nalika tés béta katutup diurus ku TestFlight, anu bakal dibahas engké.

Pikeun kajelasan, anjeun tiasa nampilkeun profil pamekar dina bentuk tabel di handap. Ieu ngagampangkeun ngartos parameter naon anu urang peryogikeun pikeun ngarakit sareng dimana kéngingkeunana.

Fitur ngawangun sareng nganteurkeun aplikasi ios

Majelis

Sangkan leuwih gampang pikeun misahkeun rakitan ku proyék jeung lingkungan, kami nganggo ngaran profil kawas ${ProjectName}_${Instance}, nyaeta, ngaran proyék + conto (gumantung kana lingkungan aplikasi: Dev, QA, GD, Pementasan, Live, jeung saterusna).

Nalika diimpor ka server ngawangun, profilna robih namina janten ID unik sareng dipindahkeun kana polder /Users/$Username/Library/MobileDevice/Provisioning Profiles (Dimana $Username pakait jeung ngaran akun pamaké tina ngawangun server).

Aya dua cara pikeun ngawangun file * .ipa - warisan (PackageApplication) jeung modern (via XcAchive kreasi sarta ékspor). Metodeu kahiji dianggap luntur, sabab saprak versi 8.3 modul bungkusan file aplikasi parantos dipiceun tina distribusi Xcode. Pikeun ngagunakeun éta, anjeun kedah nyalin modul tina Xcode lami (versi 8.2 sareng sateuacana) kana polder:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Teras ngajalankeun paréntah:

chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/*

Salajengna anjeun kedah ngumpulkeun *.file aplikasi tina aplikasi:

xcodebuild 
-workspace $ProjectDir/$ProjectName.xcworkspace 
-scheme $SchemeName 
-sdk iphoneos 
build 
-configuration Release 
-derivedDataPath build 
CODE_SIGN_IDENTITY=”$DevAccName”
PROVISIONING_PROFILE=”$ProfileId”
DEPLOYMENT_POSTPROCESSING=YES 
SKIP_INSTALL=YES 
ENABLE_BITCODE=NO

dimana:

-workspace - jalur ka file proyék.

-scheme - skéma dipaké, dieusian dina proyék.

-derivedDataPath - jalur pikeun ngundeur aplikasi dirakit (* .app).

CODE_SIGN_IDENTITY — nami akun pamekar, anu tiasa diverifikasi dina Keychain (Pamekar iPhone: XXXX XXXXXXX, tanpa TeamID dina kurung).

Fitur ngawangun sareng nganteurkeun aplikasi ios

PROVISIONING_PROFILE - Profil ID pikeun nandatanganan aplikasi, anu tiasa didapet ku paréntah:

cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//'

Upami aplikasina nganggo profil tambahan (contona, pikeun Bewara Push), teras tinimbang PROVISIONING_PROFILE nunjukkeun:

APP_PROFILE=”$AppProfile” 
EXTENSION_PROFILE=”$ExtProfile” 

Salajengna, hasilna *.app file kudu ngarangkep kana *.ipa. Jang ngalampahkeun ieu, anjeun tiasa nganggo paréntah sapertos:

/usr/bin/xcrun --sdk iphoneos PackageApplication 
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app") 
-o "$ProjectDir/$ProjectName_$Instance.ipa"

Sanajan kitu, metoda ieu dianggap luntur tina sudut pandang Apple. Éta relevan pikeun ménta * .ipa ku exporting ti arsip aplikasi.

Mimiti anjeun kedah ngumpulkeun arsip kalayan paréntah:

xcodebuild 
-workspace $ProjectDir/$ProjectName.xcworkspace 
-scheme $SchemeName 
-sdk iphoneos 
-configuration Release 
archive 
-archivePath $ProjectDir/build/$ProjectName.xcarchive 
CODE_SIGN_IDENTITY=”$DevAccName” 
PROVISIONING_PROFILE=”$ProfileId”
ENABLE_BITCODE=NO 
SYNCHRONOUS_SYMBOL_PROCESSING=FALSE

Bedana perenahna di metoda assembly jeung pilihan SYNCHRONOUS_SYMBOL_PROCESSING, nu disables simbol unloading dina waktos ngawangun.

Salajengna urang kedah ngahasilkeun file sareng setélan ékspor:

ExportSettings="$ProjectDir/exportOptions.plist"

cat << EOF > $ExportSettings
<?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>compileBitcode</key>
<false/>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<false/>
<key>method</key>
<string>$Method</string>
<key>provisioningProfiles</key>
<dict>
<key>$BundleID</key>
<string>$ProfileId</string>
</dict>
<key>signingCertificate</key>
<string>$DevAccName</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>$TeamID</string>
<key>thinning</key>
<string><none></string>
</dict>
</plist>
EOF

dimana:

$Method - Metoda pangiriman, pakait jeung tipe profil signature aplikasi, nyaeta, keur Development nilai bakal ngembangkeun, pikeun Ad Hoc - ad-hoc, sarta App Store - app-store.

$BundleID - ID Aplikasi, anu ditunjuk dina setélan aplikasi. Anjeun tiasa pariksa ku paréntah:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - Setélan ngaran pamekar sareng tanda tangan ID profil anu dianggo sateuacana sareng kedah cocog sareng nilai dina setélan ékspor.

$TeamID — sapuluh-angka ID dina kurung sanggeus ngaran pamekar urang, conto: iPhone Pamekar: …… (XXXXXXXXXX); bisa dipariksa di Keychain.

Teras, nganggo paréntah ékspor, urang kéngingkeun file *.ipa anu diperyogikeun:

xcodebuild 
-exportArchive 
-archivePath $ProjectDir/build/$ProjectName.xcarchive 
-exportPath $ProjectDir 
-exportOptionsPlist $ExportSettings

pangiriman

Ayeuna file anu dikumpulkeun kedah dikirimkeun ka pangguna akhir, nyaéta, dipasang dina alat.

Aya seueur jasa pikeun ngadistribusikaeun Pangwangunan sareng Ad Hoc ngawangun, sapertos HockeyApp, AppBlade sareng anu sanésna, tapi dina tulisan ieu kami bakal ngobrol ngeunaan server mandiri pikeun nyebarkeun aplikasi.

Masang aplikasi pikeun ios lumangsung dina 2 tahap:

  1. Narima manifest instalasi aplikasi ngaliwatan Service Item.
  2. Pamasangan file * .ipa nurutkeun informasi dieusian dina manifest via HTTPS.

Ku kituna, urang mimitina kudu ngahasilkeun manifest instalasi (tipe file *.plist) jeung paréntah:

cat << EOF > $manifest
<?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>$ipaUrl</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>$BundleID</string>
<key>bundle-version</key>
<string>$AppVersion</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>$ProjectName_$Instance</string>
<key>subtitle</key>
<string>$Instance</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOF

Sakumaha anjeun tiasa tingali, manifes ngandung ampir sadaya parameter anu aya dina ngawangun aplikasi.

Vérsi aplikasi ($AppVersion) tiasa dipariksa ku paréntah:

defaults read $ProjectDir/Info CFBundleVersion

parameter $ipaUrl ngandung tumbu langsung pikeun ngundeur file * .ipa. Ti versi katujuh ios, aplikasi kudu dipasang via HTTPS. Dina versi kadalapan, format tina manifest geus rada robah: blok jeung setelan pikeun ikon aplikasi kawas

<images>
   <image>...</image>
</images>

Janten, pikeun masang aplikasi, halaman HTML saderhana sareng tautan sapertos kieu cekap:

itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plist

Pikeun kaperluan departemén pamekaran sareng uji, Plarium parantos nyiptakeun aplikasi pamasangan ngawangun sorangan, anu masihan kami:

  • otonomi jeung kamerdikaan,
  • sentralisasi kontrol aksés sareng pamasangan aplikasi anu aman ngalangkungan tautan "samentara" anu diciptakeun sacara dinamis,
  • fungsionalitas anu tiasa dilegakeun (nyaéta, tim pamekar, upami diperyogikeun, tiasa ngahijikeun fungsi anu leungit kana aplikasi anu tos aya).

Tés

Ayeuna urang bakal ngobrol ngeunaan uji pre-release tina aplikasi anu nganggo Lampir.

Kaayaan anu dibutuhkeun pikeun diunduh nyaéta jinis profil tandatangan App Store sareng ayana konci API anu dihasilkeun.

Aya sababaraha cara pikeun ngundeur aplikasi:

  • ngaliwatan Xcode (Organizer),
  • via altool,
  • via Aplikasi Loader pikeun versi heubeul tina Xcode (ayeuna Transporter).

Pikeun unduh otomatis, altool dianggo, anu ogé ngagaduhan dua metode otorisasi:

  • Sandi Khusus Aplikasi,
  • Konci API.

Hadé pisan mun éta ngundeur aplikasi maké API Key.

Pikeun kéngingkeun konci API, angkat ka link sarta ngahasilkeun konci. Salian konci sorangan dina * .p8 format, urang bakal butuh dua parameter: IssuerID na KeyID.

Fitur ngawangun sareng nganteurkeun aplikasi ios

Teras, impor konci anu diunduh kana server ngawangun:

mkdir -p ~/.appstoreconnect/private_keys
mv ~/Downloads/AuthKey_${KeyID}.p8 ~/.appstoreconnect/private_keys/

Sateuacan unggah aplikasi ka TestFlight, anjeun kedah ngonfirmasi aplikasi, kami ngalakukeun ieu nganggo paréntah:

xcrun altool 
--validate-app 
-t ios 
-f $(find "$ProjectDir" -name "*.ipa") 
--apiKey “$KeyID” 
--apiIssuer “$IssuerID” 

di mana apiKey и apiIssuer gaduh nilai widang tina kaca generasi konci API.

Salajengna, saatos validasi anu suksés, kami ngamuat aplikasi nganggo paréntah --upload-app kalawan parameter sarua.

Aplikasina bakal diuji ku Apple dina hiji atanapi dua dinten teras bakal sayogi pikeun panguji éksternal: aranjeunna bakal dikirimkeun tautan email pikeun pamasangan.

Cara séjén pikeun ngundeur aplikasi ngaliwatan altool nyaéta ngagunakeun Sandi Khusus Aplikasi.

Pikeun kéngingkeun Sandi Khusus Aplikasi anjeun kedah angkat ka link sarta ngahasilkeun eta dina bagian Kaamanan.

Fitur ngawangun sareng nganteurkeun aplikasi ios

Salajengna, anjeun kedah nyiptakeun catetan server ngawangun dina Keychain nganggo kecap akses ieu. Tina vérsi 11 Xcode ieu tiasa dilakukeun ku paréntah:

xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswd

dimana:

$DeveloperName — nami akun pamekar ios anu dianggo pikeun log in kana jasa Apple.

$AppPswd - dihasilkeun Sandi husus App.

Salajengna, urang nampi nilai parameter asc-panyadia sareng pariksa kasuksésan impor sandi kalayan paréntah:

xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"

Urang meunang kaluaran:

Provider listing:
- Long Name - - Short Name -
XXXXXXX        XXXXXXXXX

Sakumaha anjeun tiasa tingali, nilai Ngaran pondok diperlukeun (asc-panyadia) coincides jeung $ TeamID parameter nu kami dipaké nalika ngawangun aplikasi.

Pikeun mastikeun sareng ngamuat aplikasi kana TestFlight, paké paréntah:

xcrun altool 
--(validate|upload)-app   
-f $(find "$ProjectDir" -name "*.ipa") 
-u "$DeveloperName" 
-p "@keychain:Altool" 

Salaku nilai parameter -p anjeun tiasa nyandak nilai $AppPswd dina wangun unencrypted (eksplisit).

Sanajan kitu, sakumaha geus disebutkeun, ti sudut pandang kinerja, éta hadé pikeun milih API Key pikeun otorisasina altool, saprak versi béda tina Xcode boga masalah tangtu ("teu ningali" Keychain, kasalahan otorisasina salila unggah, jsb).

Éta sadayana, sabenerna. Abdi ngarepkeun sadayana anu aub dina ngawangun suksés sareng rilis anu teu aya masalah dina App Store.

sumber: www.habr.com

Tambahkeun komentar