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

效果

钉钉群
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,302评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,563评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,433评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,628评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,467评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,354评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,777评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,419评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,725评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,768评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,543评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,387评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,794评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,032评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,305评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,741评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,946评论 2 336

推荐阅读更多精彩内容