Xcode持续集成简介

Xcode持续集成简介

环境

  • Xcode 9.2
  • macOS High Sierra 10.13.2

本文的目的

  • 介绍Xcode CI和Xcode Server
  • 手把手教你从头开始创建一个Xcode Server来进行自动集成

Xcode CI和Xcode Server

正如苹果开发者网站所描述的

In Xcode, continuous integration is the process of automating and streamlining the building, analyzing, testing, and archiving of your Mac and iOS apps, in order to ensure that they are always in a releasable state.

Xcode CI是一种为了确保你的APP始终处于可发布状态而存在的自动的、流式的过程,整个过程包括了编译、解析、测试和打包。
Xcode Server是用来远程进行这个过程的服务器。

整个过程类似下图

  • 使用这个过程的目的就是为了集成开发APP的整个过程,让这个过程完全自动化进行。通过Xcode CI可以在每次提交代码后自动进行编译到打包的过程,并且可以查看代码的测试覆盖率。因为它可以自动执行单元测试,可以更方便的查看测试报告。

集成

  1. 打开Xcode Server

    1. 点击Xcode菜单栏中的Xcode选项卡的Xcode Server…
    2. 将右上角的开关调到On
  2. 配置Xcode Server

    1. 点击Product选项卡中的Create Bot…

    2. 配置bot的Name。Server一般不需要

    3. 配置代码库

      这里选择的是使用.ssh的公钥来配置,当然也可以使用UserName And Password或者Bot Specific SSh Keys。

    4. 选择分支

    5. 配置Bot的环境

      这里可以选择在集成的时候是否进行静态分析、测试和打包

    6. 配置集成周期

      其中,Ingegrate选项中Periodically表示按周期集成,包括小时、天、周;Clean选项表示对项目进行Clean的周期,包括Always/Once a day/Once a week/Never。

    7. 选择集成的目标设备。可以设置模拟器和真机、所有的模拟器、所有的真机、指定的模拟器和指定的真机。

    8. 配置项目证书

    9. 集成完成

可能遇到的问题和解决方案

  1. The sandbox is not in sync with the Podfile.lock.Run ‘pod install’ or update your CocoaPods installation.
  2. Invalid byte sequence in US_ASCII(Argument Error)

其中第一个问题需要在每次integrate之前执行pod install;第二个问题是由于Ruby的编码问题导致的,这两个问题的统一解决方案是给Bot添加一个prebuild script,步骤如下: 1. Edit Bot… 2. Triggers 3. Click ‘+’, select ‘Pre-Integraation Script’
具体的脚本内容为:
下面对这个脚本做一个解释说明:
(1). 第2行是用来查看脚本(也就是Server)当前的环境
(2). 第4行是切换到项目所在目录,目录地址可以从环境的PWD变量获得
(3). 6-8行是用来解决第2个问题的
(4). 第10行来执行pod install

脚本上传到蒲公英

增加一个Post-Integration Scriptspost_integration_script