เช เชฒเซเชเชฎเชพเช, เช เชฎเซ iOS เชเชชเซเชฒเซเชเซเชถเชจเชจเซ เชเชธเซเชฎเซเชฌเชฒ เชเชฐเชตเชพเชจเซ เช เชจเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชชเชนเซเชเชเชพเชกเชตเชพเชจเซ เช เชจเซเชญเชต เชถเซเชฐ เชเชฐเซเช เชเซเช, เชเซ เชชเซเชฒเชพเชฐเชฟเชฏเชฎ เชเซเชฐเชพเชธเซเชจเซเชกเชพเชฐ เชธเซเชเซเชกเชฟเชฏเซเช CI/CDเชจเซ เชกเชฟเชฌเช เชเชฐเชตเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชธเชเชเชฟเชค เชเชฐเซเชฏเซ เชเซ.
เชคเชพเชฒเซเชฎ
เชฆเชฐเซเช เชตเซเชฏเชเซเชคเชฟ เชเซ เชเซ เชเช เชฐเซเชคเซ เช เชฅเชตเชพ เช เชจเซเชฏ เชฐเซเชคเซ เชเชชเชฒ เชเชชเชเชฐเชฃเซ เชฎเชพเชเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเชพ เชตเชฟเชเชพเชธเชฎเชพเช เชธเชพเชฎเซเชฒ เชเซ เชคเซเชฃเซ เชชเชนเซเชฒเชพเชฅเซ เช เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐเชจเซ เชตเชฟเชตเชพเชฆเชพเชธเซเชชเชฆ เชธเชเชตเชกเชจเซ เชชเซเชฐเชถเชเชธเชพ เชเชฐเซ เชเซ. เชฎเซเชถเซเชเซเชฒเซเช เชฆเชฐเซเช เชเชเซเชฏเชพเช เชเซเชตเชพ เชฎเชณเซ เชเซ: เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ เชชเซเชฐเซเชซเชพเชเชฒ เชฎเซเชจเซเชฅเซ เชกเซเชฌเช เช เชจเซ เชฌเชฟเชฒเซเชก เชเซเชฒเซเชธ เชธเซเชงเซ.
เชเชจเซเชเชฐเชจเซเช เชชเชฐ "เชฎเซเชณเชญเซเชค" เชตเชฟเชถเซ เชชเซเชทเซเชเชณ เชฒเซเชเซ เชเซ, เชคเซเชฅเซ เช เชฎเซ เชฎเซเชเซเชฏ เชตเชธเซเชคเซเชจเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชถเซเช. เชคเชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชธเชซเชณเชคเชพเชชเซเชฐเซเชตเช เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชเซ เชเซเชเช เชเซ เชคเซ เช เชนเซเช เชเซ:
เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ เชเชพเชคเซเช ;- เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐ เชคเชฐเซเชเซ เชเชพเชฎ เชเชฐเชคเซเช macOS-เชเชงเชพเชฐเชฟเชค เชเชชเชเชฐเชฃ;
- เชชเซเชฆเชพ
เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ , เชเซเชจเซ เชเชชเชฏเซเช เช เชฐเชเซ เชชเชฐ เชธเชนเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชตเชงเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ; - เช
เชจเชจเซเชฏ เชธเชพเชฅเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเซ
ID (เชฌเชเชกเชฒ เชเชเชกเซเชจเซเชเชฟเชซเชพเชฏเชฐเชจเซเช เชฎเชนเชคเซเชต เชจเซเชเชงเชตเซเช เชเซเชเช, เชเชพเชฐเชฃ เชเซ เชตเชพเชเชฒเซเชกเชเชพเชฐเซเชก ID เชจเซ เชเชชเชฏเซเช เชเชชเซเชฒเชฟเชเซเชถเชจเชจเชพ เชเชฃเชพ เชเชพเชฐเซเชฏเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เช เชถเชเซเชฏ เชฌเชจเชพเชตเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ: เชธเชเชเชณเชพเชฏเซเชฒ เชกเซเชฎเซเชจเซเชธ, เชชเซเชถ เชธเซเชเชจเชพเช, Apple เชธเชพเชเชจ เชเชจ เช เชจเซ เช เชจเซเชฏ); เชชเซเชฐเซเชซเชพเชเชฒ เช เชฐเชเซ เชธเชนเซเช.
เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชเซเชเชชเชฃ macOS เชเชชเชเชฐเชฃ เชชเชฐ เชเซเชเซเชจ เชฆเซเชตเชพเชฐเชพ เชเชจเชฐเซเช เชเชฐเชตเซเช เชเชตเชถเซเชฏเช เชเซ. เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ เชชเซเชฐเชเชพเชฐ เชเซเชฌ เช เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ. เชเชชเซเชฒเชฟเชเซเชถเชจ เชชเชฐเซเชฏเชพเชตเชฐเชฃ (เชฆเซเชต, เชเซเชฏเซเช, เชธเซเชเซเชเซเชเช, เชเชคเซเชชเชพเชฆเชจ) เชชเชฐ เชเชงเชพเชฐ เชฐเชพเชเซเชจเซ เชคเซ (เชตเชฟเชเชพเชธ เช เชฅเชตเชพ เชตเชฟเชคเชฐเชฃ) เช เชฒเช เชนเชถเซ, เชเซเชฎ เชเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชนเชธเซเชคเชพเชเซเชทเชฐ เชชเซเชฐเซเชซเชพเชเชฒเชจเซ เชชเซเชฐเชเชพเชฐ.
เชชเซเชฐเซเชซเชพเชเชฒเชจเชพ เชฎเซเชเซเชฏ เชชเซเชฐเชเชพเชฐเซ:
- เชตเชฟเชเชพเชธ - เชตเชฟเชเชพเชธ เชเซเชฎเชจเซ เช เชฐเชเซ เชชเชฐ เชนเชธเซเชคเชพเชเซเชทเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เชฌเชจเชพเชตเชพเชฏเซเชฒ, เชตเชฟเชเชพเชธ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ (เชชเซเชฐเชเชพเชฐเชจเซเช เชจเชพเชฎ iPhone เชกเซเชตเชฒเชชเชฐ: XXXXX);
- เชเชก เชนเซเช - เชชเชฐเซเชเซเชทเชฃ เชเชชเซเชฒเชฟเชเซเชถเชจ เชชเชฐ เชนเชธเซเชคเชพเชเซเชทเชฐ เชเชฐเชตเชพ เช เชจเซ QA เชตเชฟเชญเชพเช เชฆเซเชตเชพเชฐเชพ เชเชเชคเชฐเชฟเช เชเชเชพเชธเชฃเซ เชฎเชพเชเซ เชฌเชจเชพเชตเชพเชฏเซเชฒ, เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชจเชพ เชตเชฟเชคเชฐเชฃ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ (เชชเซเชฐเชเชพเชฐเชจเซเช เชจเชพเชฎ iPhone เชตเชฟเชคเชฐเชฃ: XXXXX);
- เชเชช เชธเซเชเซเชฐ - เชเซเชธเซเชเชซเซเชฒเชพเชเช เชฆเซเชตเชพเชฐเชพ เชฌเชพเชนเซเชฏ เชชเชฐเซเชเซเชทเชฃ เชฎเชพเชเซ เชฐเชฟเชฒเซเช เชฌเชฟเชฒเซเชก เช เชจเซ เชเชช เชธเซเชเซเชฐ เชชเชฐ เช เชชเชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ, เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชจเชพ เชตเชฟเชคเชฐเชฃ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชกเซเชตเชฒเชชเชฎเซเชจเซเช เช
เชจเซ เชเชก เชนเซเช เชชเซเชฐเซเชซเชพเชเชฒเซเชธ เชเชจเชฐเซเช เชเชฐเชคเซ เชตเชเชคเซ, เชคเซ เชชเชฃ เชธเซเชเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ
เชธเซเชชเชทเซเชเชคเชพ เชฎเชพเชเซ, เชคเชฎเซ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชจเซ เชชเซเชฐเซเชซเชพเชเชฒเชจเซ เชจเซเชเซเชจเชพ เชเซเชทเซเชเชเชจเชพ เชฐเซเชชเชฎเชพเช เชฐเชเซ เชเชฐเซ เชถเชเซ เชเซ. เช เชเชธเซเชฎเซเชฌเชฒเซ เชฎเชพเชเซ เชเชชเชฃเชจเซ เชเชฏเชพ เชชเชฐเชฟเชฎเชพเชฃเซเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชคเซ เชเซเชฏเชพเชเชฅเซ เชฎเซเชณเชตเชตเซ เชคเซ เชธเชฎเชเชตเชพเชฎเชพเช เชธเชฐเชณ เชฌเชจเชพเชตเซ เชเซ.
เชตเชฟเชงเชพเชจเชธเชญเชพ
เชชเซเชฐเซเชเซเชเซเช เช
เชจเซ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฆเซเชตเชพเชฐเชพ เชเชธเซเชฎเซเชฌเชฒเซเชเชจเซ เช
เชฒเช เชเชฐเชตเชพเชจเซเช เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ, เช
เชฎเซ เชชเซเชฐเซเชซเชพเชเชฒ เชจเชพเชฎเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช เชเซเชฎ เชเซ ${ProjectName}_${Instance}
, เชเชเชฒเซ เชเซ, เชชเซเชฐเซเชเซเชเซเชเชจเซเช เชจเชพเชฎ + เชเชฆเชพเชนเชฐเชฃ (เชเชชเซเชฒเชฟเชเซเชถเชจ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชชเชฐ เชเชงเชพเชฐ เชฐเชพเชเซ เชเซ: Dev, QA, GD, เชธเซเชเซเชเชฟเชเช, เชฒเชพเชเชต, เช
เชจเซ เชคเซเชฅเซ เชตเชงเซ).
เชเซเชฏเชพเชฐเซ เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐ เชชเชฐ เชเชฏเชพเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชชเซเชฐเซเชซเชพเชเชฒ เชคเซเชจเซเช เชจเชพเชฎ เชเช เช
เชจเชจเซเชฏ IDเชฎเชพเช เชฌเชฆเชฒเซเชจเซ เชซเซเชฒเซเชกเชฐเชฎเชพเช เชเชธเซเชกเชตเชพเชฎเชพเช เชเชตเซ เชเซ /Users/$Username/Library/MobileDevice/Provisioning Profiles
(เชเซเชฏเชพเช $Username
เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐเชจเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชพเชคเชพเชจเชพ เชจเชพเชฎเชจเซ เช
เชจเซเชฐเซเชช เชเซ).
*.ipa เชซเชพเชเชฒ เชฌเชจเชพเชตเชตเชพเชจเซ เชฌเซ เชฐเซเชค เชเซ - เชฒเซเชเชธเซ (เชชเซเชเซเช เชเชชเซเชฒเชฟเชเซเชถเชจ) เช
เชจเซ เชเชงเซเชจเชฟเช (XcAchive เชฌเชจเชพเชตเช เช
เชจเซ เชจเชฟเชเชพเชธ เชฆเซเชตเชพเชฐเชพ). เชชเซเชฐเชฅเชฎ เชชเชฆเซเชงเชคเชฟเชจเซ เช
เชชเซเชฐเชเชฒเชฟเชค เชฎเชพเชจเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเชพเชฐเชฃ เชเซ เชธเชเชธเซเชเชฐเชฃ 8.3 เชฅเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชซเชพเชเชฒ เชชเซเชเซเชเชฟเชเช เชฎเซเชกเซเชฏเซเชฒเชจเซ Xcode เชตเชฟเชคเชฐเชฃเชฎเชพเชเชฅเซ เชฆเซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ. เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชเซเชจเชพ Xcode (เชธเชเชธเซเชเชฐเชฃ 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/*
เชเชเชณ เชคเชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ *.app เชซเชพเชเชฒ เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
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
- เชเชธเซเชฎเซเชฌเชฒ เชเชชเซเชฒเชฟเชเซเชถเชจ (*.app) เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพเชจเซ เชฎเชพเชฐเซเช.
CODE_SIGN_IDENTITY
โ เชกเซเชตเชฒเชชเชฐ เชเชเชพเชเชจเซเชเชจเซเช เชจเชพเชฎ, เชเซ เชเซเชเซเชจเชฎเชพเช เชเชเชพเชธเซ เชถเชเชพเชฏ เชเซ (iPhone เชกเซเชตเชฒเชชเชฐ: XXXX XXXXXXX, เชเซเชเชธเชฎเชพเช TeamID เชตเชเชฐ).
PROVISIONING_PROFILE
- เชเชชเซเชฒเชฟเชเซเชถเชจ เชชเชฐ เชธเชนเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชชเซเชฐเซเชซเชพเชเชฒ ID, เชเซ เชเชฆเซเชถ เชธเชพเชฅเซ เชฎเซเชณเชตเซ เชถเชเชพเชฏ เชเซ:
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โ
เชเชเชณ, เชชเชฐเชฟเชฃเชพเชฎเซ *.app เชซเชพเชเชฒเชจเซ *.ipa เชฎเชพเช เชชเซเช เชเชฐเชตเซ เชเซเชเช. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเซ เชเชฆเซเชถเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ เชเซเชฎ เชเซ:
/usr/bin/xcrun --sdk iphoneos PackageApplication
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app")
-o "$ProjectDir/$ProjectName_$Instance.ipa"
เชเซ เชเซ, เช เชชเชฆเซเชงเชคเชฟ เชเชชเชฒเชจเชพ เชฆเซเชทเซเชเชฟเชเซเชฃเชฅเซ เช เชชเซเชฐเชเชฒเชฟเชค เชฎเชพเชจเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชฐเซเชเชพเชเชตเชฎเชพเชเชฅเซ เชจเชฟเชเชพเชธ เชเชฐเซเชจเซ *.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
โ เชเชชเซเชฒเชฟเชเซเชถเชจ ID, เชเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชธเซเชเชฟเชเชเซเชธเชฎเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชเซ. เชคเชฎเซ เชเชฆเซเชถ เชธเชพเชฅเซ เชคเชชเชพเชธ เชเชฐเซ เชถเชเซ เชเซ:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName ะธ $ProfileId
โ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชจเซเช เชจเชพเชฎ เช
เชจเซ เชนเชธเซเชคเชพเชเซเชทเชฐ เชชเซเชฐเซเชซเชพเชเชฒ ID เชธเซเชเชฟเชเชเซเชธ เชเซ เชเซ เช
เชเชพเช เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเซ เชนเชคเซ เช
เชจเซ เชจเชฟเชเชพเชธ เชธเซเชเชฟเชเชเซเชธเชฎเชพเชเชจเชพ เชฎเซเชฒเซเชฏเซ เชธเชพเชฅเซ เชฎเซเชณ เชเชพเชคเซ เชนเซเชตเซ เชเซเชเช.
$TeamID
โ เชกเซเชตเชฒเชชเชฐเชจเชพ เชจเชพเชฎ เชชเชเซ เชเซเชเชธเชฎเชพเช เชฆเชธ-เช
เชเชเชจเซเช ID, เชเชฆเชพเชนเชฐเชฃ: iPhone เชกเซเชตเชฒเชชเชฐ: โฆโฆ (XXXXXXXXXX); เชเซเชเซเชจเชฎเชพเช เชเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชเชเชณ, เชจเชฟเชเชพเชธ เชเชฆเซเชถเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เช เชฎเซ เชเชฐเซเชฐเซ *.ipa เชซเชพเชเชฒ เชฎเซเชณเชตเซเช เชเซเช:
xcodebuild
-exportArchive
-archivePath $ProjectDir/build/$ProjectName.xcarchive
-exportPath $ProjectDir
-exportOptionsPlist $ExportSettings
เชถเชฟเชชเชฟเชเช เชฎเชพเชนเชฟเชคเซ
เชนเชตเซ เชเชเชคเซเชฐเชฟเชค เชเชฐเซเชฒเซ เชซเชพเชเชฒเชจเซ เช เชเชคเชฟเชฎ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชชเชนเซเชเชเชพเชกเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชเชเชฒเซ เชเซ, เชเชชเชเชฐเชฃ เชชเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฒเซเช เชเซ.
เชกเซเชตเชฒเชชเชฎเซเชจเซเช เช เชจเซ เชเชก เชนเซเช เชฌเชฟเชฒเซเชกเซเชธเชจเชพ เชตเชฟเชคเชฐเชฃ เชฎเชพเชเซ เชเชฃเซ เชธเซเชตเชพเช เชเซ, เชเซเชฎ เชเซ HockeyApp, AppBlade เช เชจเซ เช เชจเซเชฏ, เชชเชฐเชเชคเซ เช เชฒเซเชเชฎเชพเช เชเชชเชฃเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเชพ เชตเชฟเชคเชฐเชฃ เชฎเชพเชเซ เชเชเชฒ เชธเชฐเซเชตเชฐ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซเชถเซเช.
iOS เชฎเชพเชเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซเช 2 เชคเชฌเชเซเชเชพเชฎเชพเช เชฅเชพเชฏ เชเซ:
- เชเชเชเชฎเซเชธ เชธเซเชตเชพ เชฆเซเชตเชพเชฐเชพ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชจเซเชธเซเชเซเชฒเซเชถเชจ เชฎเซเชจเชฟเชซเซเชธเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเซเช.
- HTTPS เชฆเซเชตเชพเชฐเชพ เชฎเซเชจเชฟเชซเซเชธเซเชเชฎเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชฎเชพเชนเชฟเชคเซ เช เชจเซเชธเชพเชฐ *.ipa เชซเชพเชเชฒเชจเซเช เชเชจเซเชธเซเชเซเชฒเซเชถเชจ.
เชเชฎ, เชเชชเชฃเซ เชชเชนเซเชฒเชพ เชเชฆเซเชถ เชธเชพเชฅเซ เชเชจเซเชธเซเชเซเชฒเซเชถเชจ เชฎเซเชจเชฟเชซเซเชธเซเช (เชซเชพเชเชฒ เชชเซเชฐเชเชพเชฐ *.plist) เชเชจเชฐเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
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
*.ipa เชซเชพเชเชฒ เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ เชธเซเชงเซ เชฒเชฟเชเช เชงเชฐเชพเชตเซ เชเซ. iOS เชจเชพ เชธเชพเชคเชฎเชพ เชธเชเชธเซเชเชฐเชฃเชฅเซ, เชเชชเซเชฒเชฟเชเซเชถเชจ HTTPS เชฆเซเชตเชพเชฐเชพ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเซ เชเชตเชถเซเชฏเช เชเซ. เชเช เชฎเชพ เชธเชเชธเซเชเชฐเชฃเชฎเชพเช, เชฎเซเชจเชฟเชซเซเชธเซเชเชจเซเช เชซเซเชฐเซเชฎเซเช เชฅเซเชกเซเช เชฌเชฆเชฒเชพเชฏเซเช เชเซ: เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชฏเชเชจเซเชธ เชฎเชพเชเซ เชธเซเชเชฟเชเชเซเชธ เชธเชพเชฅเซเชจเชพ เชฌเซเชฒเซเชเซเชธ เชเซเชฎ เชเซ
<images>
<image>...</image>
</images>
เชเชฎ, เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชจเชพ เชเซเชตเซ เชฒเชฟเชเช เชธเชพเชฅเซเชจเซเช เชเช เชธเชฐเชณ HTML เชชเซเชทเซเช เชชเซเชฐเชคเซเช เชเซ:
itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plist
เชตเชฟเชเชพเชธ เช เชจเซ เชชเชฐเซเชเซเชทเชฃ เชตเชฟเชญเชพเชเซเชจเซ เชเชฐเซเชฐเชฟเชฏเชพเชคเซ เชฎเชพเชเซ, เชชเซเชฒเซเชฐเชฟเชฏเชฎเซ เชคเซเชจเซ เชชเซเชคเชพเชจเซ เชฌเชฟเชฒเซเชก เชเชจเซเชธเซเชเซเชฒเซเชถเชจ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเซ เชเซ, เชเซ เช เชฎเชจเซ เชเชชเซ เชเซ:
- เชธเซเชตเชพเชฏเชคเซเชคเชคเชพ เช เชจเซ เชธเซเชตเชคเชเชคเซเชฐเชคเชพ,
- เชเชเซเชธเซเชธ เชเชเชเซเชฐเซเชฒเชจเซเช เชเซเชจเซเชฆเซเชฐเชฟเชฏเชเชฐเชฃ เช เชจเซ "เชเชพเชฎเชเชฒเชพเช" เชเชคเชฟเชถเซเชฒ เชฐเซเชคเซ เชฌเชจเชพเชตเซเชฒ เชฒเชฟเชเชเซเชธ เชฆเซเชตเชพเชฐเชพ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซเช เชธเซเชฐเชเซเชทเชฟเชค เชเชจเซเชธเซเชเซเชฒเซเชถเชจ,
- เชตเชฟเชธเซเชคเซเชค เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ (เชเชเชฒเซ โโเชเซ, เชตเชฟเชเชพเชธ เชเซเชฎ, เชเซ เชเชฐเซเชฐเซ เชนเซเชฏ เชคเซ, เชนเชพเชฒเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชฎเชพเช เชเซเชฎ เชฅเชฏเซเชฒ เชเชพเชฐเซเชฏเซเชจเซ เชเชเซเชเซเชค เชเชฐเซ เชถเชเซ เชเซ).
เชชเชฐเซเชเซเชทเชฃ
เชนเชตเซ เช
เชฎเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเชพ เชชเซเชฐเซ-เชฐเซเชฒเซเช เชชเชฐเซเชเซเชทเชฃ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซเชถเซเช
เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชถเชฐเชคเซ เชเชช เชธเซเชเซเชฐ เชนเชธเซเชคเชพเชเซเชทเชฐ เชชเซเชฐเซเชซเชพเชเชฒเชจเซ เชชเซเชฐเชเชพเชฐ เช เชจเซ เชเชจเชฐเซเช เชเชฐเซเชฒ API เชเซเชจเซ เชนเชพเชเชฐเซ เชเซ.
เชเชชเซเชฒเชฟเชเซเชถเชจ เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพเชจเซ เชเชฃเซ เชฐเซเชคเซ เชเซ:
- Xcode (เชเชฐเซเชเซเชจเชพเชเชเชฐ) เชฆเซเชตเชพเชฐเชพ,
- เช เชฒเซเชเซเชฒ เชฆเซเชตเชพเชฐเชพ,
- Xcode (เชนเชตเซ เชเซเชฐเชพเชจเซเชธเชชเซเชฐเซเชเชฐ) เชจเชพ เชเซเชจเชพ เชธเชเชธเซเชเชฐเชฃเซ เชฎเชพเชเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเซเชกเชฐ เชฆเซเชตเชพเชฐเชพ.
เชธเซเชตเชเชพเชฒเชฟเชค เชกเชพเชเชจเชฒเซเชกเชฟเชเช เชฎเชพเชเซ, เช เชฒเซเชเซเชฒเชจเซ เชเชชเชฏเซเช เชฅเชพเชฏ เชเซ, เชเซเชฎเชพเช เชฌเซ เช เชงเชฟเชเซเชคเชคเชพ เชชเชฆเซเชงเชคเชฟเช เชชเชฃ เชเซ:
- เชเชชเซเชฒเชฟเชเซเชถเชจ-เชตเชฟเชถเชฟเชทเซเช เชชเชพเชธเชตเชฐเซเชก,
- API เชเซ.
API เชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพเชจเซเช เชตเชงเซ เชธเชพเชฐเซเช เชเซ.
API เชเซ เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ, เชชเชฐ เชเชพเช
เชเชเชณ, เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐ เชชเชฐ เชกเชพเชเชจเชฒเซเชก เชเชฐเซเชฒ เชเซ เชเชฏเชพเชค เชเชฐเซ:
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
API เชเซ เชเชจเชฐเซเชถเชจ เชชเซเชทเซเช เชฎเชพเชเชฅเซ เชซเซเชฒเซเชก เชฎเซเชฒเซเชฏเซ เชงเชฐเชพเชตเซ เชเซ.
เชเชเชณ, เชธเชซเชณ เชฎเชพเชจเซเชฏเชคเชพ เชชเชฐ, เช
เชฎเซ เชเชฆเซเชถ เชธเชพเชฅเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเซเชก เชเชฐเซเช เชเซเช --upload-app
เชธเชฎเชพเชจ เชชเชฐเชฟเชฎเชพเชฃเซ เชธเชพเชฅเซ.
เชเชชเชฒ เชฆเซเชตเชพเชฐเชพ เชเช เชเซ เชฌเซ เชฆเชฟเชตเชธเชฎเชพเช เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ เช เชจเซ เชชเชเซ เชคเซ เชฌเชพเชนเซเชฏ เชชเชฐเซเชเซเชทเชเซ เชฎเชพเชเซ เชเชชเชฒเชฌเซเชง เชฅเชถเซ: เชคเซเชฎเชจเซ เชเชจเซเชธเซเชเซเชฒเซเชถเชจ เชฎเชพเชเซเชจเซ เชฒเชฟเชเชเซเชธ เชเชฎเซเชเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
altool เชฆเซเชตเชพเชฐเชพ เชเชชเซเชฒเชฟเชเซเชถเชจ เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพเชจเซ เชฌเซเชเซ เชฐเซเชค เชเชช-เชตเชฟเชถเชฟเชทเซเช เชชเชพเชธเชตเชฐเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ เชเซ.
เชเชช-เชตเชฟเชถเชฟเชทเซเช เชชเชพเชธเชตเชฐเซเชก เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชเชตเซเช เชชเชกเชถเซ
เชเชเชณ, เชคเชฎเชพเชฐเซ เช เชชเชพเชธเชตเชฐเซเชก เชธเชพเชฅเซ เชเซเชเซเชจเชฎเชพเช เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐ เชฐเซเชเซเชฐเซเชก เชฌเชจเชพเชตเชตเซ เชเซเชเช. Xcode เชจเชพ เชธเชเชธเซเชเชฐเชฃ 11 เชฅเซ เช เชเชฆเซเชถ เชธเชพเชฅเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ:
xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswd
เชเซเชฏเชพเช:
$DeveloperName
โ Apple เชธเซเชตเชพเชเชฎเชพเช เชฒเซเช เชเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเชพ iOS เชกเซเชตเชฒเชชเชฐ เชเชเชพเชเชจเซเชเชจเซเช เชจเชพเชฎ.
$AppPswd
- เชเชช-เชตเชฟเชถเชฟเชทเซเช เชชเชพเชธเชตเชฐเซเชก เชเชจเชฐเซเช เชเชฐเซเชฏเซ.
เชเชเชณ, เช เชฎเชจเซ asc-เชชเซเชฐเซเชตเชพเชเชกเชฐ เชชเซเชฐเชพเชฎเซเชเชฐเชจเซเช เชฎเซเชฒเซเชฏ เชฎเชณเซ เชเซ เช เชจเซ เชเชฆเซเชถ เชธเชพเชฅเซ เชชเชพเชธเชตเชฐเซเชก เชเชฏเชพเชคเชจเซ เชธเชซเชณเชคเชพ เชคเชชเชพเชธเซ:
xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"
เช เชฎเชจเซ เชเชเชเชชเซเช เชฎเชณเซ เชเซ:
Provider listing:
- Long Name - - Short Name -
XXXXXXX XXXXXXXXX
เชเซเชฎ เชคเชฎเซ เชเซเช เชถเชเซ เชเซ, เชเชฐเซเชฐเซ เชเซเชเชเชพ เชจเชพเชฎ เชฎเซเชฒเซเชฏ (asc-เชชเซเชฐเชฆเชพเชคเชพ) เช $TeamID เชชเชฐเชฟเชฎเชพเชฃ เชธเชพเชฅเซ เชธเซเชธเชเชเชค เชเซ เชเซเชจเซ เชเชชเชฏเซเช เช เชฎเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ เชเชฐเซเชฏเซ เชนเชคเซ.
เชเซเชธเซเชเชซเซเชฒเชพเชเชเชฎเชพเช เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชฎเชพเชจเซเชฏ เชเชฐเชตเชพ เช เชจเซ เชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชฆเซเชถเชจเซ เชเชชเชฏเซเช เชเชฐเซ:
xcrun altool
--(validate|upload)-app
-f $(find "$ProjectDir" -name "*.ipa")
-u "$DeveloperName"
-p "@keychain:Altool"
เชชเชฐเชฟเชฎเชพเชฃ เชฎเซเชฒเซเชฏ เชคเชฐเซเชเซ -p
เชคเชฎเซ เชฎเซเชฒเซเชฏ เชฒเช เชถเชเซ เชเซ $AppPswd
เชเชจเชเซเชฐเชฟเชชเซเชเซเชก (เชธเซเชชเชทเซเช) เชธเซเชตเชฐเซเชชเชฎเชพเช.
เชเซ เชเซ, เชชเชนเซเชฒเซเชฅเซ เช เชเชฒเซเชฒเซเช เชเชฐเซเชฏเซ เชเซ เชคเซเชฎ, เชชเซเชฐเชฆเชฐเซเชถเชจเชจเชพ เชฆเซเชทเซเชเชฟเชเซเชฃเชฅเซ, เช เชฒเซเชเซเชฒ เช เชงเชฟเชเซเชคเชคเชพ เชฎเชพเชเซ API เชเซ เชชเชธเชเชฆ เชเชฐเชตเชพเชจเซเช เชตเชงเซ เชธเชพเชฐเซเช เชเซ, เชเชพเชฐเชฃ เชเซ Xcodeเชจเชพ เชตเชฟเชตเชฟเชง เชธเชเชธเซเชเชฐเชฃเซเชฎเชพเช เชเซเชเซเชเชธ เชธเชฎเชธเซเชฏเชพเช เชเซ (เชเซเชเซเชจ "เชเซเชคเซเช เชจเชฅเซ", เช เชชเชฒเซเชก เชฆเชฐเชฎเชฟเชฏเชพเชจ เช เชงเชฟเชเซเชคเชคเชพ เชญเซเชฒเซ, เชตเชเซเชฐเซ).
เชคเซ เชฌเชงเชพ เชเซ, เชตเชพเชธเซเชคเชตเชฎเชพเช. เชนเซเช เชเชเซเชเซเช เชเซเช เชเซ เชเชช เชธเซเชเซเชฐเชฎเชพเช เชธเชซเชณ เชฌเชฟเชฒเซเชก เช
เชจเซ เชฎเซเชถเซเชเซเชฒเซ-เชฎเซเชเซเชค เชฐเซเชฒเซเช เชธเชพเชฎเซเชฒ เชนเซเชฏ.
เชธเซเชฐเซเชธ: www.habr.com