iOS使用Jenkins实现自动化打包

一、背景

  • 本文章适用于自动化打包入门的iOS开发用
  • 本文章仅用于学习记录自动化打包的步骤

二、Jenkins的安装

1、安装Jenkins

brew install Jenkins

说明:Jenkins依赖java8环境,如果没安装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、安装推荐的插件

安装推荐插件

选左边的安装推荐的插件,坐等安装完毕就可以了,大概需要半个多小时。
安装插件.png

6、安装完成后,设置用户名和密码

设置用户名密码.png

安装完成

到这里,Jenkins的安装就结束了,接下来进入配置步骤

Jenkins的配置

1、安装插件
Keychains and Provisioning Profiles Management(管理本地的keychain和iOS证书的插件)
Xcode integration (用于xcode构建)

安装插件1
安装插件2

2、插件安装完成之后,配置证书
点击刚安装的Keychains and Provisioning Profiles Management插件,如图:

证书配置

image.png

分别按图示上传login.keychainpp文件,其中,
login.keychain文件路径:~/Library/Keychains,
如果该路径下只有login.keychain-db,可以复制出来删除-db。
第3步中的证书名字,可以从钥匙串显示简介拷贝

3、新建任务
创建一个任务,自由风格的任务。选择丢弃旧的构建,至于天数和保持的最大个数,按照自己的需求来就好,如图

保留天数.jpeg

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 updatepod仓库的版本不一致导致。
解决办法:切回到要打包的分支,重新pod install

参考文章:
iOS:使用jenkins实现xcode自动打包(最新)
Jenkins 打包 iOS
xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH

你可能感兴趣的:(iOS使用Jenkins实现自动化打包)