每一次Xcode大版本更新,伴隨而來的不僅僅是SDK的更新撑柔,最讓人苦惱的是之前的插件全部不能用以及自動(dòng)打包腳本的重寫您访。下面我們主要關(guān)注Xcode7到Xcode8自動(dòng)打包的一些變更。
Xcode7
代碼編譯
xcodebuild -workspace "${SCHEME_NAME}.xcworkspace" -scheme "${SCHEME_NAME}"
-sdk iphoneos -configuration "${BUILD_CONFIGURATION}" build CODE_SIGN_IDENTITY="${IDENTITY_NAME}"
PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" SYMROOT=${BUILD_PATH}
SCHEME_NAME:scheme名稱
BUILD_CONFIGURATION:構(gòu)建配置(比如inhouse/release/enterprise)
IDENTITY_NAME:證書的文件名(在keychain中可以獲取到對(duì)應(yīng)的文件名)
PROVISIONING_PROFILE:授權(quán)文件對(duì)應(yīng)的文件名稱(形式如:49cac5ce-3c77-472b-9abb-7c463a8bea92)
BUILD_PATH:編譯之后存放的目錄
應(yīng)用打包
xcrun -sdk "${TARGET_SDK}" -v PackageApplication "${PROJECT_BUILDDIR}/${SCHEME_NAME}.app" -o "${BUILD_OUTPUT_DIR}/${APP_NAME}.ipa"
TARGET_SDK:iphoneos(sdk版本辆沦,會(huì)根據(jù)系統(tǒng)當(dāng)前sdk自動(dòng)選擇)
SCHEME_NAME:scheme名稱
PROJECT_BUILDDIR:編譯的目錄
BUILD_OUTPUT_DIR:打包后的輸出目錄
APP_NAME:文件名稱
Xcode8
代碼歸檔
xcodebuild -scheme "${SCHEME_NAME}" -sdk "${TARGET_SDK}"
-archivePath "${PROJECT_BUILDDIR} ${SCHEME_NAME}.xcarchive"
-configuration Release PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" archive
TARGET_SDK:iphoneos(sdk版本,會(huì)根據(jù)系統(tǒng)當(dāng)前sdk自動(dòng)選擇)
SCHEME_NAME:scheme名稱
PROJECT_BUILDDIR:編譯的目錄
PROVISIONING_PROFILE:授權(quán)文件對(duì)應(yīng)的文件名稱(形式如:49cac5ce-3c77-472b-9abb-7c463a8bea92)
將歸檔文件導(dǎo)出為ipa
xcodebuild -exportArchive -archivePath "${PROJECT_BUILDDIR}/${SCHEME_NAME}.xcarchive"
-exportOptionsPlist"${EXPORT_PLIST}" -exportPath "${BUILD_OUTPUT_DIR}"
SCHEME_NAME:scheme名稱
PROJECT_BUILDDIR:編譯的目錄
EXPORT_PLIST:plist文件路徑(導(dǎo)出相關(guān)信息的配置)
BUILD_OUTPUT_DIR:ipa最終的導(dǎo)出目錄
其中Plist文件格式如下
依次按照上面的步驟蔚晨,寫完編譯腳本,感覺里面就要完成了铭腕。但是Xcode8的問題才剛剛開始
問題1、Xcode8多了一個(gè)Automatically manage signing(自動(dòng)管理簽名)
解決:需要將自動(dòng)管理替換為手動(dòng)管理
sed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/g' ${PROJECT_DIR}/project.pbxproj"
問題2浩考、改成手動(dòng)管理后被盈,由于我們的企業(yè)版和App Store的版的bundle id和開發(fā)者Team完全不一樣
解決:通過腳本修改Bundle ID,然后將工程中的Developer 替換為Distribution
替換bundle id
sed -i '' 's/${OLD_BUNDLE_ID}/${NEW_BUNDLE_ID}/g' ${PROJECT_DIR}/project.pbxproj
替換打包類型
sed -i '' 's/iPhone Developer/iPhone Distribution/g' ${PROJECT_DIR}/project.pbxproj
最終的編譯腳本已經(jīng)放到了github袜瞬,感興趣的朋友可以自行下載查看