工具选择

目前流行的自动化集成有Jenkins和TeamCity。Jenkins功能很强大,更新也很快,而且免费。Teamcity在一定范围内不用收费,免费版的可以建10个 build,最多支持最多3个 build Agents。对小团队非常简单而且容易上手。Teamcity的功能非常强大,比较吸引我的是能够非常清晰的进行 Code Review 。

安装

条件

  • Mac 一台,Macmini最为实惠,土豪可以考虑MacPro。。。
  • 安装Xcode

你可以从这里下载最新版本的Teamcity,下载后解压缩到文件夹。安装过程很简单,可以从简书上看到完整的安装流程,基本上就是启动,然后登陆 http://localhost:8111

启动命令

1
/yourPath/TeamCity/bin/runAll.sh start

关闭命令

1
/yourPath/TeamCity/bin/runAll.sh stop

进主页前的设置都可以在简书的这篇文章上看到。

配置xcode项目

创建项目

点击右上角的 Administration 进入管理页, 然后在页面的左上角可以看到 Pojects,点击 Create project

在这里我遇到了第一个坑,那就是公司的 Git 服务器用的是 ssh://git@xxx/xxSSH方式的连接,而在这个项目页的 Repository URL 只能支持 http(s):// 或者 git://。 无法添加项目库到项目中,没关系我们可以绕着走,在创建项目的时候选择 Manually 方式,在之后添加。 如果你是 http(s)://或者 git:// 恭喜你可以直接到下一节了,如果是 SVN:// ,咳咳。。。(Teamcity 当然也只)你也可以直接到下一节。

编辑项目

点击你刚建立的项目,然后点右上角的 Edit project Settings, 你就可以进入项目的配置页。

我们可以选择建立一个 VCS Roots,在 Fetch URL 栏填入 SSH:// 的地址,输入 UserNamePassword。其他可以默认。选择 Save

返回项目配置页,添加一个新的 Create build Configuration,在这一步中选择左上角的 Version Control Settings。 选择 Attach VCS Root

选择你刚添加的 VCS Root,点击 Attach

配置编译

到了关键的一步选择 Build Steps,然后在 Runner type 中选择有 Command Line, 虽然这里自带了Xcode,但是非常不好用。打出的包是 *.app, 无法打包为 ipa,所以为了简单处理,我直接用的是 xcodebuild, 这个命令也很简单也很灵活,比如命令如下:

1
xcodebuild -workspace <projectName>.xcworkspace -scheme <schemeName> archive -archivePath <appName>.xcarchive

详细的 xcodebuild 可以参考这里
需要注意的是使用 scheme 需要在 Xcode 更改 scheme。 选择 Product->Scheme->Manage Schemes,选择你的APP名称,然后更改为 APPNAME workspace 并在最后 Shared 的位置打钩。

如上面的方式新建一个 Command Line, 然后输入下面的命令:

1
xcodebuild -exportArchive  -archivePath <projectName>.xcarchive -exportPath Build  -exportOptionsPlist xxx/build.plist

xcode9 更新后,查看 man xcodebuild-exportArchive命令已经变化取消了 -PROVISIONING_PROFILE_SPECIFIER,移动到了-exportOptionsPlist的文件中。查看支持的 key可以使用 xcodebuild -help来查看。

如何找到你的证书名称呢,选择你的 projectName.project,注意这里是你的 project 名称,选择 show package contents,用文本编译器打开 project.pbxproj文件,搜索 PROVISIONING_PROFILE_SPECIFIER, 选择一个你可以用的证书。

在你的项目下新建一个 plist 文件。然后输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>provisioningProfiles</key>
<dict>
<key>app1bundler</key>
<string>app1ProvisoningProfiles</string>
<key>app2bundler</key>
<string>app2ProvisoningProfiles</string>
</dict>
<key>method</key>
<string>development</string>
</dict>
</plist>

配置完后返回 General Settings,点击 Show advanced options,在 Artifact paths中输入 buildiPa/**.ipa
完成后点击 右上角Run 以下看看是否能够打包成功。错误信息可以再 build log中进行查看。

如果提示签名错误,对codesign进行授权可以解决问题:

1
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword ${KEYCHAIN}

参考远程打包失败这篇文章,我们可以使用 SSH 登陆远程主机,然后执行以上命令。为了一劳永逸,我们可以在 Build Steps中在第一步 添加command Line,输入以上命令。这样在每次打包前都会先解锁 Keychain

配置邮件通知

如果公司不方便,可以申请一个 hotmail 的邮箱,通过自己的手机验证后就能发送邮件了。

选择 右上角的 Administration,然后在左侧选择 Email Notifier。 微软的 SMTP 服务器地址为 smtp-mail.outlook.com

建好 Email 发送后,还是在左侧选择 Groups,然后进入 Notification Rules,先建一个 Rule,如我的配置如下

好了至此已经完工,可以享受自动化打包带来的美丽享受了。