关于jenkins的使用和介绍,之前写过一篇文章,运行环境为Xcode 8.3.2 以下
文章链接: iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)
由于Xcode 9的发布, 导致自动打包出现问题:
Xcode 9 Build Failing: [app] requires a provisioning profile with the Push Notifications feature
xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
之前使用的是Xcode plus 插件,来进行编译/打包操作,可能是插件还没兼容Xcode 9,升级Xcode之后就不可以了
后来决定借助脚本来自己完成整个过程,简直不要太简单
pod install
clean
archive
export .ipa
关于项目配置 Git配置 触发器 描述文件 证书方面的请参考我之前的一篇文章
iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)
配置完成以后, 直接 Add build setp ---> Execute shell 添加一个运行脚本,以此来运行 打包过程
脚本内容: (# 在脚本中表示注释功能,脚本运行位置为 工程路径下 workspace)
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
echo "=================pod install================="
pod install --verbose --no-repo-update
#配置环境,Release或者Debug,默认release
Configuration="Release"
# 工程名
APP_NAME="XXX_iOS"
# 证书,这里使用生产证书与上面打包环境进行对应
CODE_SIGN_DISTRIBUTION="iPhone Distribution: XXX XXX XXX XXX Co., Ltd."
# info.plist路径
project_infoplist_path="./${APP_NAME}/Info.plist"
# 输出属性列表
ExportOptionPlist="./ExportOptions.plist"
# 取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
# 取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
DATE="$(date +%Y%m%d)"
# 要上传的ipa文件路径,这个文件路径需要确定,打包输出的时候,输出到这个指定位置,以后从这个位置上传.ipa文件
IPA_PATH="$WORKSPACE/build/${APP_NAME}_V${bundleShortVersion}_${DATE}"
# 打印指定的文件位置
echo ${IPA_PATH}
echo ${WORKSPACE}
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration $Configuration clean
echo "=================build================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration $Configuration CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
echo "=================生成 .xcarchive================="
xcodebuild archive -workspace "${APP_NAME}.xcworkspace" -scheme ${APP_NAME} -configuration $Configuration -archivePath "${WORKSPACE}/build/${APP_NAME}.xcarchive"
echo "=================导出.ipa================="
xcodebuild -exportArchive -archivePath "${WORKSPACE}/build/${APP_NAME}.xcarchive" -exportPath "${IPA_PATH}" -exportOptionsPlist ${ExportOptionPlist}
echo "=================upload .ipa tp Pgyer================="
# 上传到蒲公英的话,需要到蒲公英官网获取对应的User Key 和 API Key
#蒲公英上的User Key
uKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#蒲公英上的API Key
apiKey="xxxxxxxxxxxxxxxx"
#执行上传至蒲公英的命令
echo "${IPA_PATH}/${APP_NAME}.ipa"
curl -F "file=@${IPA_PATH}/${APP_NAME}.ipa" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload
echo http://www.pgyer.comecho
关于蒲公英 User Key 及 API Key 的获取,请参考这个文章使用 Jenkins 实现持续集成 (iOS),里面有关于另一种打包方式fastlane,这份文档好像蒲公英刚出来,感兴趣的可以先试试,后面有时间我也会尝试下.