Golang實現iOS自動打包並上傳fir

來源:互聯網
上載者:User

前言

作為iOS用戶端開發的小哥們,一定都有過一天給測試人員、產品組打包N次的經曆。如果每次都手動打包的話,不僅浪費了開發人員的時間,讓測試小姐姐煎熬等待也是件不厚道的事情。
所以自動化打包在此時就顯得尤為重要了。有了自動化打包工具,開發小哥只需要運行打包工具,剩下的事情就交給自動化打包工具就好了。工具會自動打包,並將ipa包上傳至fir,如果有需要還可以讓工具自動發送訊息通知測試小姐姐可以測試了。O(∩_∩)O哈哈哈~

基本命令

本次將使用 xcodebuild:命令, 產生Archive、匯出ipa
(ps: 據說還有其他命令也可以實現,就讓其他小夥伴來介紹吧。)
使用xcodebuild命令有兩個步驟:
第一步:archive:編譯打包成Archive 和Xcode操作「Product -> Archive」一致
xcodebuild archive -workspace xxx.xcworkspace -scheme xxx -configuration Release -archivePath ${ARCHIVE_PATH} CONFIGURATION_BUILD_DIR=${BUILD_DIR}

參數說明
-workspace:指定工作空間檔案xxx.xcworkspace
-scheme: 指定構建工程名稱
-configuartion: [Debug/Release]可選項,選擇Debug或者Release構建
-archivePath: 儲存產生.xcarchive包路徑
CONFIGURATION_BUILD_DIR: build時的檔案路徑(主要包含.a檔案、XXX.app檔案和XXX.app.dSYM檔案)如果不需要用到XXX.app.dSYM檔案中的二進位檔案(有些第三方崩潰統計需要用到此檔案),可以不加此項。

第二步:export:將產生的xxx.xcarchive檔案匯出成xxx.ipa。和Xcode操作「Organizer -> Archives -> Export」一致
xcodebuild -exportArchive -archivePath ${ARCHIVE_PATH} -exportOptionsPlist ${EXPORT_OPTIONS_PLIST_PATH} -exportPath ${EXPORT_DIR}

參數說明
-archivePath: 第一步中產生xxx.xcarchive檔案的路徑
-exportOptionsPlist: 匯出過程中需要的設定檔路徑
-exportPath: 匯出ipa的儲存目錄

特別說明
第二步中的設定檔特別重要,是你打包為測試包或者發布版本的關鍵。穩妥起見,請手動打包一次,從產生的目錄中擷取

以上兩步就是自動化打包的核心,如果以上命令中有不明白或有誤的地方,可通過命令xcodebuild -usage查看詳細資料。

如何使用

因為目前正在學習Golang,所以使用Golang來完成自動化打包工具的開發,本次打包的目標為測試版本,需要發布版本的小夥伴可根據原理執行修改。

1、建立項目

首先建立一個Golang項目,添加main.go檔案,因項目簡單,所以所有代碼均寫在main.go檔案中。

2、設定檔

為了以後可以打包不同的項目,所以講項目中需要用到的目錄等寫為一個設定檔,便於修改。
建立config.json檔案,設定檔名稱可以隨便起名。

{    "scheme":"構建的工程名稱", // eg.我的項目叫TShop    "path":"工程根目錄路徑", // eg. "~/Desktop/TShop_SVN"    "workspace":"工作空間檔案名稱", // 即項目中.xcworkspace尾碼名檔案的名稱    "archPath":"儲存Archive檔案的路徑+Archive檔案名稱",  // eg. "~/Desktop/autoArchive/TShop"    "exportPath":"匯出ipa檔案的路徑",    "config": "第二步中需要用到的設定檔的路徑",    "apiToken":"你註冊的fir的Api Token"}

3、在main.go中解析配置json檔案

在main.go中建立type

type buildInfo struct {    Path       string `json:"path"`    Workspace  string `json:"workspace"`    Scheme     string `json:"scheme"`    ArchPath   string `json:"archPath"`    ExportPath string `json:"exportPath"`    Config     string `json:"config"`    ApiToken   string `json:"apiToken"`}

在main函數中解析json

func main() {    file := "config.json" // 應改為你的設定檔的路徑    content, err := ioutil.ReadFile(file)    if err != nil {        panic(err.Error())    }    var info buildInfo    err = json.Unmarshal(content, &info)    if err != nil {        panic(err.Error())    }}

4、Archive

建立Archive函數來執行第一步的命令

func Archive(info buildInfo) {    err := os.Chdir(info.Path)    if err != nil {        panic(err.Error())    }    workspace := info.Workspace + ".xcworkspace"    archCommand := exec.Command("xcodebuild", "archive", "-workspace", workspace, "-scheme", info.Scheme, "-archivePath", info.ArchPath)    archCommand.Stdout = os.Stdout    err = archCommand.Run()    if err != nil {        panic(err.Error())    }}

5、Export

func Export(info buildInfo) {    arch := info.ArchPath + ".xcarchive"    export := exec.Command("xcodebuild", "-exportArchive", "-archivePath", arch, "-exportOptionsPlist", info.Config, "-exportPath", info.ExportPath)    export.Stdout = os.Stdout    err := export.Run()    if err != nil {        panic(err.Error())    }}

在main函數末尾調用Archive(info)和Export(info)並運行即可自動打包產生ipa檔案。

6、上傳至fir

使用fir-cli上傳ipa,需要下載安裝fir-cli,請自行查看git,按說明安裝。
上傳命令 fir publish APP_FILE_PATH -T API_TOKEN

參數說明
APP_FILE_PATH: 產生的.ipa檔案的路徑
-T: fir帳號的API Token
(publish的其他參數請查看文檔)

在main.go中建立Upload函數

func Upload(info buildInfo) {    ipaPath := info.ExportPath + info.Scheme + ".ipa"    upload := exec.Command("fir", "publish", ipaPath, "-T", info.ApiToken)    upload.Stdout = os.Stdout    err := upload.Run()    if err != nil {        panic(err.Error())    }}

然後在main函數的末尾調用Upload(info),即可將產生的ipa上傳至fir。
最後的main函數

func main() {    file := "config.json"    content, err := ioutil.ReadFile(file)    if err != nil {        panic(err.Error())    }    var info buildInfo    err = json.Unmarshal(content, &info)    if err != nil {        panic(err.Error())    }    Archive(info)    Export(info)    Upload(info)}

如果配置無誤,在命令列工具中輸入go run main.go即可完成自動打包並上傳fir的全部流程。
也可以使用go命令將該工具產生為可執行檔。以後需要打測試包的時候,雙擊自動化打包工具就完成了所有流程,是不是很方便呢?

O(∩_∩)O
      完

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.