iOS 自動化打包+上傳到蒲公英+通知到釘釘群

在工作中經常需要打包給測試人員測試,用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":"![screenshot]('"$appQRCodeURL"')  \n  **版本:** '"$appVersion"' (build '"$appBuildVersion"')  \n  **環境:** '"$envir_desc"'  \n  **說明:** '"$update_desc"'"
      }
  }'

注意: title需要包含關鍵詞

全部代碼

githup代碼

#使用方法
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":"![screenshot]('"$appQRCodeURL"')  \n  **版本:** '"$appVersion"' (build '"$appBuildVersion"')  \n  **環境:** '"$envir_desc"'  \n  **說明:** '"$update_desc"'"
        }
    }'
    else
    echo "=============提交蒲公英失敗 ============="
    fi

#open $exportIpaPath
else
echo 'ipa包導出失敗 '
fi
echo '打包ipa完成  '

exit 0

效果

釘釘群
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容