一、背景
- 本文章适用于自动化打包入门的iOS开发用
- 本文章仅用于学习记录自动化打包的步骤
二、Jenkins的安装
1、安装Jenkins
brew install Jenkins
说明:Jenkins依赖java8环境,如果没安装java8,会报以下错误
解决方式:先安装java8。java8下载地址
2、java安装完毕,链接 launchd 配置文件
$ ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
//如果要其他机器也可以访问,把ip地址改为广播地址:--httpListenAddress=0.0.0.0
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
3、终端启动Jenkins
jenkins
等终端服务启动后,打开浏览器查看:http://localhost:8080/
4、解锁Jenkins
这里按照提示,去对应的文件中找初始密码,解锁。
5、安装推荐的插件
选左边的安装推荐的插件,坐等安装完毕就可以了,大概需要半个多小时。
6、安装完成后,设置用户名和密码
到这里,Jenkins的安装就结束了,接下来进入配置步骤
Jenkins的配置
1、安装插件
Keychains and Provisioning Profiles Management(管理本地的keychain和iOS证书的插件)
Xcode integration (用于xcode构建)
2、插件安装完成之后,配置证书
点击刚安装的Keychains and Provisioning Profiles Management
插件,如图:
分别按图示上传login.keychain
和pp
文件,其中,
login.keychain
文件路径:~/Library/Keychains
,
如果该路径下只有login.keychain-db,可以复制出来删除-db。
第3步中的证书名字,可以从钥匙串
的显示简介
拷贝
3、新建任务
创建一个任务,自由风格的任务。选择丢弃旧的构建,至于天数和保持的最大个数,按照自己的需求来就好,如图
4、源码管理
5、配置证书和PP文件
下面就是构建了,我们选脚本打包
三、配置构建脚本
构建菜单中,选择Execute shell
方式
脚本如下:
# 工程名
APP_NAME="你的工程名"
# 证书
CODE_SIGN_DISTRIBUTION="打包证书名"
# info.plist路径
#project_infoplist_path="./${APP_NAME}/Info.plist"
project_infoplist_path="Info.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)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
#要上传的ipa文件路径,这里我将ipa包放在用户目录下的archive文件夹中
IPA_PATH="$HOME/archive/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt
#获取权限
security unlock-keychain -p "你的电脑密码" $HOME/Library/Keychains/login.keychain
# //下面2行是没有Cocopods的用法
# echo "=================clean================="
# xcodebuild -target "${APP_NAME}" -configuration 'Release' clean
# echo "+++++++++++++++++build+++++++++++++++++"
# xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
#//下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace "xcworkspace所在的绝对路径" -scheme "${APP_NAME}" -configuration 'Debug' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "xcworkspace所在的绝对路径" -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Debug' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
#//打包输出ipa
xcrun -sdk iphoneos PackageApplication "./Debug-iphoneos/${APP_NAME}.app" -o ${IPA_PATH}
#上传到蒲公英
uKey="你的uKey"
#蒲公英上的API Key
apiKey="你的apiKey"
#蒲公英版本更新描述,这里取git最后一条提交记录作为描述
MSG=`git log -1 --pretty=%B`
#要上传的ipa文件路径
echo $IPA_PATH
#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "buildUpdateDescription=${MSG}" http://www.pgyer.com/apiv2/app/upload
注意:最后一步上传蒲公英,file的路径(绝对路径)一定要正确!
file=@/Users/你的电脑用户名/archive/RemoteControlUnit_V2.0.0_20190923.ipa
关于蒲公英部分,可以去蒲公英官网查看上传的API。
五、常见错误
1、git拉取代码报错
ERROR: Error cloning remote repo 'origin'
Finished: FAILURE
解决办法:检查git账号密码是否正确
2、项目中具体文件报错
The following build commands failed:
CompileC /Users/junwen/Library/Developer/Xcode/DerivedData/RemoteControlUnit-etabkeveyqjbcrbuumpecwtvfrlq/Build/Intermediates.noindex/RemoteControlUnit.build/Debug-iphoneos/RemoteControlUnit.build/Objects-normal/armv7/RCConstant.o /Users/junwen/workspace/remote_control/RemoteControlUnit/RemoteControlUnit/RemoteControlUnit/CommonDefine/RCConstant.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)
Build step 'Execute shell' marked build as failure
Finished: FAILURE
若控制台中报错的是项目中某个文件,如上面是RCConstant
,要检查项目代码,可试一下手动打包有没问题。
3、PackageApplication
报错
+ xcrun -sdk iphoneos PackageApplication ./Debug-iphoneos/RemoteControlUnit.app -o /Users/junwen/RemoteControlUnit_V2.0.0_20190923.ipa
xcrun: error: sh -c '/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.0.sdk -find PackageApplication 2> /dev/null' failed with exit code 17664: (null) (errno=No such file or directory)
xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
Build step 'Execute shell' marked build as failure
Finished: FAILURE
原因和解决办法:后面根据对比发现新版的Xcode少了这个PackageApplication,先去找个旧版的Xcode里面copy一份过来
点这里查看解决步骤
4、Pod报错
The following build commands failed:
PhaseScriptExecution [CP]\ Check\ Pods\ Manifest.lock /Users/junwen/Library/Developer/Xcode/DerivedData/RemoteControlUnit-etabkeveyqjbcrbuumpecwtvfrlq/Build/Intermediates.noindex/RemoteControlUnit.build/Debug-iphoneos/RemoteControlUnit.build/Script-B9BCC99D4501FBE8E2993623.sh
(1 failure)
Build step 'Execute shell' marked build as failure
Finished: FAILURE
原因是:切到其他分支上进行过pod update
,pod
仓库的版本不一致导致。
解决办法:切回到要打包的分支,重新pod install
参考文章:
iOS:使用jenkins实现xcode自动打包(最新)
Jenkins 打包 iOS
xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH