關(guān)于fastlane
是什么,怎么安裝,網(wǎng)上已經(jīng)有很多文章,請(qǐng)自行baidu
Google
fastlane 官網(wǎng)
最終想要實(shí)現(xiàn)的流程執(zhí)行命令-->打包-->上傳蒲公英-->提取下載鏈接二維碼地址-->展示下載二維碼
- 首先進(jìn)入工程根目錄執(zhí)行 根據(jù)提示操作完成初始化,最終會(huì)在工程根目錄下生成一個(gè)
fastlane
文件夾以及里面相關(guān)所需的文件
fastlane init
- 打開(kāi)
fastlane
文件夾中的Fastfile
文件,按照需要編寫(xiě),我的工程是配置了多target
,所以需要對(duì)每次打包的target
做區(qū)分,同時(shí)內(nèi)部測(cè)試也是用的企業(yè)賬號(hào),同樣也要區(qū)分
fastlane_version "2.19.1"
default_platform :ios
# 上傳企業(yè)證書(shū)包
def upload_inhouse(op)
scheme = ""
if op[:env] == "ci"
scheme = "ShowStart_3.0_PRO_CI"
elsif op[:env] == "dev"
scheme = "ShowStart_3.0_PRO_DEV"
else
scheme = "ShowStart_3.0_PRO"
end
sh "chmod +x ./uploadipa.sh && ./uploadipa.sh ../build/#{scheme}.ipa"
end
#上傳線上證書(shū)包
def upload_ipa(op)
scheme = ""
if op[:env] == "ci"
scheme = "ShowStart_3.0_CI"
elsif op[:env] == "dev"
scheme = "ShowStart_3.0_DEV"
else
scheme = "ShowStart_3.0_PRO"
end
sh "chmod +x ./uploadipa.sh && ./uploadipa.sh ../build/#{scheme}.ipa"
end
# 企業(yè)證書(shū)打包
def prepare_inhouse(op)
scheme = ""
if op[:env] == "ci"
scheme = "ShowStart_3.0_PRO_CI"
elsif op[:env] == "dev"
scheme = "ShowStart_3.0_PRO_DEV"
else
scheme = "ShowStart_3.0_PRO"
end
gym(
scheme: "#{scheme}",
workspace: "ShowStart_3.0.xcworkspace",
clean: true,
export_method: "enterprise",
output_directory: "build",
include_bitcode: false,
configuration: "Release"
)
# sh "chmod +x ./uploadipa.sh && ./uploadipa.sh ../build/#{scheme}.ipa"
upload_inhouse(op)
end
# 正式環(huán)境證書(shū)打包
def prepare_adhoc(op)
scheme = ""
if op[:env] == "ci"
scheme = "ShowStart_3.0_CI"
elsif op[:env] == "dev"
scheme = "ShowStart_3.0_DEV"
else
scheme = "ShowStart_3.0_PRO"
end
gym(
scheme: "#{scheme}",
workspace: "ShowStart_3.0.xcworkspace",
clean: true,
export_method: "ad-hoc",
output_directory: "build",
include_bitcode: false,
configuration: "Release"
)
# sh "chmod +x ./uploadipa.sh && ./uploadipa.sh ../build/#{scheme}.ipa"
upload_ipa(op)
end
# 修改 版本號(hào)和build號(hào)
def prepare_version(op)
increment_version_number(
version_number: op[:v]
)
increment_build_number(
build_number: op[:b]
)
end
platform :ios do
before_all do
# ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
# cocoapods
# sh "chmod +x ./checkfile.sh && ./checkfile.sh"
end
desc "Build appstore"
lane :appstore do |op|
sh "chmod +x ./checkfile.sh && ./checkfile.sh"
prepare_version(op)
gym(
scheme: "ShowStart_3.0",
workspace: "ShowStart_3.0.xcworkspace",
clean: true,
export_method: "app-store",
output_directory: "build",
include_bitcode: false,
configuration: "Release"
)
end
desc "Build inhouse"
lane :pro do |op|
sh "chmod +x ./checkfile.sh && ./checkfile.sh"
prepare_inhouse(op)
end
desc "Build adhoc"
lane :adhoc do |op|
sh "chmod +x ./checkfile.sh && ./checkfile.sh"
prepare_adhoc(op)
end
desc "upload_inhouse"
lane :uploadpro do |op|
upload_inhouse(op)
end
desc "upload_ipa"
lane :upload do |op|
upload_ipa(op)
end
after_all do |lane|
end
error do |lane, exception|
end
end
- 如何執(zhí)行上面定義的
lane
呢?
#在工程根目錄下
fastlane pro env:ci
# 意思就是 執(zhí)行定義的lane為 :pro 的
# env:ci 參數(shù)
# 然后就會(huì)安裝你定義的lane里面流程運(yùn)行
- 上傳到蒲公英,如果上傳成功則解析出安裝地址的二維碼鏈接,然后下載二維碼圖片,然后直接在
terminal
中展示
#!/bin/sh
echo "~~~~~~~~~~~~~~~~上傳ipa到蒲公英~~~~~~~~~~~~~~~~~~~"
echo "ipa 文件路徑"
echo $1
if [[ ! -f "$1" ]]
then
echo "ipa 文件不存在"
exit 0
fi
# 保存蒲公英上傳結(jié)果
result=""
qrcodepath=""
# 上傳蒲公英 并將結(jié)果賦值給 result變量
result=$(curl -F "file=@$1" \
-F "uKey=xxx" \
-F "_api_key=xxxx" \
-F "password=xxx" \
-F "isPublishToPublic=xx" \
https://qiniu-storage.pgyer.com/apiv1/app/upload --verbose)
if [ $? = 0 ]
then
echo "\n~~~~~~~~~~~~~~~~上傳蒲公英成功~~~~~~~~~~~~~~~~~~~"
else
echo "\n~~~~~~~~~~~~~~~~上傳蒲公英失敗~~~~~~~~~~~~~~~~~~~"
exit 0
fi
# 提取二維碼地址
# 刪除 result 中的字符串 保留 "appQRCodeURL":" 之后的字符串
qrcodepath=${result#*\"appQRCodeURL\":\"}
# echo $qrcodepath
# 刪除 qrcodepath 中的字符串 保留 "}} 之前的字符串
qrcodepath=${qrcodepath%\"\}\}*}
# echo $qrcodepath
# 替換 \/ 為 /
qrcodepath=${qrcodepath//\\/}
# echo $qrcodepath
# 驗(yàn)證提取出來(lái)的地址的前綴是不是 http
if [[ ! "$qrcodepath" =~ ^http ]]; then
#statements
echo "提取二維碼地址不對(duì)"
exit 0
fi
# 下載二維碼
echo "二維碼地址:" $qrcodepath
# 使用 curl 下載 二維碼圖片并保存到當(dāng)前目錄下
curl -o code.jpg $qrcodepath
if [[ ! -f "./code.jpg" ]]
then
echo "二維碼下載失敗"
exit 0
else
echo "二維碼下載成功"
# 顯示二維碼
# 調(diào)用 imgcat.sh 腳本 展示二維碼
# imgcat 是網(wǎng)上找的一個(gè) https://github.com/Dorian/imgcat/blob/master/imgcat
chmod +x ./imgcat.sh && ./imgcat.sh code.jpg
fi
exit 0
-
Fastfile
中調(diào)用的checkfile.sh
腳本,沒(méi)啥內(nèi)容就是檢查目錄的
#!/bin/sh
if [ -d "../build" ]
then
rm -rf ../build
fi
- 最終的效果
fastlane pro env:ci
# 稍等一下 執(zhí)行命令-->打包-->上傳蒲公英-->提取下載鏈接二維碼地址-->展示下載二維碼 全自動(dòng)完成
QQ20170426-173500@2x.png
- 上面的步驟其實(shí)還可以簡(jiǎn)化
# 比如專門(mén)配置一臺(tái)Mac電腦并配置好`Jenkins`的一切,再搭配`fastlane`
# 配置Jenkins定時(shí)任務(wù) 比如每天 20:00 自動(dòng)開(kāi)始打包-->上傳分發(fā)平臺(tái)-->通知測(cè)試
# 也可給測(cè)試人員配置一個(gè)Jenkins賬號(hào),由測(cè)試人員登錄Jenkins 自己選擇性打包
# 也可以選擇用NodeJs 寫(xiě)一個(gè)webserver 配合 git hook 在提交時(shí)寫(xiě)入特定的信息 webserver 提取到特定信息后 開(kāi)始執(zhí)行任務(wù)