iOS自動化編譯打包
作為一名客戶端開發人員,每次給測試打包都是一件很痛苦的事情,因為有時候隨便改點一些小Bug,測試要回歸測試,一天之內可能會不斷的打包n個版本,如果讓開發人員每次都手動打包,不僅是浪費了開發者的時間,同時也浪費了測試組的時間。所以此時自動化打包是顯得多麼的重要,節省了開發者和測試組的大量時間。有了自動化打包工具,開發人員只需要將修改的程式碼提交到遠端倉庫即可,剩下的事就交給自動化打包工具吧。在一切都OK後需要打包上傳到iTunes Connect上,此時只需要修改一個.plist配置檔案就可以。給測試組的寶寶們教一下如何把ipa檔案上傳到iTunes Connect,併發布,以後這些小事就可以交給他們做了。O(∩_∩)O哈哈哈~
基本命令
主要有以下2種方法:
-
xcrun
: 把*.app打包成ipa。 -
xcodebuild
: 生成Archive、匯出ipa。
由於之前在網上查到資料,對比了兩者的區別,有人說是第一種命令,
xcrun
有點out了,不太適合現在的打包了,本人也沒有去真正測試是否到底好用,所以在此只介紹第二種命令xcodebuild
的使用,這也是我目前正在用的。在我們的專案中有2個shell指令碼,一個是用來打包測試版的,一個是用來打發布到App Store版的,不用的環境執行不同的指令碼。
xcodebuild 的基本使用
xcodebuild
命令打包主要有2個步驟,搞清楚這兩個步驟,其他的就是個性化的東西了(比如:打包前修改一些配置檔案,生成的ipa的命名等都可以放在指令碼里去做)。
第一步:編譯打包成Archive 就如在Xcode操作「Product -> Archive」xcodebuild archive -workspace XXX.xcworkspace -scheme XXX -configuration Release -archivePath ${ARCHIVE_PATH} CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH}
引數說明:
-workspace
:指定工作空間檔案XXX.xcworkspace-scheme
:指定構建工程名稱-configuration
:[Debug/Release]可選項,選擇Debug或者Release構建-archivePath
:儲存生成.xcarchive包路徑CONFIGURATION_BUILD_DIR
:build時的檔案路徑(主要包含.a檔案、XXX.app檔案和XXX.app.dSYM檔案)如果不需要用到XXX.app.dSYM檔案中的二進位制檔案(有些第三方崩潰統計需要用到此檔案),可以不加此項。
第二步:用生成的XXX.xcarchive檔案匯出為XXX.ipa檔案xcodebuild -exportArchive -archivePath ${ARCHIVE_PATH} -exportOptionsPlist ${EXPORT_OPTIONS_PLIST_PATH} -exportPath ${EXPORT_DIR}
引數說明:
-archivePath
:第一步中生成XXX.xcarchive檔案的路徑-exportOptionsPlist
:匯出過程中需要的配置檔案路徑(我是放在工程資料夾中的)-exportPath
:匯出ipa儲存目錄
exportOptionsPlist檔案引數如下圖:
上傳App Store版本
測試組使用版本
以上兩步是最核心的兩步,理解了各個引數的用意,就明白是怎麼回事了。xcodebuild
還有其他用法,可以透過命令xcodebuild -usage
檢視相關說明。
具體使用
下面是我用的打包指令碼,是用於打包釋出到App Store版的,需要用到打包測試版的話,自己動手修改一下,也當做學習了。其中很多用到了變數名,可能看起來會有點費勁,自己看的時候捋一捋吧。
# !/bin/bash
# 時間字串格式化輸出 eg:2016-11-14 22:40
# date_value=` date "+%Y-%m-%d %H:%M"`
# 執行 ./build-redlips_appStore.sh release 打包
PROJECT="XXX"
WORKSPACE_FILE=${PROJECT}.xcworkspace
TARGET="XXX"
BUILD_CONFIGURATION="Debug"
if [ "$1" = "release" ]; then
BUILD_CONFIGURATION="Release"
fi
#新建3個資料夾路徑(我是都放在桌面),用來儲存打包時相關的檔案
CONFIGURATION_BUILD_DIR=~/Desktop/build_configuration
ARCHIVE_DIR=~/Desktop/build_archive
EXPORT_DIR=~/Desktop/build_ipa
# LOG_PATH=~/Desktop/build_log
# LOG_PATH是一個文件路徑,只是用來記錄命令的輸出,因為都打在終端會很多,另外也方便後面分析。後面的命令也是如此。這裡面帶的選項可以根據需要參考xcodebuild -help的資訊。
# clean
# 清理構建目錄 就如在Xcode操作「Product -> Clean」。
xcodebuild clean -configuration ${BUILD_CONFIGURATION} -alltargets
# 移除之前的目錄並建立新的資料夾(可以不執行此操作)
rm -rf ${CONFIGURATION_BUILD_DIR}
rm -rf ${ARCHIVE_DIR}
rm -rf ${EXPORT_DIR}
mkdir ${CONFIGURATION_BUILD_DIR}
mkdir ${ARCHIVE_DIR}
mkdir ${EXPORT_DIR}
# 編譯打包成Archive 就如在Xcode操作「Product -> Archive」
CONFIGURATION_BUILD_PATH=${CONFIGURATION_BUILD_DIR}/${BUILD_CONFIGURATION}-iphoneos
# archivePath="~/Desktop/build_archive/${TARGET}.xcarchive"
ARCHIVE_PATH=${ARCHIVE_DIR}/${TARGET}.xcarchive
# CODE_SIGN_IDENTITY="$codeSignIdentity" PROVISIONING_PROFILE="$provisioningProfile"
xcodebuild archive -workspace ${WORKSPACE_FILE} -scheme ${TARGET} -configuration ${BUILD_CONFIGURATION} -archivePath ${ARCHIVE_PATH} CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH}
# 將Archive匯出 (注意路徑加""號和不加""的寫法)
# exportOptionsPlist="/Users/apple/Desktop/XXX/XXX/Src/Common/AppStoreExportOptions.plist"
# 取出當前目錄的路徑進行拼接(每人的專案檔名可能不一樣)
BASE_PATH=${PWD}
EXPORT_OPTIONS_PLIST_PATH=${BASE_PATH}/XXX/Src/Common/AppStoreExportOptions.plist
xcodebuild -exportArchive -archivePath ${ARCHIVE_PATH} -exportOptionsPlist ${EXPORT_OPTIONS_PLIST_PATH} -exportPath ${EXPORT_DIR}
****************************** 分割線 ******************************
#下面是獲取上傳到第三方統計崩潰日誌的檔案,如果沒有用到可以到此結束
# 複製(or壓縮) CONFIGURATION_BUILD_PATH 目錄下的 XXX.app.dSYM 檔案(其實是個資料夾)到 EXPORT_DIR 目錄下
DSYM_PATH=${CONFIGURATION_BUILD_PATH}/${TARGET}.app.dSYM
DSYM_ZIP_PATH=${EXPORT_DIR}/${TARGET}.app.dSYM.zip
DSYM_COPY_PATH=${EXPORT_DIR}
# zip -r 目標路徑 原始檔路徑
zip -r ${DSYM_ZIP_PATH} ${DSYM_PATH}
# cp -r 原始檔路徑 目標路徑
cp -r ${DSYM_PATH} ${DSYM_COPY_PATH}
# 複製 XXX.app.dSYM 包裡的 XXX 檔案 上傳到聽雲
TARGET_PATH=${DSYM_COPY_PATH}/${TARGET}.app.dSYM/Contents/Resources/DWARF/${TARGET}
cp ${TARGET_PATH} ${EXPORT_DIR}
溫馨提醒
- 打包前記得把你的證書和簽名設定正確,否則打包必定失敗。
- 如果新增了iOS10的通知特性(PushNotificationService),記得在工程中TARGETS下選擇PushNotificationService,Build Settings欄目下,Enable Bitcode屬性設定為NO。否則打包成功在上傳到iTunes Connect時,會出現如下錯誤:
ERROR ITMS-90635: “Invalid Mach-O Format. The Mach-O in bundle “XXX.app/PlugIns/XXXPushNotificationService.appex” isn’t consistent with the Mach-O in the main bundle. The main bundle Mach-O contains armv7(machine code) and arm64(machine code), while the nested bundle Mach-O contains armv7(bitcode) and arm64(bitcode). Verify that all of the targets for a platform have a consistent value for the ENABLE_BITCODE build setting.”
以上就是我打包用到的指令碼,至於打包測試版的,我就不展示了,夥伴們可以自己動手寫一個,就當練習了,畢竟自己動手豐衣足食嘛,哈哈…
有其他好想法的夥伴,可以互相交流學習。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1817/viewspace-2814577/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS自動化打包(fastlane使用)iOSAST
- iOS如何實現自動化打包iOS
- Python的iOS自動化打包PythoniOS
- iOS自動化打包部署踩坑記iOS
- jenkins iOS自動化打包分發JenkinsiOS
- 使用Automator自動化iOS打包流程iOS
- iOS--利用Fastlane實現自動化打包iOSAST
- Android使用Ant自動編譯簽名打包詳解Android編譯
- iOS開發-自動打包神器iOS
- iOS自動整合打包釋出iOS
- iOS 本地自動打包工具iOS
- 關於iOS自動化打包的一些分享iOS
- Taro編譯打包優化實踐編譯優化
- 自動化打包那些事
- iOS —— 兩套自動打包指令碼iOS指令碼
- iOS自動打包指令碼+自動上傳到firiOS指令碼
- Android程式自動化打包Android
- Android 自動編譯、打包生成apk檔案 3 - 使用SDK Ant方式Android編譯APK
- 安卓自動化打包環境搭建安卓
- 使用 fastlane 實現自動化打包AST
- 分享一個自動編譯,打包,簽名 android apk 的小指令碼編譯AndroidAPK指令碼
- iOS自動構建打包釋出指令碼iOS指令碼
- iOS 自動打包匯出並安裝ipaiOS
- Android筆記之:App自動化之使用Ant編譯專案多渠道打包的使用詳解Android筆記APP編譯
- 元件化下EventBus的訊息型別自動編譯元件化型別編譯
- fastlane 自動化打包工具實踐AST
- 實現Xcode 9自動化打包XCode
- [譯]iOS編譯器iOS編譯
- oracle 失效物件自動重新編譯Oracle物件編譯
- android自動化測試六之命令列編譯APKAndroid命令列編譯APK
- Ceph原始碼編譯與打包原始碼編譯
- 【編譯打包】haproxy1.4.23編譯
- 360加固+美團walle多渠道自動化打包
- 關於jenkins自動化打包探索Jenkins
- ReactNative專案自動化打包釋出React
- Java動態編譯優化——提升編譯速度(N倍)Java編譯優化
- Flutter iOS 混合工程自動化FlutteriOS
- iOS 工程自動化 - 思路整理iOS