1. 程式人生 > >iOS自動打包併發布到Fir.im

iOS自動打包併發布到Fir.im

一、前言

最近公司有個新需求,就是後臺要新增一個新功能,在頁面上更換App的標題、Logo等資訊,然後可以自動生成apk和ipa檔案。於是就研究了一下自動打包ipa這個功能

二、牛逼的工具fastlane

fastlane這個工具牛逼之處就是幾乎包含了和ipa相關的所有功能,例如打包、提交稽核、測試、自動截圖等等。這裡就主要介紹一下其中的打包工具gym。

三、實現原理簡介

1、安裝fastlane

這裡先說一下fastlane的安裝,很簡單隻需在終端輸入:

$ sudo gem install fastlane

(需提前安裝gem環境)

2、使用gym工具

在安裝fastlane時已預設安裝了常用工具,所以不需要另外安裝gym工具

呼叫gym需要cd到專案目錄,然後執行

$ fastlane gym

這個命令是自動打包然後推送到ITunesConnect中,在這個過程中需要輸入AppId及密碼。

如果不需要提交到ITunesConnet中,可執行

$ fastlane gym --export_method ad-hoc

會自動生成ipa檔案,以便後續操作。
詳細的gym命令請參考gym文件

3、使用fir

之前一直是在fir的頁面上進行操作,也是第一次在命令列使用fir。
安裝 fir-cli

$ gem install fir-cli

安裝後可以先執行登陸操作,登陸後在後續操作中可以不用重複新增token了(token需要到fir個人賬號中獲得),登陸方法:

$ fir login XXX_YOUR_API_TOKEN_XXX

釋出ipa到fir,需要提前準備好ipa檔案,執行

$ fir publish APP_FILE_PATH

四、自動化打包

為了實現一鍵打包的方案,需要將gym和fir結合到一起,這裡利用了一個指令碼檔案,在使用時直接執行這個指令碼檔案即可,檔案內容如下:

#!/bin/bash

#設定超時
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120

#計時
SECONDS=0

#假設指令碼放置在與專案相同的路徑下
project_path=$(pwd)
#取當前時間字串新增到檔案結尾
now=$(date +"%Y_%m_%d_%H_%M_%S") #指定專案的scheme名稱 scheme="Demo" #指定要打包的配置名 configuration="Adhoc" #指定打包所使用的輸出方式,目前支援app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method引數 export_method='ad-hoc' #指定專案地址 workspace_path="$project_path/Demo.xcworkspace" #指定輸出路徑 output_path="$project_path/IPA" #指定輸出歸檔檔案地址 archive_path="$output_path/Demo_${now}.xcarchive" #指定輸出ipa地址 ipa_path="$output_path/Demo_${now}.ipa" #指定輸出ipa名稱 ipa_name="Demo_${now}.ipa" #獲取執行命令時的commit message commit_msg="$1" #輸出設定的變數值 echo "===workspace path: ${workspace_path}===" echo "===archive path: ${archive_path}===" echo "===ipa path: ${ipa_path}===" echo "===export method: ${export_method}===" echo "===commit msg: $1===" #先清空前一次build fastlane gym --workspace ${workspace_path} --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${output_path} --output_name ${ipa_name} #上傳到fir fir publish ${ipa_path} -T "XXX_YOUR_API_TOKEN_XXX" -c "${commit_msg}" #輸出總用時 echo "===Finished. Total time: ${SECONDS}s==="

(1、使用該檔案需要專案支援CocoaPods;2、本專案的專案名稱是Demo,在實際使用時需要將Demo替換成自己的專案名稱;3、需要將XXX_YOUR_API_TOKEN_XXX 換成自己的fir token)

如檔名文AutoPack.sh,打包時只需要在cd到專案檔案下,執行:

$ ./AutoPack.sh

執行後會自動打包,ipa檔案自動儲存到工程檔案同目錄下的IPA資料夾下,並且會自動提交到Fir上,整個流程執行結束後會提示完成時間,如出現錯誤也會打印出來。

五、遇到的問題

在執行上傳到Fir上的時候遇到了SSL證書報錯,最後找了半天原因是Ruby的資料來源地址使用的https地址,換成http地址即可。解決辦法戳這裡

六、參考