最近公司業務很閑,就開始自學Python,想著練練手就準備把iOS產品交付測試的流程自動化。下面記錄一下在這過程中遇到的問題。
因為macOS上提供了打包項目或工程的命令,所以處理這個需求就有了一個入口。
在參考了各位前輩的博客和教程后大致確定了兩個流程:
一、build
1. xcodebuild -> build -> .app
2. .app -> xcrun -> .ipa
3. .ipa -> publish
二、archive
1. xcodebuild -> archive -> .xcarchive -> export -> .ipa
2. .ipa -> publish
兩個流程都需要使用macOS提供的xcodebuild命令,在此參考了xcodebuild命令參數詳解
一、build流程
在嘗試使用這個流程時,運行xcrun命令發現系統已經廢棄這個接口了。
二、archive流程
1. Archive
因為大多數開發者都是用cocoapods管理三方庫,所以下面以workspace來介紹。
下面依序列出腳本里會使用的參數,雖然部分參數xcodebuild命令可以自行推斷,但本著探索的精神還是將所有參數都填上。
格式為:-option (tip, [example], note)
-workspace (workspaceName, [TestAutobuild.xcworkspace])
-scheme (schemeName, [TestAutobuild], 默認會存在一個同workspace名字一樣的scheme。可以在Xcode上可視化配置,這個里面包含了很多信息可以使xcodebuild命令自行推斷,所以這兩個參數就可以運行xcodebuild來archive項目了。)
-destination (build device, ['platform=iOS, name=My iPhone'], scheme里包含了這個信息。按key=value格式傳入字符串,generic/platform=(iOS), platform=(iOS/iOS Simulator/OS X),name=(your phone name/iPhone 6s/iPad Pro...), arch=(x86_64/armv7...))
-destination-timeout (find the device timeout, [30], 搜索上一個參數提供的設備的timeout。)
-configuration (Debug or Release, [Debug], scheme里包含了這個信息。)
-sdk (sdkfullpath or sdkname, [iphoneos], 可以通過xcodebuild -showsdks查看可選的sdk名字,可以不加后面的版本號。)
[action] (不用加參數標記符, [build], 默認為build。)
-archivePath (archive保存文件路徑,需要指明archive結果文件,****.xcarchive)
-quiet (無參數,不打印文件編譯時的輸出,但是會打印警告(warnings)和錯誤(errors))
其他參數不常見也不會用到(schme默認已經配置好了)所以還是不列出來了。
example command:
xcodebuild -workspace test.xcworkspace -scheme test -destination 'generic/platform=iOS' -configuration Debug archive -archivePath test.xcarchive -quiet
這段命令可以archive真機使用的Debug版本
2. Export
列出參數
-exportArchive (無參數,指明該xcodebuild命令是導出archive)
-archivePath (archive保存路徑)
-exportPath (導出的.ipa保存目錄,一般創建一個當前時間字符串為名的文件夾)
-exportOptionsPlist (提供一個.plist文件路徑,一般提供一個空個plist文件就可以了,具體配置我沒有去查^_^)
就這4個參數即可
example command:
xcodebuild -exportArchive -archivePath path1/path2/test.xcarchive -exportPath path1/path2/5月28日17時08分33秒 -exportOptionsPlist path1/path2/exportOptions.plist
這段命令就可以從exportPath中找到能安裝的.ipa文件
注意:
筆者使用macOS10.12.3系統,xcodebuild命令不需要提供配置文件及證書這些參數,該參數可以在xcode里配置好,所以這里就沒有列出來,需要的朋友請查找一下前輩們的博客。
這里提供一個自己嘗試寫的腳本