Nga ahuatanga o te hanga me te tuku tono iOS

I roto i tenei tuhinga, ka tohatohahia e matou te wheako o te kohikohi me te tuku i nga tono iOS ki nga kaiwhakamahi, i kohia e te Plarium Krasnodar studio i roto i te tukanga o te whakakore i te CI / CD.

Nga ahuatanga o te hanga me te tuku tono iOS

Whakangungu

Ko nga tangata katoa kei roto i tetahi huarahi, i tetahi atu ranei e uru ana ki te whakawhanaketanga o nga tono mo nga taputapu Apple kua tino maioha ki te waatea tautohetohe o te hanganga. Ka kitea nga uaua ki nga waahi katoa: mai i te tahua tohu kaiwhakawhanake ki te patuiro me nga taputapu hanga.

He maha nga tuhinga e pa ana ki nga "taketake" i runga i te Ipurangi, na reira ka ngana matou ki te whakanui i te mea nui. Anei nga mea hei hanga angitu i to tono:

  • pūkete kaiwhakawhanake;
  • he taputapu hanga-a-macOS e mahi ana hei tūmau hanga;
  • hangaia tiwhikete kaiwhakawhanake, ka whakamahia ano hei haina i te tono;
  • hanga tono ki ahurei ID (me tohu te hiranga o te Kaitohu Paihere, no te mea na te whakamahi i te ID kaari mohoao e kore e taea te whakamahi i nga mahi maha o te tono, hei tauira: Nga Waahi Hononga, Panui Panui, Waitohu Apple me etahi atu);
  • tohu hainatanga tono.

Me hanga he tiwhikete kaiwhakawhanake ma te Raaini Matua i runga i tetahi taputapu macOS. He mea nui te momo tiwhikete. I runga i te taiao tono (Dev, QA, Staging, Production) ka rereke (Whakawhanaketanga, Tohatoha ranei), ka pera ano te ahua o te tohu waitohu tono.

Momo matua o nga korero:

  • Whakawhanaketanga - he mea mo te hainatanga i te tono a te roopu whanaketanga, ka whakamahia he tiwhikete Whakawhanaketanga (momo ingoa iPhone Kaiwhakawhanake: XXXXX);
  • Ad Hoc - kua whakaritea mo te hainatanga i te tono whakamatautau me te manatoko o roto e te tari QA, ka whakamahia te tiwhikete Tohaina a te kaiwhakawhanake (momo ingoa Tohatoha iPhone: XXXXX);
  • App Store - tuku hanga mo te whakamatautau waho ma te TestFlight me te tuku ki te Toa App, ka whakamahia te tiwhikete Tohaina a te kaiwhakawhanake.

I te wa e whakaputa ana i nga korero Whanaketanga me Ad Hoc, ka tohuhia ano rārangi taputapu, ka taea e koe te whakauru i tetahi hanga, ka taea e koe te aukati i te urunga mo nga kaiwhakamahi. Karekau he rarangi o nga taputapu kei roto i te kotaha App Store, na te mea ko te mana uru i nga wa whakamatautau beta kati ka whakahaerehia e TestFlight, ka korerohia i muri mai.

Mo te whakamarama, ka taea e koe te whakaatu i te korero a te kaiwhakawhanake i te ahua o te ripanga i raro nei. Ma tenei ka maamaa ake te maarama he aha nga tawhā e hiahiatia ana mo te huihuinga me te wahi hei tiki mai.

Nga ahuatanga o te hanga me te tuku tono iOS

Tuhinga

Kia ngawari ake te wehe i nga huihuinga ma te kaupapa me te taiao, ka whakamahia e matou nga ingoa tohu penei ${ProjectName}_${Instance}, ara, ingoa kaupapa + tauira (e whakawhirinaki ana ki te taiao tono: Dev, QA, GD, Staging, Live, me etahi atu).

Ina kawemai ki te tūmau hanga, ka huri te kōtaha i tōna ingoa ki tētahi ID ahurei ka nukuhia ki te kōpaki /Users/$Username/Library/MobileDevice/Provisioning Profiles (Kei hea $Username e hāngai ana ki te ingoa pūkete kaiwhakamahi o te tūmau hanga).

E rua nga huarahi ki te hanga i te konae *.ipa - tuku iho (PackageApplication) me te hou (ma te hanga me te kaweake a XcAchive). Ko te tikanga tuatahi ka kiia he tawhito, no te mea mai i te putanga 8.3 kua nekehia atu te konae konae konae i te tohatoha Xcode. Hei whakamahi, me kape e koe te kōwae mai i te Xcode tawhito (putanga 8.2 me mua) ki te kōpaki:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Na ka whakahaere i te whakahau:

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

Whai muri me kohia e koe te *.app konae o te tono:

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

Kei hea:

-workspace — ara ki te konae kaupapa.

-scheme — te kaupapa i whakamahia, kua tohua i roto i te kaupapa.

-derivedDataPath — ara ki te tango i te tono kua huihuia (*.app).

CODE_SIGN_IDENTITY — te ingoa o te kaute kaiwhakawhanake, ka taea te manatoko i roto i te Keychain (iPhone Developer: XXXX XXXXXXX, kaore he TeamID i roto i nga taiapa).

Nga ahuatanga o te hanga me te tuku tono iOS

PROVISIONING_PROFILE — Profile ID mo te hainatanga i te tono, ka taea te tiki ma te whakahau:

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

Mena kei te whakamahi te tono i tetahi korero taapiri (hei tauira, mo nga Whakamohiotanga Push), hei utu PROVISIONING_PROFILE tohu:

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

I muri mai, ko te hua *.app konae me koopaki ki *.ipa. Ki te mahi i tenei, ka taea e koe te whakamahi i tetahi whakahau penei:

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

Heoi, ko tenei tikanga ka kiia he tawhito mai i te tirohanga a Apple. E tika ana kia whiwhi *.ipa ma te kaweake mai i te puranga tono.

Tuatahi me kohikohi koe i te puranga me te whakahau:

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

Ko nga rereketanga kei roto i te tikanga huihuinga me nga whiringa SYNCHRONOUS_SYMBOL_PROCESSING, ka whakakore i te tango tohu i te wa hanga.

Panuku me whakaputa he konae me nga tautuhinga kaweake:

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

Kei hea:

$Method — te tikanga tuku, e rite ana ki te momo tohu tohu waitohu tono, ara, mo te Whanaketanga ko te uara te whanaketanga, mo te Ad Hoc - ad-hoc, me te App Store - toa-taupānga.

$BundleID - Taupānga ID, kua tohua i roto i nga tautuhinga tono. Ka taea e koe te tirotiro me te whakahau:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId — ingoa kaiwhakawhanake me nga tautuhinga tohu tohu waitohu i whakamahia i mua, me rite ki nga uara o nga tautuhinga kaweake.

$TeamID — tekau-mati ID i roto i nga taiapa i muri i te ingoa o te kaiwhakawhanake, tauira: iPhone Kaiwhakawhanake: …… (XXXXXXXXXX); Ka taea te tirotiro i roto i te Keychain.

I muri mai, ma te whakamahi i te whakahau kaweake, ka whiwhi tatou i te konae *.ipa e tika ana:

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

Mōhiohio kaipuke

Inaianei me tuku te konae kua kohia ki te kaiwhakamahi mutunga, ara, kua whakauruhia ki runga i te taputapu.

He maha nga ratonga mo te tohatoha Whakawhanaketanga me nga hangahanga Ad Hoc, penei i te HockeyApp, AppBlade me etahi atu, engari i roto i tenei tuhinga ka korerohia e matou mo tetahi kaitoro tuuturu mo te tohatoha tono.

Ko te whakauru i te tono mo iOS e 2 nga waahanga:

  1. Te whiwhi i te whakaaturanga whakaurunga tono ma te Ratonga Tuemi.
  2. Te whakaurunga o te *.ipa konae kia rite ki nga korero kua tohua ki te whakaaturanga ma te HTTPS.

No reira, me whakaputa i te whakaaturanga whakaurunga (momo konae *.plist) me te whakahau:

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

Ka taea e koe te kite, kei roto i te whakaaturanga nga taapiri katoa e uru ana ki te hanga i te tono.

Putanga tono ($AppVersion) ka taea te tirotiro me te whakahau:

defaults read $ProjectDir/Info CFBundleVersion

Taumahi $ipaUrl kei roto he hono tika ki te tango i te *.ipa konae. Mai i te putanga tuawhitu o iOS, me whakauru te tono ma te HTTPS. I te putanga tuawaru, kua rereke te ahua o te whakaaturanga: poraka me nga tautuhinga mo nga tohu tono penei

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

No reira, ki te whakauru i te tono, he wharangi HTML ngawari me te hono penei he nui:

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

Mo nga hiahia o nga tari whanaketanga me nga whakamatautau, kua hangaia e Plarium tana ake tono whakaurunga hanga, e homai ana ki a maatau:

  • mana motuhake me te mana motuhake,
  • te whakaurunga o te mana uru me te whakaurunga o nga tono na roto i nga hononga "waahanga" i hangaia,
  • taumahinga whakawhanui (ara, ka taea e te roopu whanaketanga, mena e tika ana, te whakauru i nga mahi ngaro ki roto i te tono o naianei).

Te whakamātautau

Inaianei ka korero maatau mo te whakamatautau i mua i te tukunga o te tono ma te whakamahi TestFlight.

Ko nga tikanga e hiahiatia ana mo te tango ko te ahua o te tohu waitohu a te Toa App me te noho mai o nga taviri API kua hangaia.

He maha nga huarahi hei tango i te tono:

  • mā Xcode (Kaiwhakahaere),
  • mā altool,
  • mā te Puta tono mo nga putanga tawhito o Xcode (inaianei Transporter).

Mo te tango aunoa, ka whakamahia te altool, e rua ano nga tikanga whakamana:

  • Kupuhipa Taupānga Tauwhāiti,
  • Kī API.

He pai ake te tango i te tono ma te whakamahi i te Kī API.

Ki te tiki i te Kī API, haere ki hono me te whakaputa i te kī. I tua atu i te taviri i roto i te whakatakotoranga *.p8, me rua nga tawhā: IssuerID me KeyID.

Nga ahuatanga o te hanga me te tuku tono iOS

Panuku, kawemai i te taviri kua tikiake ki te tūmau hanga:

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

I mua i te tuku i te tono ki TestFlight, me whakamana e koe te tono, ka mahia tenei ma te whakahau:

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

Kei hea apiKey и apiIssuer he uara mara mai i te wharangi whakatipuranga matua API.

I muri mai, i runga i te whakamanatanga angitu, ka utaina e matou te tono me te whakahau --upload-app me nga tawhā rite.

Ka whakamatauria te tono e Apple i roto i te kotahi, e rua ranei nga ra, katahi ka waatea ki nga kaiwhakamatautau o waho: ka tukuna he hononga imeera mo te whakaurunga.

Ko tetahi atu huarahi ki te tango tono ma te altool ko te whakamahi Kupuhipa Tau-taupānga.

Ki te tiki i te Kupuhipa Taupānga Taupānga me haere koe ki hono ka whakaputa i roto i te waahanga Haumarutanga.

Nga ahuatanga o te hanga me te tuku tono iOS

I muri mai, me hanga e koe he rekoata tūmau hanga i Keychain me tenei kupuhipa. Mai i te putanga 11 o Xcode ka taea tenei ma te whakahau:

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

Kei hea:

$DeveloperName — te ingoa o te pūkete kaiwhakawhanake iOS i whakamahia ki te takiuru ki nga ratonga Apple.

$AppPswd — kua hanga Kupuhipa Taupānga Tauwhāiti.

I muri mai, ka whiwhi tatou i te uara o te tawhā kaiwhakarato-asc ka tirohia te angitu o te kawemai kupuhipa me te whakahau:

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

Ka whiwhi tatou i te putanga:

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

Ka kite koe, ko te uara Ingoa Poto e hiahiatia ana (kaiwhakarato-asc) e rite ana ki te tawhā $TeamID i whakamahia e matou i te wa e hanga ana te tono.

Hei whakamana me te uta i te tono ki TestFlight, whakamahia te whakahau:

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

Hei uara tawhā -p ka taea e koe te tango i te uara $AppPswd i roto i te ahua kore whakamuna (marama).

Engari, i te mea kua whakahuahia ake nei, mai i te tirohanga o te mahi, he pai ake te whiriwhiri i te API Key mo te whakamanatanga altool, no te mea he raruraru etahi o nga putanga rereke o Xcode ("kaore e kite" Keychain, nga hapa whakamana i te wa e tuku ana, me etahi atu).

Ko te katoa, mau. E hiahia ana ahau ki nga tangata katoa e whai waahi ana ki te hanga angitu me te whakaputanga kore raru i te Toa App.

Source: will.com

Tāpiri i te kōrero