几经磨难以后,终于在 KVM 中跑起了 macOS 虚拟机。
当初答应过大家会做一个自动化编译的后记,说到做到。还是老样子,继续使用 Atlassian 全家桶配套的 Bamboo 来做可持续集成。
准备工作
在进入正题之前,我们需要做以下的准备工作:
- 安装 Xcode
- 安装 Brew
- 安装 Ruby
- 安装 Shenzhen
安装 Xcode
这个没有什么好说的了,Mac App Store 直接下载安装。如果是公共服务器,不想用自己的 Apple ID 登录的话,也可以登录 Apple Developer 网站下载。
Stack Overflow 有个不错的回答,大家可以参考下:http://stackoverflow.com/questions/10335747/how-to-download-xcode-4-5-6-7-8-and-get-the-dmg-or-xip-file?answertab=votes#tab-top
安装 Brew
Brew 也介绍过好多次了,不了解的同学可以看这里。
一行命令搞掂。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装 Ruby
为了不破坏系统自带的 Ruby,我还是习惯性安装一个新版本的,另外升级什么的也比较方便。
$ brew install ruby
$ ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
更新 Ruby Gem 镜像
官方的镜像经常无法访问或者出现各种各样的异常,所以使用 Ruby China 的镜像就好了。
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
$ gem sources -l
*** CURRENT SOURCES ***
https://gems.ruby-china.org
今天写文章才发现,原来的大阿里淘宝镜像也合并到 Ruby China 了,有意思。
安装 Shenzhen
Shenzhen 并不是我们理解的深圳市,而是一个基于 Xcode 6 API 的命令行编译工具。嗯,好像 Xcode 6 是有点旧了……
写这篇文章的时候发现了一个新的叫做 gym 的东东,看来稍后要有新的东西研究了,毕竟现在都开始往 Swift 3 迁移了。似乎 Shenzhen
并不能很好的支持一些新的特性了。
安装依然很简单很粗暴:
$ gem install shenzhen
$ ipa --version
ipa 0.14.3
自动化编译
这个步骤比较啰嗦和繁琐,但是基本上都是基于 Apple 的要求。
简单说,就是参考其他文章生成签名的证书或者是导入已有证书。
然后打开需要自动化编译的项目,配置好 Team 和 Bundle ID。
有了 Shenzhen
这个工具,我们只需要一个命令行就可以解决编译的问题了。
命令行进入项目目录,运行 ipa build
命令来编译 iOS App:
$ cd project
$ ipa build
Successfully built:
/Users/builder/project/Project.ipa
就是这么简单,就可以命令行编译 iOS 的应用了。
自动启动 Bamboo Agent
最后是配置 Bamboo Agent,好让 Bamboo Server 可以把任务发到 Mac 上编译。
之前都是先启动好 Mac,然后登录,然后开终端,手动运行 Bamboo Agent,但是这个真的是太傻缺了。
所以新搭建的环境,要再自动化一点。看了下文章,编写了如下配置文件:
Label
com.atlassian.bamboo-agent
ProgramArguments
/Users/builder/bamboo-agent-home/bin/bamboo-agent.sh
console
RunAtLoad
ServiceDescription
Atlassian Bamboo Agent for macOS
KeepAlive
UserName
builder
SessionCreate
将该文件保存为 com.atlassian.bamboo-agent.plist
便可,当然也可以是你自己喜欢的名字。
注意:这里的
SessionCreate
一定要加,否则security cms
无法提取 provisioning 文件中的信息,一直报 write permission 错误,导致无法正确签名,这里查了好久。
另外注释了两个 log 输出,因为 Bamboo Server 本身也会记录,有需要的可以自行打开。
在设置守护进程之前,记得务必要先用 builder
用户单独运行一次 Bamboo Agent,以便生成用户目录下的 bamboo-agent-home
目录。相关的操作直接按照 Bamboo Server 上 Remote Agent 安装说明一步一步操作就好了。
最后把写好的配置文件扔到系统守护进程目录里面,并启动之:
$ sudo mv com.atlassian.bamboo-agent.plist /Library/LaunchDaemons/
$ sudo chown root:wheel /Library/LaunchDaemons/com.atlassian.bamboo-agent.plist
$ sudo launchctl load /Library/LaunchDaemons/com.atlassian.bamboo-agent.plist
检查一下看看是不是已经在运行了:
$ ps aux | grep bamboo
builder 43 0.0 0.1 2442612 2324 ?? Ss 11:55AM 0:00.03 /bin/sh /Users/builder/bamboo-agent-home/bin/bamboo-agent.sh console
一切正常,在 Bamboo Server 上配置一个 Plan,运行一下编译,成功生成 IPA 文件,收工。
参考
- Configuring Bamboo to start automatically on startup on Mac OS X
- Bamboo Remote Agent on Mac OS X
- Missing certificates and keys in the keychain while using Jenkins/Hudson as Continuous Integration for iOS and Mac development