Xcode Server完整教程

由于公司项目的需要,以及同事和测试人员的反馈,我们的打包服务器挂了,貌似之前经常挂(因为我桌旁的就是装有打包服务器的垃圾桶,在领用Mac之前,我都是用那个开发的)。其实之前我也一直想找个机会搞一下Xcode Server,记得还专门写过一篇总结,但是由于工作的原因,也由于帐号的原因就没去搞了,这一次刚好有这个机会,于是我专门放下手上所有的活,打算把这个东西弄好来………

如果你对CI和CD已经足够了解,仅仅想知道怎么搞好Xcode Server,那么你可以直接从准备开始…

背景:

之前项目使用的是Jenkins,但是由于Jenkins的各种问题,配置,后面被换到了Xcode Server(当然除了他们我还可以选择Fantlane)。自从老大走了以后Xcode Server经常挂,导致测试人员不发打包测试,从而影响整体进度。而且这一次好像是彻底挂了,根本都进不去了…..

常识:

这里简单介绍一下Xcode Server和常用的持续交付与继承工具(CI&CD)。

  • xcodebuild - 由Apple开发,主要用于Xcode的构建和测试,有时可能难以想起,但可配置程度很高。
  • fastlane - 实际上并不是一个工具,而是一组可用于构建、测试、上传至iTunes Connect、供应配置文件管理、屏幕截图创建、dsym上传/下载至主要崩溃报告平台的一系列工具。
  • xctool和其他 - “其他”是指诸如nomad tools等工具,这些工具或者被弃用,或者逐渐缺少支持,或者即将被废弃。尽管Facebook在使用某种工具,但并不意味着这个工具依然可以得到妥善的维护。

服务器方面主要的选择包括:

  • TravisCI/CircleCI - 托管式服务器,可免费用于开源项目,可随处访问,极为强大。相比Jenkins可配置的选项较少,仅支持与Github集成。用于私有代码库的价格高昂。
  • Xcode Server - 能与Xcode高度集成,实际上也是唯一可用于Xcode的服务器,由Apple开发,最有可能只需要少量配置即可投入使用。
  • Jenkins - CI服务器领域曾经的王者,有大量插件可用,可与各种其他产品集成,需要一定的配置和维护,但是非常强大。

需求

一般项目到了一定程度,或者公司和成员到了一定规模都会考虑自动化,当然也包括那些喜欢导致或者懒惰想一键打包发布的程序员。因此结合公司,项目或者个人的情况我们可以将整个过程进行拆分。

  • 构建并签署我们的所有不同特性的应用;
  • 将我们的应用商店首选项上传至iTunes Connect;
  • 将IPA、dSYM,以及变更日志上传至HockeyApp;
  • 针对发布和开发分支持续不断地运行单元测试和UI测试;
  • 构建每次合并请求(MR)并汇报测试结果;
  • 进行持续不断地构建和签署,以确保没有引入新的问题。

由于时间的原因,也由于目前需求的原因,我们目前只需要进行打包发布相关操作,至于,分析,测试…

看完上面之后,相信你知道我接下来要说的是什么,

准备

OS X工具下载

  • 下载 OS X Server(付费开发者免费使用)
  • 下载 Xcode

这里就不多废话了,直接到苹果商店搜索就可以

帐号与代码仓库地址

  • 开发者帐号(相关证书与描述文件)
  • git源代码仓库地址

装备完了上面所需要的东西之后我们就可以开始配置和使用OS X Server了

配置Xcode

打开OS X Server,根据提示点击一步一步操作即可

  • 1 选择服务器主机:一般选自身,也可以指定IP
  • 2 选择Xcode服务,开启服务(右上角)

老版配置页面

这里需要注意,之前的配置方案是直接有

  • 权限和版本号:自己考虑,我这里默认设置不改了;
  • 开发团队:使用自己的apple ID添加;
  • 开发设备:需要用设备连接服务器后才能搜索到,初次连接,可能还需要在Status选项里面点击【Add to Teams】(比如设备不是你上面apple ID 的就需要)
  • 查看Bot:会打开网页(Bot管理页面,默认127.0.01),可以直接静态分析测试打包等,当然需要后面配置成功才能使用。

新版配置页面

最新版本不知道为什么没有了对应的信息,根据提示信息应该的Xcode兼容性问题(因为:点击选择Xcode,选择指定Xcode之后提示是说版本不兼容)

此时界面只有一个选择Xcode的按钮,点击进去就会直接进入到Server & Bots

你会看到下面的界面

这里也可以直接在Xcode Preferences中打开,

解锁后点击OFF&ON进行开启服务,然后会提示Select Integration User(选择集成用户)

这里我们一般都会新建一个用户,而不是直接使用服务器账户,然后填写对应的信息(帐号密码),这里要记住后面会有用

点击创建之后就会执行一系列操作,对Xcode进行配置

具体执行操作有
  • Saveing version information
  • Enableing developer model
  • Configuring SSL certificates
  • Starting Redis
  • initializing database
  • Starting API Server
  • Starting Apache
  • Starting control daemon
  • Starting Builder
  • Upgrading Xcode Server Data
  • Saveing version information

完成后你会看到,一个提示新用户登录的提示,为了更好的进行测试和验证,我们都会先登录用户

直接登录就可以,并且一步一步确认进入到子账户,子账户会提示:

这里先不用管,切回到服务器账户就可以,这个时候,你就可以看到刚刚创建的账户已经出现了,并且处于登录状态,我们可以点击直接切换到对应账户,或者选择和重新创建多个账户,控制超时时间。

登录账户

在Xcode Preferences中选择Account,点击右下角添加账户,分别登录Apple ID,GitHub,Xcode Server

Apple ID:对应开发者帐号,要和本地证书与描述文件对应

GitHub

注意:Source Control 需要打开才能使用!具体下面的各种自动自己考虑勾选;

Xcode Server(如果使用Xcode 9.1最新版本,这一步已经不需要了,也就是说Xcode 9.1已经自带了Bots功能)


注意:Accounts 添加 Servers,一般默认自己主机,也可以选择指定IP地址,按服务器配置时对应选择;需要填写用户名,密码,自己搞定;

完成帐号登录以后,可以适当下载更新一下证书文件

配置Xcode Server(如果使用Xcode 9.1最新版本,这一步已经不需要了,也就是说Xcode 9.1已经自带了Bots功能)

再次打开Xcode Server,进入Xcode服务页面,点击打开Xcode,会直接打开Xcode Preferences中的Server & Bots并开启对应账户,这里和前面操作一样,如果没有就根据提示直接确定或者输入对应的账号信息就可以(如果没有登录帐号的话)

创建Bots

注意:自己的项目必须是个git文件夹,比如github上clone下来的项目,或者是本地服务器git来的,总之需要git文件夹;(官方文档使用Xcode的Source Control 方式搞定,具体可以看官方指南。我直接用了第三方软件SourceTree管理的)

这里由于我们是直接使用GitLab的,所以我直接从GitLab克隆了一分项目源码到本地文件夹。

打开Xcode,保证项目编译正常的情况下创建Bots(这里可以直接点击Products->Create Bots)

1 Bot命名与服务器选择,基本默认不改;
2 选择项目内容,后面的master,可选其他分支,比如develop;
3 Bot 操作配置
Scheme:默认项目本身
Actions:1分析;2单元测试(测试项目没开单元测试所有没的选);3打包;
Cleaning:可以选择,因为是自己的电脑做服务器的,所以选择了一周清理一次;
Configuation:项目配置;
4 环境变量?没用过,sorry;
5 添加脚本,比如完成后发送个邮件通知;
6 create!注意 需要一次验证 git 的用户名和密码!不是之前设置的用户名与密码。
7 成功;各种信息以及完成的打包等;通过IP地址也可以实时整合并下载;

当你看到一个类型这样的界面,说明已经配置并且创建Bots完成,具体是否正确,需要进行打包验证或者根据日志进行查找具体问题

注意:

如果在使用Xcode Server对应的分析,测试功能,还需要额外进行一些配置,由于时间的问题,这里我们暂时只使用打包功能。

打包配置需要选择InHouse

打包验证

输入网址或者点击Xcode Perferences中的Account,点击Xcode Server对应的地址链接,进入网址(这里是icocos.local对应ip是10.0.6.7),这里可以在当前服务器进行操作,也可以在配置Xcode的时候创建的那个帐号进行操作,同意可以在内网的其他端系统或者浏览器进行操作

然后就会有一打包的进度……

错误总结

错误问题一:

  • 问题原因:
  • 因为没有登录对应的Git帐号或者没有打包对应项目的workspace

错误问题二:

  • 问题原因:
  • 同样是因为没有登录对应的Git帐号

错误问题三:

  • 问题原因:
  • 同样是因为没有登录对应的Git帐号

错误问题四:

  • 问题原因:
  • 这里是由于创建Bots进行配置的时候,只需要打包功能就行了,那些什么分析,测试不需要,还有打包配置要选InHouse,不然打不了的

错误问题五:

  • 问题原因:
  • 由于升级了Xcode 9.1,和对应的Xcode Server不兼容,这里需要输入xcsd密码(也不知道是sm鬼),根据2017@swift大会的朋友经验:
  • 备份/Library/Developer/XcodeServer,然后删除XcodeServer文件夹内容,重新前面的步骤就正常了。

错误问题六:

  • 问题原因:
  • 这其实不是sm错误 ,只是一个安全警告,解决方案:点击显示详细信息->继续访问网址,就可以了

错误问题七:

  • 问题原因:
  • 此问题困扰了很久,由于加入了GZIP库,但是….

错误问题八:

  • 问题原因:
  • 此问题困扰了很久,由于加入了GZIP库,但是….

其他问题




这些问题目前没有找到好的解决方案,根据提示查找发现,证书,前面都没有问题……

总结一

最后根据最新经验总结,最新版本Xcode 9.1配置其实非常简单了

  1. 配置Xcode Perferences中Server & Bots
  2. 创建并登录帐号
  3. Xcode Perferences登录git,app,server帐号
  4. Clone远程Git源代码,并打开保证正常编译
  5. Create Bots并配置
  6. 重启相关服务,Server,Bots,Xcode,开始打包

注意:

关于代码提交,不管使用Xcode还是其他方式,是没有关系的,Xcode服务指向的是master或者其他分支的服务器资源;
关于打包,项目配置里就做好证书等配置文件的选择;
内测的ipa包,可以结合蒲公英等平台作分发也是很方便的;
考虑是不是可以搞个脚本上传。

打包过程中

通过 Xcode 中的 Integrate 查看进度我们不难发现,其实整个过程和我们手动打包的过程是一样的

打包完成

但是这样可能享受不到OS X Server那样多而且好用的服务,不过如果只是需要简单的进行打包,配合测试进行验证,简单的发布引用还是可以满足的……..

推荐

想了解更过关于Xcode Server配置与使用的,可以参考与学习下面的文章,笔者也是从下面的文章中一点一点学习的,并结合了朋友指点进行实战。

3个官方文档:
简书教程:
手动打包流程
坚持原创技术分享,您的支持将鼓励我继续创作!