「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」
前言
相信在iOS开发中,肯定会有很多时间都是在打包...尤其是iOS的包只能在MAC上打包的时候, 就这点而言就以及很是烦人了, 很多没有什么意义的工作, 完全就是耗时间, 那么身为一个程序员, 怎么能在这些无用的工作上浪费时间呢, 那么今天介绍的就是自动化shell打包脚本, 纯本地跑的脚本
脚本
参数配置
脚本执行的时候是需要非常多的参数的, 这些参数有的是动态配置的, 有的是运行时候的环境变量, 那么就需要声明很多的变量, 我按照我的脚本来写的这些变量, 如果有更好的方式, 谢谢指点
# 默认 运行环境
ENVIRONMENT="dev"
# 默认 编译模式
CONFIGURATION="Debug"
# 默认发布内容
PUSH_MESSAGE="暂无修改内容"
# 分支名称
BRANCH_NAME="2.2.0"
while getopts ":e:b:m:" opt
do
case $opt in
# 运行环境
e) ENVIRONMENT=$OPTARG ;;
# 编辑模式
b) CONFIGURATION=$OPTARG ;;
# 发布内容
m) PUSH_MESSAGE=$OPTARG ;;
?) echo "未知参数" exit 1;;
esac done
上述的就是 启动时候可以配置的变量
# 钉钉机器人TOKEN
ROBOT_TOKEN=""
# 蒲公英 秘钥
PGYER_UESR_KEY="xxxxx"
PGYER_API_KEY="xxxx"
#xcode 编译模式
XCODE_CONFIGURATION=${CONFIGURATION}${ENVIRONMENT}
# 工程名
APP_NAME="xxx"
# scheme
SCHEME=${APP_NAME}_${ENVIRONMENT}
# 工程目录
APP_PATH="${HOME}/${APP_NAME}"
上述就是 固定配置写死的数据
# 工程文件
WORKSPACE="${APP_PATH}/${APP_NAME}.xcworkspace"
# 获取Version
VERSION_NUMBER=`sed -n '/MARKETING_VERSION/{s/MARKETING_VERSION = //;s/;//;s/^[[:space:]]*//;p;q;}' ${APP_PATH}/${APP_NAME}.xcodeproj/project.pbxproj`
上述 就是获取工程的一些信息
# 打包目录
PACKAGE_PATH="${HOME}/package"
# 打包临时文件
ARCHIVE_PATH="${PACKAGE_PATH}/tmp/${APP_NAME}.xcarchive"
# 打包配置文件路径
ARCHIVE_OPTIONS_PATH="${PACKAGE_PATH}/ExportOptions/${CONFIGURATION}.plist"
# 导出ipa名称
DATE="$(date "+%Y%m%d%H%M%S")"
IPA_PATH="${PACKAGE_PATH}/${ENVIRONMENT}_${CONFIGURATION}_V${VERSION_NUMBER}_${DATE}"
上述 就是打包的一些配置信息
编译
编译的还是采用xcodebuild的方式,这种方式应该大家都不陌生, 随便网上都可以查的到, 这里就不在细说了
echo "\n\n+++++++++++++++++clean+++++++++++++++++"
xcodebuild -workspace ${WORKSPACE} -scheme ${SCHEME} -configuration ${XCODE_CONFIGURATION} clean
echo "\n\n+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace ${WORKSPACE} -scheme ${SCHEME} -sdk iphoneos -configuration ${XCODE_CONFIGURATION} -archivePath ${ARCHIVE_PATH} archive
打包导出
打包还是需要一定的注意时候的, 证书配置等等的,还是需要研究一下的
echo "\n\n+++++++++++++++++export+++++++++++++++++"
xcodebuild -exportArchive -archivePath ${ARCHIVE_PATH} -exportPath ${IPA_PATH} -exportOptionsPlist ${ARCHIVE_OPTIONS_PATH}
上传蒲公英
将打出来的ipa包上传到蒲公英, 这样方便测试人员下载, 当然前提就是你将测试机的UDID添加到描述文件中来.
# 上传文件, 获取返回数据
JSON_TMP=`curl -F "file=@${IPA_PATH}/${APP_NAME}.ipa" -F "uKey=${PGYER_UESR_KEY}" -F "_api_key=${PGYER_API_KEY}" https://upload.pgyer.com/apiv1/app/upload`
# json替换 \\
JSON=${JSON_TMP//\\/}
# 获取二维码连接
QR_CODE_URL_TMP=`echo ${JSON} | jq '.data.appQRCodeURL'`
QR_CODE_URL=${QR_CODE_URL_TMP//\"/}
echo "\n返回的数据: ${JSON}\n"
echo "图片链接:\033[34m ${QR_CODE_URL} \033[0m"
钉钉推送
完成所有任务后, 将执行任务的结果推送到钉钉, 可以直接@测试人员, 就这就剩的打字交流了, 非常方便
当然钉钉机器人, 可以去钉钉的官网查看对应的文档
echo "\n\n\033[34m+++++++++++++++++钉钉推送消息+++++++++++++++++\033[0m"
# 推送的内容
CONTENT="{\
'msgtype':'markdown',\
'markdown':{\
'title':'iOS发版',\
'text':'\
##### 发布版本: ${VERSION_NUMBER} \n\
##### 打包模式: ${CONFIGURATION} \n\
##### 发布环境: [${ENVIRONMENT}]() \n\
##### 发布时间: $(date "+%Y-%m-%d %H:%M:%S") \n\
##### 发布内容:\n > ${PUSH_MESSAGE} \n\n\
 \n\n\
[@xxxxx]() \n\
'},\
'at':{\
'atMobiles':['xxxxx'],
'isAtAll':false\
}\
}"
curl -H 'Content-Type:application/json' -d "${CONTENT}" "https://oapi.dingtalk.com/robot/send?access_token=${ROBOT_TOKEN}"
# 清除打包的缓存文件
rm -rf $ARCHIVE_PATH
结语
写的比仓促, 如果哪里有不明白的可以评论区告诉我, 我会回复大家的, 哈哈, 加油吧iOS人