由于公司项目的需要,以及同事和测试人员的反馈,我们的打包服务器挂了,貌似之前经常挂(因为我桌旁的就是装有打包服务器的垃圾桶,在领用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配置其实非常简单了
- 配置Xcode Perferences中Server & Bots
- 创建并登录帐号
- Xcode Perferences登录git,app,server帐号
- Clone远程Git源代码,并打开保证正常编译
- Create Bots并配置
- 重启相关服务,Server,Bots,Xcode,开始打包
注意:
关于代码提交,不管使用Xcode还是其他方式,是没有关系的,Xcode服务指向的是master或者其他分支的服务器资源;
关于打包,项目配置里就做好证书等配置文件的选择;
内测的ipa包,可以结合蒲公英等平台作分发也是很方便的;
考虑是不是可以搞个脚本上传。
打包过程中
通过 Xcode 中的 Integrate 查看进度我们不难发现,其实整个过程和我们手动打包的过程是一样的
打包完成
但是这样可能享受不到OS X Server那样多而且好用的服务,不过如果只是需要简单的进行打包,配合测试进行验证,简单的发布引用还是可以满足的……..
推荐
想了解更过关于Xcode Server配置与使用的,可以参考与学习下面的文章,笔者也是从下面的文章中一点一点学习的,并结合了朋友指点进行实战。