Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ Π΄Π΅Π»ΠΈΠΌΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΡΠΊΠ»Π°ΠΏΠ°ΡΠ° ΠΈ ΠΈΡΠΏΠΎΡΡΠΊΠ΅ ΠΈΠΠ‘ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΠΌΠ°, ΠΊΠΎΡΠ΅ ΡΠ΅ ΡΡΡΠ΄ΠΈΠΎ ΠΠ»Π°ΡΠΈΡΠΌ ΠΡΠ°ΡΠ½ΠΎΠ΄Π°Ρ Π°ΠΊΡΠΌΡΠ»ΠΈΡΠ°ΠΎ Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΊΠ»Π°ΡΠ°ΡΠ° Π³ΡΠ΅ΡΠ°ΠΊΠ° Π¦Π/Π¦Π.
ΠΠ±ΡΠΊΠ°
Π‘Π²Π°ΠΊΠ° ΠΎΡΠΎΠ±Π° ΠΊΠΎΡΠ° ΡΠ΅ Π½Π° ΠΎΠ²Π°Ρ ΠΈΠ»ΠΈ ΠΎΠ½Π°Ρ Π½Π°ΡΠΈΠ½ ΡΠΊΡΡΡΠ΅Π½Π° Ρ ΡΠ°Π·Π²ΠΎΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΠΠΏΠΏΠ»Π΅ ΡΡΠ΅ΡΠ°ΡΠ΅ Π²Π΅Ρ ΡΠ΅ ΡΠ΅Π½ΠΈΠ»Π° ΠΊΠΎΠ½ΡΡΠΎΠ²Π΅ΡΠ·Π½Ρ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅. ΠΠΎΡΠ΅ΡΠΊΠΎΡΠ΅ ΡΠ΅ Π½Π°Π»Π°Π·Π΅ ΡΠ²ΡΠ΄Π°: ΠΎΠ΄ ΠΌΠ΅Π½ΠΈΡΠ° ΠΏΡΠΎΡΠΈΠ»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° Π΄ΠΎ Π°Π»Π°ΡΠ° Π·Π° ΠΎΡΠΊΠ»Π°ΡΠ°ΡΠ΅ Π³ΡΠ΅ΡΠ°ΠΊΠ° ΠΈ ΠΏΡΠ°Π²ΡΠ΅ΡΠ΅.
ΠΠ° ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΡ ΠΈΠΌΠ° Π΄ΠΎΡΡΠ° ΡΠ»Π°Π½Π°ΠΊΠ° ΠΎ βΠΎΡΠ½ΠΎΠ²Π°ΠΌΠ°β, ΠΏΠ° ΡΠ΅ΠΌΠΎ ΠΏΠΎΠΊΡΡΠ°ΡΠΈ Π΄Π° ΠΈΡΡΠ°ΠΊΠ½Π΅ΠΌΠΎ ΠΎΠ½ΠΎ Π³Π»Π°Π²Π½ΠΎ. ΠΠ²ΠΎ ΡΡΠ° Π²Π°ΠΌ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π΄Π° Π±ΠΈΡΡΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΠ²ΠΎΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ:
Π½Π°Π»ΠΎΠ³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° ;- ΡΡΠ΅ΡΠ°Ρ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΌΠ°ΡΠΠ‘-Ρ ΠΊΠΎΡΠΈ Π΄Π΅Π»ΡΡΠ΅ ΠΊΠ°ΠΎ ΡΠ΅ΡΠ²Π΅Ρ Π·Π° ΠΈΠ·Π³ΡΠ°Π΄ΡΡ;
- Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½
ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° , ΠΊΠΎΡΠΈ ΡΠ΅ ΡΠ΅ Π΄Π°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π·Π° ΠΏΠΎΡΠΏΠΈΡΠΈΠ²Π°ΡΠ΅ ΠΏΡΠΈΡΠ°Π²Π΅; - ΠΊΡΠ΅ΠΈΡΠ°Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠ° ΡΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΠΌ
ID (ΡΡΠ΅Π±Π° Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡΡΠΈ Π²Π°ΠΆΠ½ΠΎΡΡ ΠΡΠ½Π΄Π»Π΅ ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠ΅Ρ-Π°, ΡΠ΅Ρ ΡΠΏΠΎΡΡΠ΅Π±Π° ΡΠΎΠΊΠ΅Ρ ΠΠ-Π° ΠΎΠ½Π΅ΠΌΠΎΠ³ΡΡΠ°Π²Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ: ΠΡΠΈΠ΄ΡΡΠΆΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅Π½ΠΈ, ΠΡΡΡ ΠΎΠ±Π°Π²Π΅ΡΡΠ΅ΡΠ°, ΠΠΏΠΏΠ»Π΅ Π‘ΠΈΠ³Π½ ΠΠ½ ΠΈ Π΄ΡΡΠ³Π΅); ΠΏΡΠΎΡΠΈΠ» ΠΏΠΎΡΠΏΠΈΡΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°.
Π‘Π΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° ΠΌΠΎΡΠ° Π΄Π° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ΅ ΠΏΡΠ΅ΠΊΠΎ ΠΠ΅ΠΈΡΡ Π°ΠΈΠ½-Π° Π½Π° Π±ΠΈΠ»ΠΎ ΠΊΠΎΠΌ ΠΌΠ°ΡΠΠ‘ ΡΡΠ΅ΡΠ°ΡΡ. ΠΡΡΡΠ° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΡΠ΅ Π²Π΅ΠΎΠΌΠ° Π²Π°ΠΆΠ½Π°. Π£ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄ ΠΎΠΊΡΡΠΆΠ΅ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ (ΠΠ΅Π², ΠΠ, Π‘ΡΠ°Π³ΠΈΠ½Π³, ΠΡΠΎΠ΄ΡΡΡΠΈΠΎΠ½) ΠΎΠ½ΠΎ ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΠΎΠ²Π°ΡΠΈ (ΡΠ°Π·Π²ΠΎΡ ΠΈΠ»ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ°), ΠΊΠ°ΠΎ ΠΈ ΡΠΈΠΏ ΠΏΡΠΎΡΠΈΠ»Π° ΠΏΠΎΡΠΏΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅.
ΠΠ»Π°Π²Π½Π΅ Π²ΡΡΡΠ΅ ΠΏΡΠΎΡΠΈΠ»Π°:
- Π Π°Π·Π²ΠΎΡ β Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π·Π° ΠΏΠΎΡΠΏΠΈΡΠΈΠ²Π°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠ°Π·Π²ΠΎΡΠ½ΠΎΠ³ ΡΠΈΠΌΠ°, ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅ Π Π°Π·Π²ΠΎΡΠ½ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ (Π½Π°Π·ΠΈΠ² ΡΠΈΠΏΠ° ΠΈΠΡ ΠΎΠ½Π΅ ΠΠ΅Π²Π΅Π»ΠΎΠΏΠ΅Ρ: ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘);
- ΠΠ΄ Π₯ΠΎΡ - Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π·Π° ΠΏΠΎΡΠΏΠΈΡΠΈΠ²Π°ΡΠ΅ ΡΠ΅ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Ρ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ ΠΎΠ΄ ΡΡΡΠ°Π½Π΅ ΠΠ ΠΎΠ΄Π΅ΡΠ΅ΡΠ°, ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° (Π½Π°Π·ΠΈΠ² ΡΠΈΠΏΠ° ΠΈΠΡ ΠΎΠ½Π΅ ΠΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΎΠ½: ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘);
- ΠΠΏΠΏ Π‘ΡΠΎΡΠ΅ - Π²Π΅ΡΠ·ΠΈΡΠ° Π·Π° Π΅ΠΊΡΡΠ΅ΡΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠ΅ΠΊΠΎ Π’Π΅ΡΡΠ€Π»ΠΈΠ³Ρ Ρ-Π° ΠΈ ΠΎΡΠΏΡΠ΅ΠΌΠ°ΡΠ΅ Ρ ΠΠΏΠΏ Π‘ΡΠΎΡΠ΅, ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ°.
ΠΡΠΈΠ»ΠΈΠΊΠΎΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ° ΡΠ°Π·Π²ΠΎΡΠ½ΠΈΡ
ΠΈ Π°Π΄ Ρ
ΠΎΡ ΠΏΡΠΎΡΠΈΠ»Π°, ΡΠΎ ΡΠ΅ ΡΠ°ΠΊΠΎΡΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ
Π Π°Π΄ΠΈ ΡΠ°ΡΠ½ΠΎΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠΈ ΠΏΡΠΎΡΠΈΠ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° Ρ ΠΎΠ±Π»ΠΈΠΊΡ ΡΠ°Π±Π΅Π»Π΅ ΠΈΡΠΏΠΎΠ΄. Π’Π°ΠΊΠΎ ΡΠ΅ Π»Π°ΠΊΡΠ΅ ΡΠ°Π·ΡΠΌΠ΅ΡΠΈ ΠΊΠΎΡΠΈ ΡΡ Π½Π°ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° ΠΌΠΎΠ½ΡΠ°ΠΆΡ ΠΈ ΠΎΠ΄Π°ΠΊΠ»Π΅ Π΄Π° ΠΈΡ Π½Π°Π±Π°Π²ΠΈΠΌΠΎ.
Π‘ΠΊΡΠΏΡΡΠΈΠ½Π°
ΠΠ° Π±ΠΈΡΠΌΠΎ ΠΎΠ»Π°ΠΊΡΠ°Π»ΠΈ ΠΎΠ΄Π²Π°ΡΠ°ΡΠ΅ ΡΠΊΠ»ΠΎΠΏΠΎΠ²Π° ΠΏΠΎ ΠΏΡΠΎΡΠ΅ΠΊΡΡ ΠΈ ΠΎΠΊΡΡΠΆΠ΅ΡΡ, ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΈΠΌΠ΅Π½Π° ΠΏΡΠΎΡΠΈΠ»Π° ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ ${ProjectName}_${Instance}
, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ Π½Π°Π·ΠΈΠ² ΠΏΡΠΎΡΠ΅ΠΊΡΠ° + ΠΈΠ½ΡΡΠ°Π½ΡΠ° (Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΠΎΠΊΡΡΠΆΠ΅ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅: ΠΠ΅Π², ΠΠ, ΠΠ, Π‘ΡΠ°Π³ΠΈΠ½Π³, ΠΠΈΠ²Π΅, ΠΈΡΠ΄.).
ΠΠ°Π΄Π° ΡΠ΅ ΡΠ²Π΅Π·Π΅ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π·Π° ΠΈΠ·Π³ΡΠ°Π΄ΡΡ, ΠΏΡΠΎΡΠΈΠ» ΠΌΠ΅ΡΠ° ΡΠ²ΠΎΡΠ΅ ΠΈΠΌΠ΅ Ρ ΡΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈ ΠΠ ΠΈ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ° ΡΠ΅ Ρ ΡΠ°ΡΡΠΈΠΊΠ»Ρ /Users/$Username/Library/MobileDevice/Provisioning Profiles
(ΠΠ΄Π΅ $Username
ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° ΠΈΠΌΠ΅Π½Ρ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΎΠ³ Π½Π°Π»ΠΎΠ³Π° ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°Π΄ΡΡ).
ΠΠΎΡΡΠΎΡΠ΅ Π΄Π²Π° Π½Π°ΡΠΈΠ½Π° Π·Π° ΠΏΡΠ°Π²ΡΠ΅ΡΠ΅ *.ΠΈΠΏΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ β ΡΡΠ°ΡΠΈΡΠ° (ΠΠ°ΡΠΊΠ°Π³Π΅ΠΠΏΠΏΠ»ΠΈΡΠ°ΡΠΈΠΎΠ½) ΠΈ ΠΌΠΎΠ΄Π΅ΡΠ½Π° (ΠΏΡΠ΅ΠΊΠΎ ΠΡΡΠΡΡ
ΠΈΠ²Π΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ° ΠΈ ΠΈΠ·Π²ΠΎΠ·Π°). ΠΡΠ²ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ ΡΠΌΠ°ΡΡΠ° Π·Π°ΡΡΠ°ΡΠ΅Π»ΠΈΠΌ, ΠΏΠΎΡΡΠΎ ΡΠ΅ ΠΎΠ΄ Π²Π΅ΡΠ·ΠΈΡΠ΅ 8.3 ΠΌΠΎΠ΄ΡΠ» Π·Π° ΠΏΠ°ΠΊΠΎΠ²Π°ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠΊΠ»ΠΎΡΠ΅Π½ ΠΈΠ· ΠΡΡΠΎΠ΄Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ΅. ΠΠ° Π±ΠΈΡΡΠ΅ Π³Π° ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΌΠΎΠ΄ΡΠ» ΠΈΠ· ΡΡΠ°ΡΠΎΠ³ ΠΡΡΠΎΠ΄Π΅-Π° (Π²Π΅ΡΠ·ΠΈΡΠ° 8.2 ΠΈ ΡΠ°Π½ΠΈΡΠ΅) Ρ ΡΠ°ΡΡΠΈΠΊΠ»Ρ:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
Π Π·Π°ΡΠΈΠΌ ΠΏΠΎΠΊΡΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/*
ΠΠ°ΡΠΈΠΌ ΠΌΠΎΡΠ°ΡΠ΅ ΠΏΡΠΈΠΊΡΠΏΠΈΡΠΈ *.Π°ΠΏΠΏ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅:
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
ΠΠ΄Π΅ ΡΠ΅:
-workspace
β ΠΏΡΡΠ°ΡΠ° Π΄ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΠΏΡΠΎΡΠ΅ΠΊΡΠ°.
-scheme
β ΠΊΠΎΡΠΈΡΡΠ΅Π½Π° ΡΠ΅ΠΌΠ°, Π½Π°Π²Π΅Π΄Π΅Π½Π° Ρ ΠΏΡΠΎΡΠ΅ΠΊΡΡ.
-derivedDataPath
β ΠΏΡΡΠ°ΡΠ° Π·Π° ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ°ΡΠ΅ ΡΠ°ΡΡΠ°Π²ΡΠ΅Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ (*.Π°ΠΏΠΏ).
CODE_SIGN_IDENTITY
β Π½Π°Π·ΠΈΠ² Π½Π°Π»ΠΎΠ³Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ°, ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π²Π΅ΡΠΈΡΠΈΠΊΠΎΠ²Π°ΡΠΈ Ρ ΠΠ΅ΠΈΡΡ
Π°ΠΈΠ½-Ρ (ΠΈΠΡ
ΠΎΠ½Π΅ ΠΠ΅Π²Π΅Π»ΠΎΠΏΠ΅Ρ: ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘, Π±Π΅Π· Π’Π΅Π°ΠΌΠΠ-Π° Ρ Π·Π°Π³ΡΠ°Π΄Π°ΠΌΠ°).
PROVISIONING_PROFILE
β ΠΠ ΠΏΡΠΎΡΠΈΠ»Π° Π·Π° ΠΏΠΎΡΠΏΠΈΡΠΈΠ²Π°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄ΠΎΠ±ΠΈΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ:
cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//'
ΠΠΊΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ Π΄ΠΎΠ΄Π°ΡΠ½ΠΈ ΠΏΡΠΎΡΠΈΠ» (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° ΠΡΡΡ
ΠΎΠ±Π°Π²Π΅ΡΡΠ΅ΡΠ°), ΠΎΠ½Π΄Π° ΡΠΌΠ΅ΡΡΠΎ PROVISIONING_PROFILE
Π½Π°Π·Π½Π°ΡΠΈΡΠΈ:
APP_PROFILE=β$AppProfileβ
EXTENSION_PROFILE=β$ExtProfileβ
ΠΠ°ΡΠΈΠΌ, ΡΠ΅Π·ΡΠ»ΡΡΡΡΡΡ *.Π°ΠΏΠΏ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ ΡΡΠ΅Π±Π° ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΠΈ Ρ *.ΠΈΠΏΠ°. ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠΎ ΡΡΠ°Π΄ΠΈΠ»ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅:
/usr/bin/xcrun --sdk iphoneos PackageApplication
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app")
-o "$ProjectDir/$ProjectName_$Instance.ipa"
ΠΠ΅ΡΡΡΠΈΠΌ, ΠΎΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ ΡΠΌΠ°ΡΡΠ° Π·Π°ΡΡΠ°ΡΠ΅Π»ΠΈΠΌ ΡΠ° ΠΠΏΠΏΠ»Π΅ΠΎΠ²Π΅ ΡΠ°ΡΠΊΠ΅ Π³Π»Π΅Π΄ΠΈΡΡΠ°. ΠΠ°ΠΆΠ½ΠΎ ΡΠ΅ Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ΅ΡΠ΅ *.ΠΈΠΏΠ° ΠΈΠ·Π²ΠΎΠ·ΠΎΠΌ ΠΈΠ· Π°ΡΡ ΠΈΠ²Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅.
ΠΡΠ²ΠΎ ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΈΠΊΡΠΏΠΈΡΠ΅ Π°ΡΡ ΠΈΠ²Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ:
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
Π Π°Π·Π»ΠΈΠΊΠ΅ Π»Π΅ΠΆΠ΅ Ρ Π½Π°ΡΠΈΠ½Ρ ΠΌΠΎΠ½ΡΠ°ΠΆΠ΅ ΠΈ ΠΎΠΏΡΠΈΡΠ°ΠΌΠ° SYNCHRONOUS_SYMBOL_PROCESSING
, ΡΡΠΎ ΠΎΠ½Π΅ΠΌΠΎΠ³ΡΡΠ°Π²Π° ΠΈΡΡΠΎΠ²Π°Ρ ΡΠΈΠΌΠ±ΠΎΠ»Π° Ρ Π²ΡΠ΅ΠΌΠ΅ ΠΈΠ·ΡΠ°Π΄Π΅.
ΠΠ°ΡΠΈΠΌ ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ΅ΠΌΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ ΡΠ° ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠΈΠΌΠ° ΠΈΠ·Π²ΠΎΠ·Π°:
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
ΠΠ΄Π΅ ΡΠ΅:
$Method
β Π½Π°ΡΠΈΠ½ ΠΈΡΠΏΠΎΡΡΠΊΠ΅, ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° ΡΠΈΠΏΡ ΠΏΡΠΎΡΠΈΠ»Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΏΠΎΡΠΏΠΈΡΠ°, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ Π·Π° ΡΠ°Π·Π²ΠΎΡ ΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π±ΠΈΡΠΈ ΡΠ°Π·Π²ΠΎΡ, Π·Π° ΠΠ΄ Π₯ΠΎΡ - Π°Π΄-Ρ
ΠΎΡ, Π° Π·Π° ΠΠΏΠΏ Π‘ΡΠΎΡΠ΅ - ΠΏΡΠΎΠ΄Π°Π²Π½ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°.
$BundleID
β ΠΠ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, ΠΊΠΎΡΠΈ ΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½ Ρ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠΈΠΌΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName ΠΈ $ProfileId
β ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° ΠΈΠΌΠ΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° ΠΈ ΠΏΡΠΎΡΠΈΠ»Π° ΠΏΠΎΡΠΏΠΈΡΠ° ΠΊΠΎΡΠ° ΡΡ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅Π½Π° ΠΈ ΠΌΠΎΡΠ°ΡΡ Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΠΌΠ° Ρ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠΈΠΌΠ° ΠΈΠ·Π²ΠΎΠ·Π°.
$TeamID
β Π΄Π΅ΡΠ΅ΡΠΎΡΠΈΡΡΠ΅Π½ΠΈ ΠΠ Ρ Π·Π°Π³ΡΠ°Π΄Π°ΠΌΠ° ΠΈΠ·Π° ΠΈΠΌΠ΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ°, ΠΏΡΠΈΠΌΠ΅Ρ: ΠΈΠΡ
ΠΎΠ½Π΅ ΠΠ΅Π²Π΅Π»ΠΎΠΏΠ΅Ρ: β¦β¦ (ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘ΠΠ‘); ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠΈ Ρ ΠΠ΅ΠΈΡΡ
Π°ΠΈΠ½-Ρ.
ΠΠ°ΡΠΈΠΌ, ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π° ΠΈΠ·Π²ΠΎΠ·, Π΄ΠΎΠ±ΠΈΡΠ°ΠΌΠΎ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½Ρ *.ΠΈΠΏΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΡ:
xcodebuild
-exportArchive
-archivePath $ProjectDir/build/$ProjectName.xcarchive
-exportPath $ProjectDir
-exportOptionsPlist $ExportSettings
ΠΡΠΏΠΎΡΡΠΊΠ°
Π‘Π°Π΄Π° ΠΏΡΠΈΠΊΡΠΏΡΠ΅Π½Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ ΡΡΠ΅Π±Π° Π΄ΠΎΡΡΠ°Π²ΠΈΡΠΈ ΠΊΡΠ°ΡΡΠ΅ΠΌ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΡ, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠΈ Π½Π° ΡΡΠ΅ΡΠ°Ρ.
ΠΠΎΡΡΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡ ΠΠ΅Π²Π΅Π»ΠΎΠΏΠΌΠ΅Π½Ρ ΠΈ ΠΠ΄ Π₯ΠΎΡ Π±ΡΠΈΠ»Π΄-ΠΎΠ²Π°, ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ Π₯ΠΎΡΠΊΠ΅ΠΈΠΠΏΠΏ, ΠΠΏΠΏΠΠ»Π°Π΄Π΅ ΠΈ Π΄ΡΡΠ³ΠΈ, Π°Π»ΠΈ Ρ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΠ΅ΠΌΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΠΈ ΠΎ ΡΠ°ΠΌΠΎΡΡΠ°Π»Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΡ Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π·Π° ΠΈΠΠ‘ ΠΎΠ΄Π²ΠΈΡΠ° ΡΠ΅ Ρ 2 ΡΠ°Π·Π΅:
- ΠΡΠΈΡΠ΅ΠΌ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ° Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΏΡΠ΅ΠΊΠΎ ΡΡΠ»ΡΠ³Π΅ ΠΡΠ΅ΠΌΡ.
- ΠΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° *.ΠΈΠΏΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Ρ ΡΠΊΠ»Π°Π΄Ρ ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°ΠΌΠ° Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΌ Ρ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΊΠΎ Π₯Π’Π’ΠΠ‘-Π°.
ΠΠ°ΠΊΠ»Π΅, ΠΏΡΠ²ΠΎ ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ΅ΠΌΠΎ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΎΠ½ΠΈ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ (ΡΠΈΠΏ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ *.ΠΏΠ»ΠΈΡΡ) ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ:
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
ΠΠ°ΠΎ ΡΡΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ ΡΠ°Π΄ΡΠΆΠΈ ΡΠΊΠΎΡΠΎ ΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΊΡΡΡΠ΅Π½Π΅ Ρ ΠΈΠ·Π³ΡΠ°Π΄ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅.
ΠΠ΅ΡΠ·ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ($AppVersion
) ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ:
defaults read $ProjectDir/Info CFBundleVersion
ΠΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ $ipaUrl
ΡΠ°Π΄ΡΠΆΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½Ρ Π²Π΅Π·Ρ Π·Π° ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ°ΡΠ΅ *.ΠΈΠΏΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅. ΠΠ΄ ΡΠ΅Π΄ΠΌΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ ΠΈΠΠ‘-Π°, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΌΠΎΡΠ° Π±ΠΈΡΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° ΠΏΡΠ΅ΠΊΠΎ Π₯Π’Π’ΠΠ‘-Π°. Π£ ΠΎΡΠΌΠΎΡ Π²Π΅ΡΠ·ΠΈΡΠΈ, ΡΠΎΡΠΌΠ°Ρ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ° ΡΠ΅ ΠΌΠ°Π»ΠΎ ΠΏΡΠΎΠΌΠ΅ΡΠ΅Π½: Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΡΠ° ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠΈΠΌΠ° Π·Π° ΠΈΠΊΠΎΠ½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΏΠΎΠΏΡΡ
<images>
<image>...</image>
</images>
ΠΠ°ΠΊΠ»Π΅, Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π΄ΠΎΠ²ΠΎΡΠ½Π° ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° Π₯Π’ΠΠ ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ° ΠΎΠ²Π°ΠΊΠ²ΠΎΠΌ Π²Π΅Π·ΠΎΠΌ:
itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plist
ΠΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ ΠΎΠ΄Π΅ΡΠ΅ΡΠ° Π·Π° ΡΠ°Π·Π²ΠΎΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅, ΠΠ»Π°ΡΠΈΡΠΌ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΠΎ ΡΠΎΠΏΡΡΠ²Π΅Π½Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π·Π° ΠΌΠΎΠ½ΡΠ°ΠΆΡ ΠΊΠΎΡΠ° Π½Π°ΠΌ Π΄Π°ΡΠ΅:
- ΡΠ°ΠΌΠΎΡΡΠ°Π»Π½ΠΎΡΡ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ,
- ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ ΠΏΡΠΈΡΡΡΠΏΠ° ΠΈ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΏΡΠ΅ΠΊΠΎ βΠΏΡΠΈΠ²ΡΠ΅ΠΌΠ΅Π½ΠΈΡ β Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΠΈ ΠΊΡΠ΅ΠΈΡΠ°Π½ΠΈΡ Π²Π΅Π·Π°,
- ΠΏΡΠΎΡΠΈΡΠΈΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ (ΡΠΎ ΡΠ΅ΡΡ, ΡΠ°Π·Π²ΠΎΡΠ½ΠΈ ΡΠΈΠΌ, Π°ΠΊΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, ΠΌΠΎΠΆΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°ΡΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ Ρ ΠΏΠΎΡΡΠΎΡΠ΅ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ).
Π’Π΅ΡΡΠΈΡΠ°ΡΠ΅
Π‘Π°Π΄Π° ΡΠ΅ΠΌΠΎ ΠΏΡΠΈΡΠ°ΡΠΈ ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΏΡΠ΅ ΠΏΡΡΡΠ°ΡΠ° Ρ ΠΏΡΠΎΠ΄Π°ΡΡ
ΠΠ΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈ Π·Π° ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ°ΡΠ΅ ΡΡ ΡΠΈΠΏ ΠΏΡΠΎΡΠΈΠ»Π° ΠΏΠΎΡΠΏΠΈΡΠ° Ρ ΠΠΏΠΏ Π‘ΡΠΎΡΠ΅-Ρ ΠΈ ΠΏΡΠΈΡΡΡΡΠ²ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΡ ΠΠΠ ΠΊΡΡΡΠ΅Π²Π°.
ΠΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π½Π°ΡΠΈΠ½Π° Π·Π° ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅:
- ΠΏΡΠ΅ΠΊΠΎ ΠΡΡΠΎΠ΄Π΅-Π° (ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡ),
- ΠΏΡΠ΅ΠΊΠΎ Π°Π»Π°ΡΠ°,
- ΠΏΡΠ΅ΠΊΠΎ ΠΠΏΠΏΠ»ΠΈΡΠ°ΡΠΈΠΎΠ½ ΠΠΎΠ°Π΄Π΅Ρ-Π° Π·Π° ΡΡΠ°ΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ ΠΡΡΠΎΠ΄Π΅-Π° (ΡΠ°Π΄Π° Π’ΡΠ°Π½ΡΠΏΠΎΡΡΠ΅Ρ).
ΠΠ° Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ°ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π°Π»ΡΠΎΠΎΠ», ΠΊΠΎΡΠΈ ΡΠ°ΠΊΠΎΡΠ΅ ΠΈΠΌΠ° Π΄Π²Π° Π½Π°ΡΠΈΠ½Π° Π°ΡΡΠΎΡΠΈΠ·Π°ΡΠΈΡΠ΅:
- ΠΠΎΡΠ΅Π±Π½Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ,
- ΠΠΠ ΠΊΡΡΡ.
ΠΠΎΠΆΠ΅ΡΠ½ΠΎ ΡΠ΅ Π΄Π° ΠΏΡΠ΅ΡΠ·ΠΌΠ΅ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΠΠ ΠΊΡΡΡ.
ΠΠ° Π±ΠΈΡΡΠ΅ Π΄ΠΎΠ±ΠΈΠ»ΠΈ ΠΠΠ ΠΊΡΡΡ, ΠΈΠ΄ΠΈΡΠ΅ Π½Π°
ΠΠ°ΡΠΈΠΌ ΡΠ²Π΅Π·ΠΈΡΠ΅ ΠΏΡΠ΅ΡΠ·Π΅ΡΠΈ ΠΊΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π·Π° ΠΈΠ·Π³ΡΠ°Π΄ΡΡ:
mkdir -p ~/.appstoreconnect/private_keys
mv ~/Downloads/AuthKey_${KeyID}.p8 ~/.appstoreconnect/private_keys/
ΠΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΠΎΡΠΏΡΠ΅ΠΌΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π½Π° Π’Π΅ΡΡΠ€Π»ΠΈΠ³Ρ Ρ, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° ΠΏΠΎΡΠ²ΡΠ΄ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ, ΠΌΠΈ ΡΠΎ ΡΠ°Π΄ΠΈΠΌΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ:
xcrun altool
--validate-app
-t ios
-f $(find "$ProjectDir" -name "*.ipa")
--apiKey β$KeyIDβ
--apiIssuer β$IssuerIDβ
Π³Π΄Π΅ apiKey
ΠΈ apiIssuer
ΠΈΠΌΠ°ΡΡ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΏΠΎΡΠ° ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΠΠΠ ΠΊΡΡΡΠ΅Π²Π°.
ΠΠ°ΡΠΈΠΌ, Π½Π°ΠΊΠΎΠ½ ΡΡΠΏΠ΅ΡΠ½Π΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡΠ΅, ΡΡΠΈΡΠ°Π²Π°ΠΌΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ --upload-app
ΡΠ° ΠΈΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠΌΠ°.
ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΡΠ΅ ΠΠΏΠΏΠ»Π΅ ΡΠ΅ΡΡΠΈΡΠ°ΡΠΈ Ρ ΡΠΎΠΊΡ ΠΎΠ΄ ΡΠ΅Π΄Π½ΠΎΠ³ ΠΈΠ»ΠΈ Π΄Π²Π° Π΄Π°Π½Π°, Π° Π·Π°ΡΠΈΠΌ ΡΠ΅ ΠΏΠΎΡΡΠ°ΡΠΈ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠΏΠΎΡΠ½ΠΈΠΌ ΡΠ΅ΡΡΠ΅ΡΠΈΠΌΠ°: Π±ΠΈΡΠ΅ ΠΈΠΌ ΠΏΠΎΡΠ»Π°ΡΠ΅ Π²Π΅Π·Π΅ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡ ΠΏΡΡΠ΅ΠΌ Π΅-ΠΏΠΎΡΡΠ΅.
ΠΡΡΠ³ΠΈ Π½Π°ΡΠΈΠ½ Π·Π° ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΏΡΠ΅ΠΊΠΎ Π°Π»ΡΠΎΠΎΠ»-Π° ΡΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π΅ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ.
ΠΠ° Π±ΠΈΡΡΠ΅ Π΄ΠΎΠ±ΠΈΠ»ΠΈ ΠΏΠΎΡΠ΅Π±Π½Ρ Π»ΠΎΠ·ΠΈΠ½ΠΊΡ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ, ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΎΠ΄Π΅ΡΠ΅ Π½Π°
ΠΠ°ΡΠΈΠΌ Π±ΠΈ ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π·Π°ΠΏΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°Π΄ΡΡ Ρ ΠΠ΅ΠΈΡΡ
Π°ΠΈΠ½-Ρ ΡΠ° ΠΎΠ²ΠΎΠΌ Π»ΠΎΠ·ΠΈΠ½ΠΊΠΎΠΌ. ΠΠ΄ Π²Π΅ΡΠ·ΠΈΡΠ΅ 11 ΠΡΡΠΎΠ΄Π΅-Π° ΠΎΠ²ΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈ ΠΏΠΎΠΌΠΎΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅:
xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswd
ΠΠ΄Π΅ ΡΠ΅:
$DeveloperName
β Π½Π°Π·ΠΈΠ² Π½Π°Π»ΠΎΠ³Π° ΠΈΠΠ‘ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΏΡΠΈΡΠ°Π²Ρ Π½Π° ΠΠΏΠΏΠ»Π΅ ΡΡΠ»ΡΠ³Π΅.
$AppPswd
β Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π° ΠΏΠΎΡΠ΅Π±Π½Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ.
ΠΠ°ΡΠΈΠΌ Π΄ΠΎΠ±ΠΈΡΠ°ΠΌΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π°ΡΡ-ΠΏΡΠΎΠ²ΠΈΠ΄Π΅Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ°Π²Π°ΠΌΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡ ΡΠ²ΠΎΠ·Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ:
xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"
ΠΠΎΠ±ΠΈΡΠ°ΠΌΠΎ ΠΈΠ·Π»Π°Π·:
Provider listing:
- Long Name - - Short Name -
XXXXXXX XXXXXXXXX
ΠΠ°ΠΎ ΡΡΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΏΠΎΡΡΠ΅Π±Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΊΡΠ°ΡΠΊΠΎΠ³ ΠΈΠΌΠ΅Π½Π° (Π°ΡΡ-ΠΏΡΠΎΠ²ΠΈΠ΄Π΅Ρ) ΠΏΠΎΠΊΠ»Π°ΠΏΠ° ΡΠ΅ ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ $Π’Π΅Π°ΠΌΠΠ ΠΊΠΎΡΠΈ ΡΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΈΠ·ΡΠ°Π΄Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅.
ΠΠ° Π±ΠΈΡΡΠ΅ ΠΏΠΎΡΠ²ΡΠ΄ΠΈΠ»ΠΈ ΠΈ ΡΡΠΈΡΠ°Π»ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Ρ Π’Π΅ΡΡΠ€Π»ΠΈΠ³Ρ Ρ, ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π½Π°ΡΠ΅Π΄Π±Ρ:
xcrun altool
--(validate|upload)-app
-f $(find "$ProjectDir" -name "*.ipa")
-u "$DeveloperName"
-p "@keychain:Altool"
ΠΠ°ΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° -p
ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π΅ΡΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡ $AppPswd
Ρ Π½Π΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΎΠΌ (Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎΠΌ) ΠΎΠ±Π»ΠΈΠΊΡ.
ΠΠ΅ΡΡΡΠΈΠΌ, ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ Π²Π΅Ρ ΠΏΠΎΠΌΠ΅Π½ΡΡΠΎ, ΡΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΠ° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ, Π±ΠΎΡΠ΅ ΡΠ΅ ΠΈΠ·Π°Π±ΡΠ°ΡΠΈ ΠΠΠ ΠΊΡΡΡ Π·Π° Π°Π»ΡΠΎΠΎΠ» Π°ΡΡΠΎΡΠΈΠ·Π°ΡΠΈΡΡ, ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ ΠΡΡΠΎΠ΄Π΅-Π° ΠΈΠΌΠ°ΡΡ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ (βΠ½Π΅ Π²ΠΈΠ΄ΠΈβ ΠΠ΅ΠΈΡΡ Π°ΠΈΠ½, Π³ΡΠ΅ΡΠΊΠ΅ ΠΏΡΠΈ Π°ΡΡΠΎΡΠΈΠ·Π°ΡΠΈΡΠΈ ΡΠΎΠΊΠΎΠΌ ΠΎΡΠΏΡΠ΅ΠΌΠ°ΡΠ° ΠΈΡΠ΄.).
Π’ΠΎ ΡΠ΅ ΡΠ²Π΅, Π·Π°ΠΏΡΠ°Π²ΠΎ. ΠΠ΅Π»ΠΈΠΌ ΡΠ²ΠΈΠΌΠ° ΠΊΠΎΡΠΈ ΡΡ ΡΠΊΡΡΡΠ΅Π½ΠΈ Ρ ΡΡΠΏΠ΅ΡΠ½Π΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ ΠΈ ΠΈΠ·Π΄Π°ΡΠ° Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΠΏΠΏ Π‘ΡΠΎΡΠ΅-Ρ.
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ