iOS多环境自动打包并上传蒲公英和发送推送通知
当你的项目需要多个帐号+多套证书,打包发布不同环境测试的时候,自动打包的能解决很多痛苦。
自动打包是在之前命令行的基础上进行的再一次升级 iOS命令行打包
首先,我们进行多环境的创建:
打开项目,依次点击
WX20190408-101427.png
我创建了2个新环境:Test和Beta,分别用于发布测试和正式环境的版本以供测试安装。
WX20190408-101935.png
接下来进行多环境参数设置:
我采用的是创建xcconfig来进行环境配置
WX20190408-102420.png
以此创建5个文件,分别为 Common.xcconfig、Debug.xcconfig、Release.xcconfig、Test.xcconfig、Beta.xcconfig
image.png
在Common.xcconfig文件中,配置一些基础信息:
image.png
在4个环境的配置中,需要引用Common.xcconfig,并且配置需要区分的内容,例如Debug.xcconfig:
image.png
Beta.xcconfig:
image.png
设置了APPName、APPVersion、Bundle Identifier、APPIcon等的区别
同时在info.plist中可配置这些参数:
image.png
GCC_PREPROCESSOR_DEFINITIONS
是 GCC 预编译头参数,我这边除了每个环境配置了一个之外,还配置了一个 TestEnvironment 来区分正式和测试。
接下来是环境配置:
image.png之后,便可在 Preprocessor Macros
上查看到预编译的头参数了
运行
image.png可以看到版本号、名字和TestEnvironment环境的值。iocn没有添加,所以是空的。
多环境自动打包
针对不同的环境,根据之前配置的xcconfig来选择不同的configration进行打包
image.png
环境选择:
#环境设置 (配置了四个环境,为打包准备的是 Test, Beta, Release 三个环境,分别对应 [测试服务器] [正式服务器] [正式服务器])
echo "请选择需要打包的环境:1:Test 2:Beta 3:Release"
read environment
while [[ $environment != 1 ]] && [[ $environment != 2 ]] && [[ $environment != 3 ]]; do
echo '请选择需要打包的环境:1:Test 2:Beta 3:Release'
read environment
done
配置蒲公英和信鸽推送信息
##########################################
##########################################
if [ $environment == 1 ];then
buildConfiguration=Test
#蒲公英上传到 key
uploadKey=蒲公英账号key
#信鸽推送的 ACCESS ID
accessid=信鸽推送ACCESS ID
#信鸽推送的 SECRET KEY
secretkey=信鸽推送SECRET KEY
elif [ $environment == 2 ];then
buildConfiguration=Beta
#蒲公英上传到 key
uploadKey=蒲公英账号key
#信鸽推送的 ACCESS ID
accessid=信鸽推送ACCESS ID
#信鸽推送的 SECRET KEY
secretkey=信鸽推送SECRET KEY
else
buildConfiguration=Release
fi
##########################################
##########################################
cleanProject:
function cleanProject(){
echo '/// ---------- \\\'
echo '/// 正在清理工程 \\\'
echo '/// ---------- \\\'
echo ''
xcodebuild clean \
-configuration $buildConfiguration \
-quiet || exit
echo '/// ---------- \\\'
echo '/// 清理工程完成 \\\'
echo '/// ---------- \\\'
echo ''
}
buildProject:
function buildProject(){
echo '/// ---------- \\\'
echo '/// 正在编译工程: '$buildConfiguration
echo '/// ---------- \\\'
echo ''
xcodebuild archive \
-workspace $projectPath/$projectName.xcworkspace \
-scheme $schemeName \
-configuration $buildConfiguration \
-archivePath $archiveBuildPath/$projectName.xcarchive \
-quiet || exit
echo '/// ---------- \\\'
echo '/// 编译工程完成 \\\'
echo '/// ---------- \\\'
echo ''
CFBundleShortVersionString=$(/usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleShortVersionString" "$archiveBuildPath/$projectName.xcarchive/Info.plist")
CFBundleVersion=$(/usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleVersion" "$archiveBuildPath/$projectName.xcarchive/Info.plist")
if [[ $releaseNote == '' ]];then
releaseNote="Auto build deploy + Version:$CFBundleShortVersionString + Build:$CFBundleVersion"
fi
}
buildIPA:
function buildIPA(){
echo '/// ---------- \\\'
echo '/// 正在生成ipa \\\'
echo '/// ---------- \\\'
echo ''
/usr/libexec/PlistBuddy -c "Print" $exportOptionsPlistPath
echo ''
xcodebuild -exportArchive \
-archivePath $archiveBuildPath/$projectName.xcarchive \
-exportPath $archiveExportPath \
-exportOptionsPlist $exportOptionsPlistPath || exit
if [ -e $archiveExportPath/$schemeName.ipa ];then
echo '/// ---------- \\\'
echo '/// ipa已经生成 \\\'
echo '/// ---------- \\\'
echo ''
if [ $environment != 3 ];then
uploadIPA
else
itunesConnect
fi
else
echo '/// ---------- \\\'
echo '/// ipa生成失败 \\\'
echo '/// ---------- \\\'
echo ''
fi
}
如果是测试版本则上传蒲公英:
echo '/// ---------- \\\'
echo '/// 开始上传ipa \\\'
echo '/// ---------- \\\'
echo ''
curl \
-F "file=@$archiveExportPath/$schemeName.ipa" \
-F "buildName=$displayName-$buildConfiguration" \
-F "_api_key=$uploadKey" \
-F "buildUpdateDescription=$releaseNote" \
https://www.pgyer.com/apiv2/app/upload
echo ''
echo '/// ---------- \\\'
echo '/// 打包上传成功 \\\'
echo '/// ---------- \\\'
echo ''
sendNotification
并且发送通知:
function sendNotification(){
timestamp=$(date +%s)
message="{\"aps\":{\"alert\":{\"title\":\"😍版本更新😍\",\"body\":\"😚新版本:${CFBundleShortVersionString}已发布😚请打开应用获取更新😚\"},\"badge\":\"0\",\"category\":\"INVITE_CATEGORY\"}}"
sign="POSTopenapi.xg.qq.com/v2/push/all_deviceaccess_id=${accessid}environment=1message=${message}message_type=0timestamp=${timestamp}${secretkey}"
signmd5=$(md5 -qs $sign)
echo ''
echo "时间戳::$timestamp"
echo ''
echo "签名::$sign"
echo ''
echo "MD5::$signmd5"
echo ''
curl -i \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "access_id=$accessid" \
-d "environment=1" \
-d "message=$message" \
-d "message_type=0" \
-d "timestamp=$timestamp" \
-d "sign=$signmd5" \
http://openapi.xg.qq.com/v2/push/all_device
echo ''
echo ''
}
如果是App Store版本,则上传App Store:
function itunesConnect(){
echo ''
echo '/// ---------------- \\\'
echo '/// 正在上传到AppStore \\\'
echo '/// ---------------- \\\'
echo ''
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool \
--upload-app \
-f "$archiveExportPath/$schemeName.ipa" \
-u $developerAccount \
-p $developerPassword
echo ''
echo '/// ---------- \\\'
echo '/// 打包上传成功 \\\'
echo '/// ---------- \\\'
echo ''
}
接下来就是把脚本放入项目的文件下下,
image.png
运行并选择你所需要打包的环境:
image.png
选择完,按下回车键,即可耐心等待结果,最终编译、打包、上传、通知都成功。
image.png