Vipengele vya kujenga na kutoa programu za iOS

Katika makala hii, tunashiriki uzoefu wa kukusanyika na kuwasilisha maombi ya iOS kwa watumiaji, ambayo studio ya Plarium Krasnodar imekusanya katika mchakato wa kurekebisha CI/CD.

Vipengele vya kujenga na kutoa programu za iOS

Mafunzo ya

Kila mtu ambaye kwa njia moja au nyingine anahusika katika uundaji wa programu za vifaa vya Apple tayari amethamini urahisi wa utata wa miundombinu. Ugumu unapatikana kila mahali: kutoka kwa menyu ya wasifu wa msanidi programu hadi utatuzi na zana za ujenzi.

Kuna vifungu vingi kuhusu "misingi" kwenye mtandao, kwa hivyo tutajaribu kuonyesha jambo kuu. Hivi ndivyo unahitaji ili kuunda programu yako kwa mafanikio:

  • akaunti ya msanidi;
  • kifaa chenye msingi wa macOS kinachofanya kama seva ya ujenzi;
  • yanayotokana cheti cha msanidi programu, ambayo itatumika zaidi kutia saini ombi;
  • programu iliyoundwa na ya kipekee ID (umuhimu wa Kitambulisho cha Bundle unapaswa kuzingatiwa, kwa sababu matumizi ya kitambulisho cha kadi-mwitu hufanya kuwa vigumu kutumia vipengele vingi vya programu, kwa mfano: Vikoa Vinavyohusishwa, Arifa za Push, Apple Ingia na wengine);
  • wasifu saini za maombi.

Cheti cha msanidi lazima kitolewe kupitia Keychain kwenye kifaa chochote cha macOS. Aina ya cheti ni muhimu sana. Kulingana na mazingira ya maombi (Dev, QA, Staging, Production) itatofautiana (Maendeleo au Usambazaji), kama itakavyokuwa aina ya wasifu wa saini ya programu.

Aina kuu za wasifu:

  • Maendeleo - iliyokusudiwa kutia saini ombi la timu ya ukuzaji, cheti cha Maendeleo kinatumika (jina la aina ya iPhone Developer: XXXXX);
  • Ad Hoc - iliyokusudiwa kutia saini ombi la majaribio na uthibitishaji wa ndani na idara ya QA, cheti cha Usambazaji cha msanidi kinatumika (aina ya jina la Usambazaji wa iPhone: XXXXX);
  • Duka la Programu - muundo wa toleo la majaribio ya nje kupitia TestFlight na upakiaji kwenye Duka la Programu, cheti cha Usambazaji cha msanidi kinatumika.

Wakati wa kutengeneza wasifu wa Maendeleo na Ad Hoc, inaonyeshwa pia orodha ya kifaa, ambayo unaweza kusakinisha jengo, ambayo inakuwezesha kuzuia zaidi upatikanaji wa watumiaji. Hakuna orodha ya vifaa katika wasifu wa Duka la Programu, kwa kuwa udhibiti wa ufikiaji wakati wa majaribio ya beta ya watu wachache hushughulikiwa na TestFlight, ambayo itajadiliwa baadaye.

Kwa uwazi, unaweza kuwasilisha wasifu wa msanidi programu kwa namna ya jedwali lililo hapa chini. Hii hurahisisha kuelewa ni vigezo gani tunahitaji kwa mkusanyiko na mahali pa kuvipata.

Vipengele vya kujenga na kutoa programu za iOS

Mkutano

Ili kurahisisha kutenganisha makusanyiko kwa mradi na mazingira, tunatumia majina ya wasifu kama ${ProjectName}_${Instance}, yaani, jina la mradi + mfano (inategemea mazingira ya maombi: Dev, QA, GD, Staging, Live, na kadhalika).

Inapoingizwa kwenye seva ya ujenzi, wasifu hubadilisha jina lake kuwa kitambulisho cha kipekee na huhamishwa hadi kwenye folda /Users/$Username/Library/MobileDevice/Provisioning Profiles (Wapi $Username inalingana na jina la akaunti ya mtumiaji wa seva ya ujenzi).

Kuna njia mbili za kujenga faili ya * .ipa - urithi (PackageApplication) na ya kisasa (kupitia uundaji na usafirishaji wa XcAchive). Njia ya kwanza inachukuliwa kuwa ya kizamani, kwani tangu toleo la 8.3 moduli ya ufungaji wa faili ya programu imeondolewa kutoka kwa usambazaji wa Xcode. Ili kuitumia, unahitaji kunakili moduli kutoka kwa Xcode ya zamani (toleo la 8.2 na mapema) hadi folda:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Na kisha endesha amri:

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

Ifuatayo unahitaji kukusanya faili ya *.app ya programu:

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

Ambapo:

-workspace - njia ya faili ya mradi.

-scheme - mpango uliotumika, ulioainishwa katika mradi.

-derivedDataPath — njia ya kupakua programu iliyokusanywa (*.programu).

CODE_SIGN_IDENTITY — jina la akaunti ya msanidi programu, ambalo linaweza kuthibitishwa katika Keychain (Msanidi wa iPhone: XXXX XXXXXXX, bila Kitambulisho cha Timu kwenye mabano).

Vipengele vya kujenga na kutoa programu za iOS

PROVISIONING_PROFILE - Kitambulisho cha Profaili cha kusaini programu, ambayo inaweza kupatikana kwa amri:

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

Ikiwa programu hutumia wasifu wa ziada (kwa mfano, kwa Arifa za Push), basi badala ya PROVISIONING_PROFILE onyesha:

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

Ifuatayo, faili ya *.programu inayotokana inapaswa kuunganishwa kwenye *.ipa. Ili kufanya hivyo, unaweza kutumia amri kama hii:

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

Hata hivyo, njia hii inachukuliwa kuwa ya kizamani kutoka kwa mtazamo wa Apple. Ni muhimu kupata *.ipa kwa kusafirisha kutoka kwa kumbukumbu ya programu.

Kwanza unahitaji kukusanya kumbukumbu na amri:

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

Tofauti ziko katika njia ya mkutano na chaguzi SYNCHRONOUS_SYMBOL_PROCESSING, ambayo inalemaza upakuaji wa ishara wakati wa ujenzi.

Ifuatayo tunahitaji kutoa faili na mipangilio ya usafirishaji:

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

Ambapo:

$Method — njia ya uwasilishaji, inalingana na aina ya wasifu wa saini ya programu, yaani, kwa Maendeleo, thamani itatengenezwa, kwa Ad Hoc - ad-hoc, na kwa App Store - app store.

$BundleID - Kitambulisho cha programu, ambacho kimeainishwa katika mipangilio ya programu. Unaweza kuangalia na amri:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - jina la msanidi programu na mipangilio sahihi ya kitambulisho cha wasifu ambayo ilitumiwa hapo awali na lazima ilingane na thamani katika mipangilio ya kuhamisha.

$TeamID — Kitambulisho cha tarakimu kumi kwenye mabano baada ya jina la msanidi programu, mfano: Msanidi wa iPhone: …… (XXXXXXXXXX); inaweza kuangaliwa katika Keychain.

Ifuatayo, kwa kutumia amri ya kuuza nje, tunapata faili muhimu ya *.ipa:

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

Utoaji

Sasa faili iliyokusanywa inahitaji kuwasilishwa kwa mtumiaji wa mwisho, yaani, imewekwa kwenye kifaa.

Kuna huduma nyingi za kusambaza ujenzi wa Maendeleo na Ad Hoc, kama vile HockeyApp, AppBlade na zingine, lakini katika nakala hii tutazungumza juu ya seva inayojitegemea ya kusambaza programu.

Kusakinisha programu kwa iOS hufanyika katika hatua 2:

  1. Kupokea onyesho la usakinishaji wa programu kupitia Huduma ya Vipengee.
  2. Usakinishaji wa faili ya *.ipa kulingana na maelezo yaliyobainishwa kwenye faili ya maelezo kupitia HTTPS.

Kwa hivyo, tunahitaji kwanza kutoa faili ya usakinishaji (aina ya faili *.plist) kwa amri:

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

Kama unavyoona, faili ya maelezo ina karibu vigezo vyote vinavyohusika katika kuunda programu.

Toleo la maombi ($AppVersion) inaweza kukaguliwa na amri:

defaults read $ProjectDir/Info CFBundleVersion

Parameter $ipaUrl ina kiungo cha moja kwa moja cha kupakua faili ya *.ipa. Kutoka kwa toleo la saba la iOS, programu lazima isakinishwe kupitia HTTPS. Katika toleo la nane, umbizo la onyesho limebadilika kidogo: vizuizi vilivyo na mipangilio ya ikoni za programu kama vile

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

Kwa hivyo, kusanikisha programu, ukurasa rahisi wa HTML na kiunga kama hiki unatosha:

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

Kwa mahitaji ya idara za ukuzaji na upimaji, Plarium imeunda programu yake ya usanidi wa ujenzi, ambayo inatupa:

  • uhuru na uhuru,
  • ujumuishaji wa udhibiti wa ufikiaji na usakinishaji salama wa programu kupitia viungo vya "muda" vilivyoundwa kwa nguvu,
  • utendakazi unaoweza kupanuka (yaani, timu ya ukuzaji, ikiwa ni lazima, inaweza kuunganisha vitendaji vilivyokosekana kwenye programu iliyopo).

Upimaji

Sasa tutazungumza juu ya majaribio ya kabla ya kutolewa kwa programu kwa kutumia TestFlight.

Masharti yanayohitajika ya kupakua ni aina ya wasifu sahihi wa Duka la Programu na uwepo wa vitufe vya API vilivyotengenezwa.

Kuna njia kadhaa za kupakua programu:

  • kupitia Xcode (Mratibu),
  • kupitia altool,
  • kupitia Loader ya Maombi kwa matoleo ya zamani ya Xcode (sasa Transporter).

Kwa kupakua kiotomatiki, altool hutumiwa, ambayo pia ina njia mbili za idhini:

  • Nenosiri Maalum la Programu,
  • Ufunguo wa API.

Ni vyema kupakua programu kwa kutumia Ufunguo wa API.

Ili kupata Ufunguo wa API, nenda kwa kiungo na kuzalisha ufunguo. Mbali na ufunguo wenyewe katika umbizo la *.p8, tutahitaji vigezo viwili: Kitambulisho cha Mtoaji na Kitambulisho cha Ufunguo.

Vipengele vya kujenga na kutoa programu za iOS

Ifuatayo, ingiza ufunguo uliopakuliwa kwa seva ya ujenzi:

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

Kabla ya kupakia programu kwa TestFlight, unahitaji kuhalalisha programu, tunafanya hivi kwa amri:

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

Je! apiKey и apiIssuer kuwa na maadili ya uga kutoka kwa ukurasa wa uundaji wa ufunguo wa API.

Ifuatayo, baada ya uthibitisho uliofanikiwa, tunapakia programu kwa amri --upload-app na vigezo sawa.

Programu itajaribiwa na Apple ndani ya siku moja au mbili na kisha itapatikana kwa wanaojaribu kutoka nje: watatumiwa viungo kwa barua pepe ili kusakinishwa.

Njia nyingine ya kupakua programu kupitia altool ni kutumia Nenosiri Maalum la Programu.

Ili kupata Nenosiri Maalum la Programu unahitaji kwenda kiungo na kuizalisha katika sehemu ya Usalama.

Vipengele vya kujenga na kutoa programu za iOS

Ifuatayo, unapaswa kuunda rekodi ya seva katika Keychain na nenosiri hili. Kutoka kwa toleo la 11 la Xcode hii inaweza kufanywa kwa amri:

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

Ambapo:

$DeveloperName — jina la akaunti ya msanidi programu wa iOS inayotumiwa kuingia kwenye huduma za Apple.

$AppPswd - Nenosiri Maalum la Programu limetengenezwa.

Ifuatayo, tunapata thamani ya parameta ya mtoaji wa asc na angalia mafanikio ya uingizaji wa nenosiri kwa amri:

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

Tunapata pato:

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

Kama unavyoona, thamani inayohitajika ya Jina Fupi (mtoa huduma wa asc) inalingana na kigezo cha $TeamID ambacho tulitumia wakati wa kuunda programu.

Ili kuhalalisha na kupakia programu kwenye TestFlight, tumia amri:

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

Kama thamani ya kigezo -p unaweza kuchukua thamani $AppPswd kwa njia ambayo haijasimbwa (dhahiri).

Walakini, kama ilivyotajwa tayari, kutoka kwa mtazamo wa utendaji, ni bora kuchagua Ufunguo wa API kwa idhini ya altool, kwani matoleo tofauti ya Xcode yana shida fulani ("haoni" Keychain, makosa ya idhini wakati wa upakiaji, nk).

Hiyo ndiyo yote, kwa kweli. Natamani kila mtu anayehusika apate matoleo yenye mafanikio na yasiyo na matatizo katika Duka la Programu.

Chanzo: mapenzi.com

Kuongeza maoni