摘要
手动打包、手动上传是一件非常烦琐的事件,通常会浪费开发者大量的时间,这时候自动打包与分发就起到的重要的角色。本文主要分为4个部分
- 讲述jenkins在mac下的安装与任务创建
- fastlane安装与应用
- 自动上传到蒲公英并邮件通知相关人员去下载安装
- xcode打包原理
一、mac环境下jenkins的安装与配置
1.1 手动下载安装
- jenkins,安装与我们平时安装别的软件差不多
1.2 通过终端安装
- 安装 homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 安装 jenkins
brew install jenkins
- 查看jenkins目录:
cd /Users/用户名/.jenkins
1.3 启动jenkins与配置
- 在终端输入:jenkins即可后台启动服务,然后用浏览器启动页面如下:
- 直接在命令行中输入:jenkins即可启动。下面三个为常用的jenkins启停方法
http://localhost:8080 // 打开jenkins可视化页面
http://localhost:8080/exit //退出Jenkins
http://localhost:8080/restart //重启
http://localhost:8080/reload //重新加载
-
启动时,需要解锁jenkins,按照提示去目录下打开文件,把密码复制出来填入输入框,如果碰到权限问题,需要进行操作: 右键 - 显示简介 - 修改权限。
-
启动后,选择安装推荐插件等,即下图中的第一项
-
设置管理员信息
-
进入主面,如下
1.34 jenkins钥匙串插件,访问地址与端口号更改等
-
地址修改
进入上面中系统管理->系统设置
如下:
-
全局属性设置
上图中,PATH参数获取方法:
终端输入echo $PATH
-
打包成功或失败,邮件通知
1.4 jenkins插件安装
上面我们选择推荐安装,对于ios开发,其实大部分已经默认安装,这里我们以keychain为例安装一个(后续fastlane用到match匹配同步开发证书时,会访问钥匙串)
-
在jenkins主面,系统管理->控件管理
-
选择可选插件,右边搜索框输入keychain,勾先安装完成后重启jenkins,点击安装
- 设置keychain相关,在jenkins主面,系统管理->控件管理,点击keychain。。。,然后来点页面:
打开keychain位置的命令:open ~/Library/Keychains/
如果不设置这个,那么在创建任务中,在Excute shell中就要加上这句:security unlock-keychain -p 你的电脑密码 login.keychain
1.5 jenkins任务创建与任务配置
-
创建,新建->选择构建一个自由风格的软件项目。如下图
然后主面右边就会出现刚创建好的。点击进去。来到任务主页。
-
任务主页
-
配置相关信息
-
配置构建存留周期次数、Git等,如下图
-
配置运行脚本,这里主要配置一些你打包的命令脚本。
这里的脚本,可以参照下文第二部分fastlane中fastfile配置,里面实现了fastlane matchDev与fastlane dev操作。 -
定期自动构建
常用的poll scm设置
每15分钟构建一次:H/15 * * * * 或*/5 * * * *
每天8点构建一次:0 8 * * *
每天8点~17点,两小时构建一次:0 8-17/2 * * *
周一到周五,8点~17点,两小时构建一次:0 8-17/2 * * 1-5
每月1号、15号各构建一次,除12月:H H 1,15 1-11 *
-
构建后操作,邮件通知等
操作步骤: 增加构建后操作->Editable Email Notification,然后点击下面的Advanced Settings,就会出现上面的图,填写好标题两天内容即可。
-
邮件发送成功示例
-
构建过程中,可通过点击当前构建,点击console output查看打包过程中的输出日志。
-
建议把jenkins页面右上角的允许自动刷新打开
二、fastlane安装与配置
fastlane是一个完全开源的项目,包含一组 Ruby 实现的工具集,能完成 iOS 和 Android 工程 的自动化构建\测试和发布,用来执行某一特定的任务,可以通过配置文件将不同的工具灵活的结合在一起,从而形成一个完整的自动化流程,实现一键上传 ITC,从而缩短用于构建发布的时间,其主要工具集如下:
- sigh: 开发证书和描述文件下载
- produce: 使用命令行在iTunes Connect上创建新的app和开发入口
- cert: 自动创建和配置iOS代码签名证书
- spaceship: Ruby 库访问 Apple开发者中心和 iTunes Connect
- pilot: 最好的方式管理你的TestFlight 测试人员和从终端构建
- boarding: 最简单的方式邀请你的TestFlight beta测试人员
- gym: iOS app打包签名自动化工具
- match: 使用Git同步你的团队证书和配置文件
- scan: 最简单方式测试你的 iOS 和 Mac apps
查看所有的工具集:fastlane actions
单独查看某一个action的功能: fastlane action [action_name]
2.1 fastlane的安装
- 检查xcode-select 是安装
xcode-select --install // 若未安装则会自动安装,若已经安装,则提示:xcode-select: error: command line tools are already installed, use "Software Update" to install updates
- 安装fastlane
sudo gem install -n /usr/local/bin fastlane
- 查看版本
fastlane --version
2.2 为项目配置的fastlane
- 在工程目录在,用终端初始化
cd 工程目录
fastlane init
-
init过程,由于我的帐号关联了两个开发者帐号,于是会弹出让我选择哪一个的选项。
上述过程中,会要求你填写开发者帐号密码等信息。完成后,会在你的工程目录在创建一个fastlane文件夹
-
文件夹如图所示
各文件描述:
- Appfile:用于存储应用程序标识符和Apple ID 等信息
- Fastfile:配置管理 lane
我们打包主要是配置这个文件
- Deliverfile:配置应用在 iTunes Connect 中的各种信息,和 ICC 中的数据是一一对应的
- metadata:包含应用在 iTunes Connect 中的各种信息
- screenshots:包含截图数据
项目工程中,Edit Scheme打开的页面,Shared前的勾选框,应该打上勾。不然jenkins打包过程中,可能报错。
接下来主要讲述Fastfile文件配置
2.3 fastfile文件编写
下面用到的工具match、gym、deliver、gpyer等,均可以通过:fastlane 工具名 --help
查看里面的参数如何写等
- match匹配证书
-
首先要一个仓库来存放证书与profile文件
- 在工程目录下执行
fastlane match init
,过程中会要求你填入一个git仓库。把上面创建好的填入即可。
-
这样,在fastlane文件夹会添加一个Matchfile文件。
-
内容如下
- 在fastfile文件中,添加匹配证书的执行块:
其中,match函数中的参数key与参数值value,可在终端执行:fastlane match --help
或者 github上查看:match - 在终端执行
fastlane matchDev
后,仓库上,keychain中,jenkins环境中,均会有证书相关文件
执行fastlane matchDev,途中会要求访问钥匙串,要输入电脑密码。如果把这脚本写到jenkins Excute shell中,那么会碰到超时,提示未输入username,于是我们会在shell中添加:security unlock-keychain -p 你的电脑密码 login.keychain
或者在插件管理中,把login.keychain先配置好
- registerDevice 添加新设备UUID
-
desc "添加新设备UUID"
desc "This will also make sure the profile is up to date"
lane :registerDev do
register_device(
name: "名字",
udid: "227a4********1349e27***c211e**69")
end
--------------这样,在匹配证书时,就要用到:force_for_new_devices属性---------------
desc "匹配生成证书"
desc "This will also make sure the profile is up to date"
lane :matchAppstore do
match(type: "appstore",keychain_password: ENV['PASSWORD'],force_for_new_devices:true) # 匹配开发证书
end
- gym打包
- 在fastfile中配置打包,这里用到gym工具,可通过
fastlane gym --help
或github查看gym用法
其中,首先匹配证书。像里面用到的increment_build_number 这些都可通过fastlane actions查看到。
下面这样,省去build版本自增等,更为简洁。
- 在fastfile中配置打包,这里用到gym工具,可通过
desc "打包测试"
lane :dev do
match(git_url:"https://git.oschina.net/yang***/cer.git",type: "development",keychain_password:"123",app_identifier:"cn.com.**") # 匹配开发证书
# 打包,具体参数可fastlane gym -h查看
gym(clean: true,scheme:"GC",configuration:"Debug",output_name:"GC_Test",export_method:"development")
# 上传到薄公英,可以去薄公英官网查看插件安装方法
pgyer(api_key: "6ef35de7a3c4c60***dd48825eac3a", user_key: "ce1e4c***c27232fcde878db3",password: "a**23", install_type: "2")
# 发布
# deliver(force: true,skip_screenshots:true,skip_metadata: true) # 不上传截屏文件和元数据。
end
上面有用到上传蒲公英,接下来第三部分讲述pgyer的用法。
三、pgyer插件安装与配置
pgyer安装与使用官方文档:使用 Fastlane 上传 App 到蒲公英
在工程目录在,用终端键入:
fastlane add_plugin pgyer
-
安装后,工程目录下会有Gemfile文件,fastlane文件下,会多出pluginfile文件
-
pluginfile如下
- fastlane ,在fastlfile中配置上传蒲公英操作
lane :uploadPgyer do
pgyer(api_key: "7f15xxxxxxxxxxxxxxxxxx141", user_key: "4a5bcxxxxxxxxxxxxxxx3a9e", password: "123456", install_type: "2")
end
-
上面,api_key与user_key获取如下:
四、xcode打包原理
xcode打包,用的就是xcodebuild命令完成的。可以通过man xcodebuild
命令查看文档
此部分参考了两位同事的文章:xcodebuild自动打包,发布应用与xcodebuild 自动化构建
- xcode打包发布流程
- xcodebuild clean
- archive
- exportArchive导出文件
- altool上传
- archive打包
xcodebuild archive -workspace 项目名称.xcworkspace
-scheme 项目名称
-configuration 构建配置
-archivePath archive包存储路径
CODE_SIGN_IDENTITY=证书
PROVISIONING_PROFILE=描述文件UUID
- configuration构建配置,可参考以前写的文章:Xcode通过Build Configuration配置多套域名方法,一般情况下,我们这里打测试包写:Debug,生产包:Release.
- CODE_SIGN_IDENTITY获取:
钥匙串访问->选中证书->上方的标题就是我们需要的Identity(括号也算),如:iPhone Developer: ** *** (WS4F**K**)
- PROVISIONING_PROFILE:这个获取方法如下:
/Users/用户名/Library/MobileDevice/Provisioning Profiles
找到对应的provisioning Profiles
如果文件较多,可在命令终端输入
security cms -D -i xxxx.mobileprovision // 解析描述文件,可以得到里面所有的信息(TeamId,ProvisionedDevices,TeamName,UUID,Version,AppIDName等等)。以确定哪一个是此项目所用到的
注意要 在CODE_SIGN_IDENTITY,PROVISIONING_PROFILE赋值时要加""号
- 导出ipa包
xcodebuild -exportArchive -archivePath archive文件的地址.xcarchive
-exportPath 导出的文件夹地址
-exportOptionsPlist exprotOptionsPlist.plist
CODE_SIGN_IDENTITY=证书
PROVISIONING_PROFILE=描述文件UUID
- archive文件的地址.xcarchive
这个地址为打包后,生成**.xcarchive文件的地址。 - exportOptionsPlist
这是一个plist文件,我们可以在项目中手动创建一个,然后把这个文件地址拖进来。plist具体有哪些参数,用命令:xcodebuild exportOptionsPlist --help
查看,在输出的Available keys for -exportOptionsPlist项:
- ipa包上传,我们工作中一般用的是Application Loader或xcode 打包后的upload按钮,但是它们的本质其实都是用:altool来实现。
altool工具的位置:
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool
命令设置别名:
在~/.bash_profile 中设置别名
alias altool='/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool'
设置别名后在终端
输入 source ~/.bash_profile 以使其生效。
再输入 altool 就会有它的一些用法提示,否则就是设置别名失败了
同理,别的工具也可以用此方法实现别名处理,以快速在终端打开工具。
altool 用法:
验证 ipa
altool --validate-app -f file -u username [-p password] [--output- format xml]
上传 ipa
altool --upload-app -f file -u username [-p password] [--output- format xml]
具体参数说明:
--validate-app
您要验证的应用程序。
--upload-app
您要上传的应用程序。
-f file
您正在验证或上传的应用程序的路径和文件名。
-u username
您的用户名。
-p password
您的用户密码。
--output-format [xml | normal]
您要 Application Loader 以结构化的 XML 格式还是非结构化的文本格式返回输出信息。Application Loader 默认以文本格式返回输出信息。