Mga bahin sa pagtukod ug paghatud sa mga aplikasyon sa iOS

Niini nga artikulo, gipaambit namo ang kasinatian sa pag-assemble ug paghatud sa mga aplikasyon sa iOS ngadto sa mga tiggamit, nga natipon sa Plarium Krasnodar studio sa proseso sa pag-debug sa CI/CD.

Mga bahin sa pagtukod ug paghatud sa mga aplikasyon sa iOS

Training

Ang matag tawo nga naa sa usa ka paagi o lain nga nahilambigit sa pag-uswag sa mga aplikasyon alang sa mga aparato sa Apple nakadayeg na sa kontrobersyal nga kasayon ​​sa imprastraktura. Ang mga kalisud makit-an bisan diin: gikan sa menu sa profile sa developer hangtod sa mga himan sa pag-debug ug paghimo.

Adunay daghang mga artikulo bahin sa "mga sukaranan" sa Internet, mao nga sulayan namon nga ipasiugda ang panguna nga butang. Ania ang imong gikinahanglan aron malampuson nga matukod ang imong aplikasyon:

  • account sa developer;
  • usa ka aparato nga nakabase sa macOS nga naglihok ingon usa ka server sa pagtukod;
  • namugna sertipiko sa developer, nga gamiton pa sa pagpirma sa aplikasyon;
  • gibuhat nga aplikasyon nga adunay talagsaon ID (Ang importansya sa Bundle Identifier kinahanglan nga matikdan, tungod kay ang paggamit sa wildcard ID nagpaposible sa paggamit sa daghang mga function sa aplikasyon, pananglitan: Associated Domains, Push Notifications, Apple Sign In ug uban pa);
  • profile mga pirma sa aplikasyon.

Ang sertipiko sa developer kinahanglan nga mamugna pinaagi sa Keychain sa bisan unsang macOS device. Ang tipo sa sertipiko hinungdanon kaayo. Depende sa palibot sa aplikasyon (Dev, QA, Staging, Production) magkalainlain kini (Development o Distribution), ingon usab ang tipo sa profile sa pirma sa aplikasyon.

Panguna nga tipo sa mga profile:

  • Development - gituyo alang sa pagpirma sa aplikasyon sa development team, usa ka Development certificate gigamit (type ngalan iPhone Developer: XXXXX);
  • Ad Hoc - gituyo alang sa pagpirma sa usa ka aplikasyon sa pagsulay ug internal nga pag-verify sa departamento sa QA, gigamit ang sertipiko sa Distribution sa developer (type nga ngalan sa Distribution sa iPhone: XXXXX);
  • App Store - buhian ang pagtukod alang sa gawas nga pagsulay pinaagi sa TestFlight ug pag-upload sa App Store, gigamit ang sertipiko sa Distribution sa developer.

Kung maghimo ug mga profile sa Development ug Ad Hoc, gipakita usab kini listahan sa device, diin mahimo nimong i-install ang usa ka pagtukod, nga nagtugot kanimo sa dugang nga pagpugong sa pag-access sa mga tiggamit. Wala’y lista sa mga aparato sa profile sa App Store, tungod kay ang kontrol sa pag-access sa panahon sa sirado nga pagsulay sa beta gidumala sa TestFlight, nga hisgutan sa ulahi.

Alang sa katin-awan, mahimo nimong ipresentar ang profile sa developer sa porma sa usa ka lamesa sa ubos. Gipasayon ​​niini nga masabtan kung unsa nga mga parameter ang atong gikinahanglan alang sa asembliya ug asa kini makuha.

Mga bahin sa pagtukod ug paghatud sa mga aplikasyon sa iOS

Assembly

Aron mas dali ang pagbulag sa mga asembliya pinaagi sa proyekto ug palibot, gigamit namon ang mga ngalan sa profile sama sa ${ProjectName}_${Instance}, kana mao, ngalan sa proyekto + pananglitan (depende sa palibot sa aplikasyon: Dev, QA, GD, Staging, Live, ug uban pa).

Kung gi-import sa build server, giusab sa profile ang ngalan niini sa usa ka talagsaon nga ID ug gibalhin sa folder /Users/$Username/Library/MobileDevice/Provisioning Profiles (Asa $Username katumbas sa ngalan sa user account sa build server).

Adunay duha ka paagi sa paghimo ug *.ipa file - kabilin (PackageApplication) ug moderno (pinaagi sa XcAchive nga paglalang ug pag-eksport). Ang unang pamaagi giisip nga dili na magamit, tungod kay sukad sa bersyon 8.3 ang app file packaging module gikuha gikan sa pag-apod-apod sa Xcode. Aron magamit kini, kinahanglan nimong kopyahon ang module gikan sa daan nga Xcode (bersyon 8.2 ug mas sayo pa) sa folder:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Ug dayon pagdagan ang mando:

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

Sunod kinahanglan nimong kolektahon ang *.app file sa aplikasyon:

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

Asa:

-workspace - agianan sa file sa proyekto.

-scheme — ang laraw nga gigamit, gipiho sa proyekto.

-derivedDataPath — dalan sa pag-download sa gitigom nga aplikasyon (*.app).

CODE_SIGN_IDENTITY — ang ngalan sa developer account, nga mahimong ma-verify sa Keychain (iPhone Developer: XXXX XXXXXXX, walay TeamID sa mga bracket).

Mga bahin sa pagtukod ug paghatud sa mga aplikasyon sa iOS

PROVISIONING_PROFILE - Profile ID alang sa pagpirma sa aplikasyon, nga makuha sa mando:

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

Kung ang aplikasyon naggamit ug dugang nga profile (pananglitan, alang sa Push Notifications), unya imbes nga PROVISIONING_PROFILE ipahibalo:

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

Sunod, ang resulta *.app file kinahanglan nga iputos sa *.ipa. Aron mahimo kini, mahimo nimong gamiton ang usa ka mando sama sa:

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

Bisan pa, kini nga pamaagi giisip nga dili na magamit gikan sa punto sa pagtan-aw sa Apple. May kalabotan ang pagkuha sa *.ipa pinaagi sa pag-eksport gikan sa archive sa aplikasyon.

Una kinahanglan nimo nga kolektahon ang archive gamit ang mando:

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

Ang mga kalainan anaa sa pamaagi sa asembliya ug mga kapilian SYNCHRONOUS_SYMBOL_PROCESSING, nga nagpugong sa pagdiskarga sa simbolo sa oras sa pagtukod.

Sunod kinahanglan namon nga maghimo usa ka file nga adunay mga setting sa pag-eksport:

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

Asa:

$Method — pamaagi sa pagpadala, katumbas sa tipo sa profile sa pirma sa aplikasyon, nga mao, alang sa Pag-uswag ang kantidad mahimong pag-uswag, alang sa Ad Hoc - ad-hoc, ug alang sa App Store - app-store.

$BundleID - Application ID, nga gipiho sa mga setting sa aplikasyon. Mahimo nimong susihon gamit ang mando:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId — ngalan sa developer ug mga setting sa profile ID sa pirma nga gigamit kaniadto ug kinahanglan nga magkatugma sa mga kantidad sa mga setting sa pag-eksport.

$TeamID — napulo ka-digit nga ID sa mga bracket human sa ngalan sa developer, pananglitan: iPhone Developer: …… (XXXXXXXXXX); mahimong masusi sa Keychain.

Sunod, gamit ang export command, makuha namo ang gikinahanglan nga *.ipa file:

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

Доставка

Karon ang nakolekta nga file kinahanglan nga ipadala sa katapusan nga tiggamit, nga mao, gi-install sa aparato.

Adunay daghang mga serbisyo alang sa pag-apod-apod sa Development ug Ad Hoc build, sama sa HockeyApp, AppBlade ug uban pa, apan sa kini nga artikulo maghisgot kami bahin sa usa ka standalone server alang sa pag-apod-apod sa mga aplikasyon.

Ang pag-instalar sa aplikasyon alang sa iOS mahitabo sa 2 nga mga yugto:

  1. Pagdawat sa pagpakita sa pag-install sa aplikasyon pinaagi sa Serbisyo sa Mga Butang.
  2. Pag-instalar sa *.ipa file sumala sa impormasyon nga gitakda sa manifest pinaagi sa HTTPS.

Sa ingon, kinahanglan una namon nga maghimo usa ka pagpakita sa pag-install (type sa file *.plist) nga adunay mando:

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

Sama sa imong makita, ang manifest naglangkob sa hapit tanan nga mga parameter nga nahilambigit sa pagtukod sa aplikasyon.

Bersyon sa aplikasyon ($AppVersion) mahimong masusi gamit ang sugo:

defaults read $ProjectDir/Info CFBundleVersion

Parameter $ipaUrl adunay direktang link aron ma-download ang *.ipa file. Gikan sa ikapitong bersyon sa iOS, ang aplikasyon kinahanglang ma-install pinaagi sa HTTPS. Sa ikawalo nga bersyon, ang pormat sa manifest medyo nausab: mga bloke nga adunay mga setting alang sa mga icon sa aplikasyon sama

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

Busa, aron ma-install ang aplikasyon, igo na ang usa ka yano nga panid sa HTML nga adunay usa ka link nga sama niini:

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

Alang sa mga panginahanglan sa mga departamento sa pag-uswag ug pagsulay, ang Plarium naghimo sa kaugalingon nga aplikasyon sa pag-install sa pagtukod, nga naghatag kanamo:

  • awtonomiya ug kagawasan,
  • sentralisasyon sa kontrol sa pag-access ug luwas nga pag-instalar sa mga aplikasyon pinaagi sa "temporaryo" nga dinamikong gibuhat nga mga link,
  • mapalapdan nga pagpaandar (nga mao, ang development team, kung gikinahanglan, mahimong i-integrate ang nawala nga mga function ngadto sa usa ka kasamtangan nga aplikasyon).

Pagsulay

Karon maghisgot kami bahin sa pre-release nga pagsulay sa aplikasyon nga gigamit TestFlight.

Ang gikinahanglan nga mga kondisyon alang sa pag-download mao ang tipo sa profile sa pirma sa App Store ug ang presensya sa namugna nga mga yawe sa API.

Adunay daghang mga paagi aron ma-download ang aplikasyon:

  • pinaagi sa Xcode (Organizer),
  • pinaagi sa altool,
  • pinaagi sa Application Loader alang sa mas daan nga mga bersyon sa Xcode (karon Transporter).

Alang sa awtomatik nga pag-download, gigamit ang altool, nga adunay duha usab nga pamaagi sa pagtugot:

  • Password nga Piho sa App,
  • API Key.

Mas maayo nga i-download ang aplikasyon gamit ang API Key.

Aron makuha ang API Key, adto sa link ug paghimo og yawe. Dugang pa sa yawe mismo sa *.p8 nga format, magkinahanglan kita og duha ka parametro: IssuerID ug KeyID.

Mga bahin sa pagtukod ug paghatud sa mga aplikasyon sa iOS

Sunod, i-import ang na-download nga yawe sa build server:

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

Sa wala pa i-upload ang aplikasyon sa TestFlight, kinahanglan nimo nga i-validate ang aplikasyon, buhaton namon kini sa mando:

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

Diin apiKey и apiIssuer adunay mga kantidad sa uma gikan sa panid sa paghimo sa yawe sa API.

Sunod, sa malampuson nga pag-validate, among gikarga ang aplikasyon gamit ang mando --upload-app nga adunay parehas nga mga parameter.

Ang aplikasyon pagasulayan sa Apple sa sulod sa usa o duha ka adlaw ug unya mahimong magamit sa mga eksternal nga tigsulay: sila i-email sa mga link alang sa pag-install.

Ang laing paagi sa pag-download sa usa ka aplikasyon pinaagi sa altool mao ang paggamit sa App-Specific Password.

Aron makuha ang App-Specific Password nga kinahanglan nimong adtoan link ug paghimo niini sa seksyon sa Seguridad.

Mga bahin sa pagtukod ug paghatud sa mga aplikasyon sa iOS

Sunod, kinahanglan ka maghimo usa ka rekord sa pagtukod sa server sa Keychain nga adunay kini nga password. Gikan sa bersyon 11 sa Xcode mahimo kini gamit ang sugo:

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

Asa:

$DeveloperName — ang ngalan sa iOS developer account nga gigamit sa pag-log in sa mga serbisyo sa Apple.

$AppPswd — namugna nga Pasword nga Piho sa App.

Sunod, makuha namon ang kantidad sa parameter sa asc-provider ug susihon ang kalampusan sa pag-import sa password gamit ang mando:

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

Atong makuha ang output:

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

Sama sa imong makita, ang gikinahanglan nga Mubo nga Ngalan nga bili (asc-provider) motakdo sa $TeamID parameter nga among gigamit sa pagtukod sa aplikasyon.

Aron ma-validate ug ma-load ang aplikasyon sa TestFlight, gamita ang command:

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

Ingon usa ka bili sa parameter -p makuha nimo ang bili $AppPswd sa unencrypted (klaro) nga porma.

Bisan pa, sama sa nahisgutan na, gikan sa punto sa pagtan-aw sa pasundayag, mas maayo nga pilion ang API Key alang sa pagtugot sa altool, tungod kay ang lainlaing mga bersyon sa Xcode adunay piho nga mga problema ("wala makakita" Keychain, mga sayup sa pagtugot sa panahon sa pag-upload, ug uban pa).

Kana lang, sa tinuod. Nanghinaut ko nga ang tanan nga nalambigit malampuson nga pagtukod ug walay problema nga pagpagawas sa App Store.

Source: www.habr.com

Idugang sa usa ka comment