前一篇:Jenkins八:Jenkins添加新的target自动打包
后一篇:Jenkins十:Mac通过 Tomcat里安装Jenkins配置Master-Slave打包iOS并上传到svn服务器
前言
之前已经在jenkins自动打包时部署了一个nginx作为企业版ipa服务器,当时使用的人不多,就删掉了,现在项目经理让重新做一次,记录下流程
参考资料:
1、部署nginx服务器
2、部署nginx服务器ssh,支持https访问
3、部署ipa下载说明的plist的服务器,这个可以和2是同一个服务器,单要保证支持https的证书是正式机构签名的ssl证书,不能是自签名的证书,如果没有机构前面的证书,可以把使用GitHub等公共仓库代替,把plist存到GitHub上
4 生成ipa包、ipa下载plist、dYSM
打ipa包
# schema名称,需要替换成自己要打包的scheme
SCHEMECA="xxxxx"
#下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace "./xxx/xxxx.xcworkspace" -scheme ${SCHEMECA} -configuration "Release" clean
#生成xxx.app的包
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "./xxx/xxx.xcworkspace" -scheme ${SCHEMECA} -sdk iphoneos -configuration "Release" CODE_SIGN_IDENTITY="xxxx" SYMROOT='$(PWD)' -allowProvisioningUpdates
#读取打包的配置信息
#读取bundleId
bundleId=$(/usr/libexec/PlistBuddy -c "print CFBundleIdentifier" "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/Info.plist")
#读取build版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/Info.plist")
#读取展示版本号
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/Info.plist")
#读取APP的名称
displayNmae=$(/usr/libexec/PlistBuddy -c "print CFBundleName" "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/Info.plist")
#拷贝APPIcon到指定的地方
cp "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/AppIcon60x60@3x.png" "/xxx/${SCHEMECA}_AppIcon60x60@3x.png"
#将xxx.app的包转换成xxx.ipa的包
xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${SCHEMECA}.app" -o "xxx.ipa"
#将xxx.ipa上传到其他服务器或文件夹
#删除xxx.ipa
#生成用于不同shell脚本间公用的参数
#先删除之前用过的参数文件
if [ -f "${WORKSPACE}/userParams.txt" ];then
rm "${WORKSPACE}/userParams.txt"
else
echo "文件不存在"
fi
#将参数写入到参数文件里
echo bundleID="${bundleId}" >> "${WORKSPACE}/userParams.txt"
echo bundleShortVersion="${bundleShortVersion}" >> "${WORKSPACE}/userParams.txt"
echo bundleVersion="${bundleVersion}" >> "${WORKSPACE}/userParams.txt"
echo displayNmae="${displayNmae}" >> "${WORKSPACE}/userParams.txt"
echo SCHEMECA="${SCHEMECA}" >> "${WORKSPACE}/userParams.txt"
生成plist
#读取shell之间的共享参数
source "${WORKSPACE}/userParams.txt"
cat << EOF > xxx.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>需要具体改这里写出需要下载的ipa的地址,比如:https://127.0.0.1/ipas/12345.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>${bundleID}</string>
<key>bundle-version</key>
<string>${bundleShortVersion}</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>${displayNmae}</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOF
#压缩文件
zip -q -r -m -o "xxx.plist.zip" "xxxx.plist"
#将plist文件上传到指定服务器
curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?
\ app_key=xxxxxx&app_id=xxxxxx"
\ --form "api_version=1"
\ --form "app_id=xxxxxx"
\ --form "app_key=xxxxxx"
\ --form "symbolType=2"
\ --form "bundleId=${bundleId}"
\ --form "productVersion=${bundleShortVersion}"
\ --form "channel=xxx"
\ --form "fileName=${UNIQUE_NAME}.app.dSYM.zip"
\ --form "file=@${UNIQUE_NAME}.app.dSYM.zip"
\ --verbose
#删除生成的文件
rm "xxxx.plist"
rm "xxx.plist.zip"
生成手机可访问点击自动安装的html
source "${WORKSPACE}/userParams.txt"
if [ -f "/xxx/xxx/index.html" ];then
rm "/xxx/xxx/index.html"
else
echo "文件不存在"
fi
cat << EOF > /xxx/xxx/index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>${displayNmae}</title>
</head>
<body>
<a href="itms-services://?action=download-manifest&url=https://xxxx.plist">下载${displayNmae}ios测试版</a>
</body>
</html>
EOF
生成dSYM文件
#读取shell之间的共享参数
source "${WORKSPACE}/userParams.txt"
#生成dsYM文件
dsymutil "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/${SCHEMECA}" -o "xxxx.app.dSYM"
if [ ! -d "xxx.app.dSYM" ];then
echo "没有可以压缩的dsYM文件"
else
zip -q -r -m -o "xxxx.app.dSYM.zip" "xxx.app.dSYM"
#上传dsYM文件到解析平台或保存到指定文件夹
fi
使用git或svn提交创建的包
#git提交
#cd "/xxx/xxxx"
#git pull
#git add xxx
#git commit -m "自动提交plist"
#git push
#svn提交
#export LC_ALL=en_US.UTF-8
#export LANG=en_US.UTF-8
#cd /xxx/xxxx
#svn up
#svn add . --no-ignore --force
#svn ci -m "jenkins ios auto commit"