在工作中經常需要打包給測試人員測試,用Xcode 打包項目編譯太慢,一次打包可能需要十來分鐘,于是就想到了自動化打包。我的打包流程是Xcode打包 -> 上傳到蒲公英 -> 通知到釘釘群。我沒有使用Fastlane
或者jenkins
,因為大部分都是我自己打包,并且打包比較頻繁,所以就沒有使用。在這個過程也遇到不少問題,下面也會分享給大家。
流程
我使用的是shell
腳本自動化打包。
一、Xcode打包
1. 配置plist文件
provisioningProfiles: key是bundle id ,value是打包證書名稱
teamID: 賬號ID,可以不用配置
plist
這些配置一定要對應上,否則會出錯。
2. Xcode打包
清理工程 -> 編譯工程 -> 導出ipa
echo '正在清理工程'
xcodebuild \
clean -configuration ${development_mode} -quiet || exit
echo '清理完成'
echo '正在編譯工程:'${development_mode}
xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive -quiet || exit
echo '編譯完成'
echo '開始ipa打包'
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-quiet || exit
二、上傳蒲公英
我使用的是api2.0
,其他參數配置可以去蒲公英官網查看。
RESPONSE=$(curl -F "file=@$exportIpaPath/$product_name.ipa" -F "uKey=${user_key}" -F "_api_key=${api_key}" -F "updateDescription=${update_desc}" https://www.pgyer.com/apiv2/app/upload)
三、通知釘釘群
通知釘釘群需要配置機器人參數,釘釘開放平臺有詳細介紹。
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "markdown",
"markdown": {
"title":"xxxx",
"text":" \n **版本:** '"$appVersion"' (build '"$appBuildVersion"') \n **環境:** '"$envir_desc"' \n **說明:** '"$update_desc"'"
}
}'
注意:
title
需要包含關鍵詞
全部代碼
#使用方法
if [ ! -d ./IPADir ];
then
mkdir -p IPADir;
fi
#工程絕對路徑
project_path=/Users/shark/Desktop/APP
echo "環境:"
read envir_desc
echo "更新內容:"
read update_desc
#工程名
project_name=APP
#scheme名
scheme_name=APP
product_name=APP
#打包模式 Debug/Release
development_mode=Release
#蒲公英參數
user_key=xxx
api_key=xxx
current_path=$(cd `dirname $0`; pwd)
#build文件夾路徑
build_path=${current_path}/build
#plist文件所在路徑
exportOptionsPlistPath=${current_path}/exportTest.plist
#導出.ipa文件所在路徑
exportIpaPath=${current_path}/IPADir/${development_mode}
##json解析函數
function jsonParse() { # $1 $2 json lable
JSON_CONTENT=$1
KEY='"'$2'":'
echo ${JSON_CONTENT} | awk -F ${KEY} '{print $2}' | awk -F '"' '{print $2}'
}
##刪除斜杠'\'
function trimSlash() {
TEXT=$1
echo ${TEXT//'\'/''}
}
echo "第一步,進入項目工程文件"
cd $project_path
echo '正在清理工程'
xcodebuild \
clean -configuration ${development_mode} -quiet || exit
echo '清理完成'
echo '正在編譯工程:'${development_mode}
xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive -quiet || exit
echo '編譯完成'
echo '開始ipa打包'
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-quiet || exit
if [ -e $exportIpaPath/$product_name.ipa ]; then
echo 'ipa包已導出'
echo '發布ipa包到 =============蒲公英平臺============='
RESPONSE=$(curl -F "file=@$exportIpaPath/$product_name.ipa" -F "uKey=${user_key}" -F "_api_key=${api_key}" -F "updateDescription=${update_desc}" https://www.pgyer.com/apiv2/app/upload)
if [ $? -eq 0 ];then
echo "=============提交蒲公英成功 ============="
appQRCodeURL=$(trimSlash $(jsonParse "${RESPONSE}" "buildQRCodeURL"))
appVersion=$(jsonParse "${RESPONSE}" "buildVersion")
appBuildVersion=$(jsonParse "${RESPONSE}" "buildBuildVersion")
#通知到釘釘群 將xxxxxxxx替換為真實access_token `title`需要包含關鍵詞
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "markdown",
"markdown": {
"title":"xxxx",
"text":" \n **版本:** '"$appVersion"' (build '"$appBuildVersion"') \n **環境:** '"$envir_desc"' \n **說明:** '"$update_desc"'"
}
}'
else
echo "=============提交蒲公英失敗 ============="
fi
#open $exportIpaPath
else
echo 'ipa包導出失敗 '
fi
echo '打包ipa完成 '
exit 0
效果
釘釘群