iOS-自动打包脚本

1,598 阅读2分钟

「这是我参与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\
![qrcode]($QR_CODE_URL) \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人