iOS自動打包并發(fā)布到Fir.im

2018-06-14 14:07 更新

一、前言

最近公司有個新需求,就是后臺要添加一個新功能,在頁面上更換App的標(biāo)題、Logo等信息,然后可以自動生成apk和ipa文件。于是就研究了一下自動打包ipa這個功能

二、牛逼的工具fastlane

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

三、實(shí)現(xiàn)原理簡介

1、安裝fastlane

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

$ sudo gem install fastlane
  • 1
  • 1

(需提前安裝gem環(huán)境)

2、使用gym工具

在安裝fastlane時(shí)已默認(rèn)安裝了常用工具,所以不需要另外安裝gym工具

調(diào)用gym需要cd到項(xiàng)目目錄,然后執(zhí)行

$ fastlane gym
  • 1
  • 1

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

如果不需要提交到ITunesConnet中,可執(zhí)行

$ fastlane gym --export_method ad-hoc
  • 1
  • 1

會自動生成ipa文件,以便后續(xù)操作。
詳細(xì)的gym命令請參考gym文檔

3、使用fir

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

$ gem install fir-cli
  • 1
  • 1

安裝后可以先執(zhí)行登陸操作,登陸后在后續(xù)操作中可以不用重復(fù)添加token了(token需要到fir個人賬號中獲得),登陸方法:

$ fir login XXX_YOUR_API_TOKEN_XXX
  • 1
  • 1

發(fā)布ipa到fir,需要提前準(zhǔn)備好ipa文件,執(zhí)行

$ fir publish APP_FILE_PATH
  • 1
  • 1

四、自動化打包

為了實(shí)現(xiàn)一鍵打包的方案,需要將gym和fir結(jié)合到一起,這里利用了一個腳本文件,在使用時(shí)直接執(zhí)行這個腳本文件即可,文件內(nèi)容如下:

#!/bin/bash

#設(shè)置超時(shí)
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120

#計(jì)時(shí)
SECONDS=0

#假設(shè)腳本放置在與項(xiàng)目相同的路徑下
project_path=$(pwd)
#取當(dāng)前時(shí)間字符串添加到文件結(jié)尾
now=$(date +"%Y_%m_%d_%H_%M_%S")

#指定項(xiàng)目的scheme名稱
scheme="Demo"
#指定要打包的配置名
configuration="Adhoc"
#指定打包所使用的輸出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method參數(shù)
export_method='ad-hoc'

#指定項(xiàng)目地址
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"
#獲取執(zhí)行命令時(shí)的commit message
commit_msg="$1"

#輸出設(shè)定的變量值
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}"

#輸出總用時(shí)
echo "===Finished. Total time: ${SECONDS}s==="
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

(1、使用該文件需要項(xiàng)目支持CocoaPods;2、本項(xiàng)目的項(xiàng)目名稱是Demo,在實(shí)際使用時(shí)需要將Demo替換成自己的項(xiàng)目名稱;3、需要將XXX_YOUR_API_TOKEN_XXX 換成自己的fir token)

如文件名文AutoPack.sh,打包時(shí)只需要在cd到項(xiàng)目文件下,執(zhí)行:

$ ./AutoPack.sh
  • 1
  • 1

執(zhí)行后會自動打包,ipa文件自動存儲到工程文件同目錄下的IPA文件夾下,并且會自動提交到Fir上,整個流程執(zhí)行結(jié)束后會提示完成時(shí)間,如出現(xiàn)錯誤也會打印出來。

五、遇到的問題

在執(zhí)行上傳到Fir上的時(shí)候遇到了SSL證書報(bào)錯,最后找了半天原因是Ruby的數(shù)據(jù)源地址使用的https地址,換成http地址即可。解決辦法戳這里

六、參考

1、使用fastlane gym/xctool編寫ipa打包腳本
2、Fastlane自動化構(gòu)建工具(完整解決測試和發(fā)布流程)
3、Fastlane + Bugly自動化部署測試包
4、iOS App 自動化上傳 AppStore ,一鍵部署 App

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號