构建 Objective-C 或 Swift 项目

本指南涵盖的内容 #

本指南涵盖了特定于 Objective-C 和 Swift 项目的构建环境和配置主题。请务必先阅读我们的 教程通用构建配置 指南。

Linux 环境不支持 Objective-C/Swift 构建。

支持的 Xcode 版本 #

Travis CI 默认使用 macOS 10.13(和 Xcode 9.4.1)。您可以通过从下表中指定相应的 osx_image 键来使用其他版本的 Xcode(和 macOS)

osx_image 值Xcode 版本macOS 版本
osx_image: xcode14.2 Xcode 14.2 macOS 12.6
osx_image: xcode14.1 Xcode 14.1 macOS 12.6
osx_image: xcode14 Xcode 14.0.1 macOS 12.6
osx_image: xcode13.4 Xcode 13.4.1 macOS 12.4
osx_image: xcode13.3 Xcode 13.2.1 macOS 12.3
osx_image: xcode13.2 Xcode 13.2.1 macOS 12.1
osx_image: xcode13.1 Xcode 13.1 macOS 11.6
osx_image: xcode12.5 Xcode 12.5 macOS 11.3
osx_image: xcode12.4 Xcode 12.4 macOS 11.2.1
osx_image: xcode12.3 Xcode 12.3 macOS 11.1
osx_image: xcode12.2 Xcode 12.2 macOS 10.15.7
osx_image: xcode12u Xcode 12.0 macOS 10.15.5
osx_image: xcode12 Xcode 12.0.1 macOS 10.15.7
osx_image: xcode11.6 Xcode 11.6 macOS 10.15.5
osx_image: xcode11.5 Xcode 11.5 macOS 10.15.4
osx_image: xcode11.4 Xcode 11.4.1 macOS 10.15.4
osx_image: xcode11.3 Xcode 11.3.1 macOS 10.14.6
osx_image: xcode11.2 Xcode 11.2.1 macOS 10.14.6
osx_image: xcode11.1 Xcode 11.1 macOS 10.14.6
osx_image: xcode11 Xcode 11.0 macOS 10.14.6
osx_image: xcode10.3 Xcode 10.3 macOS 10.14.4
osx_image: xcode10.2 Xcode 10.2.1 macOS 10.14
osx_image: xcode10.1 Xcode 10.1 macOS 10.13
osx_image: xcode10 Xcode 10.0 macOS 10.13
osx_image: xcode9.4 默认 Xcode 9.4.1 macOS 10.13
osx_image: xcode9.3 Xcode 9.3 macOS 10.13
osx_image: xcode9.2 Xcode 9.2 macOS 10.12
osx_image: xcode9.1 Xcode 9.1 macOS 10.12
osx_image: xcode9 Xcode 9.0 macOS 10.12
osx_image: xcode8.3 Xcode 8.3.3 macOS 10.12
osx_image: xcode8 Xcode 8.0 macOS 10.11
osx_image: xcode7.3 Xcode 7.3.1 macOS 10.11

详细的 iOS SDK 版本可在 macOS CI 环境参考 中找到

Objective-C 与 Swift #

目前,language: swift 只是 language: objective-c 的别名。换句话说,我们目前还没有对 Swift 项目提供原生支持。Swift 构建只是被路由到我们的 macOS 镜像,与 Objective-C 构建相同。

默认测试脚本 #

Travis CI 默认运行 xcodebuild 和 xcpretty 来执行您的测试。为了使 xcodebuild 工作,您需要告诉它在哪里找到您的项目或工作区,您想要构建和测试哪个方案,以及在哪个设备或模拟器上运行测试。例如

language: objective-c
xcode_project: MyNewProject.xcodeproj # path to your xcodeproj folder
xcode_scheme: MyNewProjectTests
xcode_destination: platform=iOS Simulator,OS=10.1,name=iPad Pro (9.7-inch)

您还可以使用 xcode_sdk 变量指定 SDK。这需要以 iphonesimulatorX.Y 的形式出现,其中 X.Y 是您要测试的版本。

如果您使用的是工作区而不是项目,请在您的 .travis.yml 中使用 xcode_workspace 键,而不是 xcode_project

使用 xcode6.4xcode7.3 镜像构建的版本默认使用 xctool,而不是 xcodebuild 和 xcpretty。

共享方案 #

为了在 Travis CI 上运行测试,您还需要为您的应用程序目标创建一个共享方案,并确保所有依赖项(例如 CocoaPods)都已显式添加到该方案中。为此,请执行以下操作

  1. 通过选择 **产品 → 方案 → 管理方案…** 菜单选项打开 **管理方案** 工作表。
  2. 在列表中找到您要用于测试的目标。确保工作表最右侧列中的 **共享** 复选框已选中。
  3. 如果您的目标包含跨项目依赖项,例如 CocoaPods,那么您需要确保它们已配置为显式依赖项。为此,请执行以下操作

    1. 突出显示您的应用程序目标,然后点击 **编辑…** 按钮打开方案编辑工作表。
    2. 点击方案编辑器左侧面板中的 **构建** 选项卡。
    3. 点击 **+** 按钮并将每个依赖项添加到项目中。CocoaPods 将显示为名为 **Pods** 的静态库。
    4. 将依赖项拖到测试目标上方,以便它先被构建。

现在您将在您的 Xcode 项目下的 **xcshareddata/xcschemes** 目录中有一个新文件。这就是您刚刚配置的共享方案。将此文件检入您的仓库,xcodebuild 将能够找到并执行您的测试。

设备目标 #

为了能够运行测试,xcodebuild 需要知道在哪个设备上运行测试,无论是真实的设备(运行 xcodebuild 的 Mac 或连接到 Mac 的 iOS 设备),还是模拟器。当您在 Travis CI 上运行测试时,您需要通过指定 **设备目标** 来告诉 xcodebuild 您要使用哪个模拟器。

设备目标是标识要使用的特定设备的字符串。您可以通过使用 -destination 标志将它们传递给 xcodebuild。如果您在 Travis CI 构建中使用默认脚本,您可以在您的 .travis.yml 中使用 xcode_destination

xcode_destination: platform=iOS Simulator,OS=11.3,name=iPhone X

设备目标是逗号分隔的键值对列表。当您在 Travis CI 上进行测试时,您应该在您的设备目标中包含以下键

  • platformmacOSiOS SimulatorwatchOS SimulatortvOS Simulator 之一。(“模拟器”部分很重要。Travis CI 不支持针对硬件 iOS 设备运行测试)
  • 如果 platform 不是 macOS,请还包含
    • OS:模拟设备上操作系统的版本号。
    • name:模拟设备的名称。例如:“iPhone X” 或 “Apple TV 1080p”。

以下是一些有效设备目标的示例

  • platform=macOS
  • platform=iOS Simulator,OS=9.3,name=iPhone 5s
  • platform=tvOS Simulator,OS=11.0,name=Apple TV 4K

确保您的设备目标在 Xcode 已知的设备中能够唯一地标识您的设备。由于 Travis CI 的构建镜像安装了许多不同的模拟器操作系统版本,因此您应在设备目标中指定操作系统版本,因为仅靠名称可能无法唯一地标识单个模拟器。

您可以在 xcodebuild 手册页中了解更多关于设备目标的信息。如果您在 Mac 上,可以 点击这里 在终端应用程序中查看 xcodebuild 手册页。

依赖管理 #

Travis CI 使用 CocoaPods 来安装您项目的依赖项。

Travis CI 运行的默认命令是

pod install

请注意,这仅在我们在项目的根目录中检测到 Podfile 时运行。如果 Podfile 在其他目录中,您可以在 .travis.yml 中使用 podfile 设置。

podfile: path/to/Podfile

此外,如果 Pods 目录已进行版本控制,并且 Podfile.lock 文件没有更改,则不会运行 pod install

如果您的项目根目录中存在 Gemfile,则不会执行 pod 命令,而是使用 Bundler 作为 pod 的包装器,如下所示

bundle exec pod install

如果您想使用其他方法来处理项目的依赖项,可以覆盖 install 命令。

install: make get-deps

构建矩阵 #

对于 Objective-C 项目,可以将 envrvmgemfilexcode_sdkxcode_scheme 作为数组传递,以构建构建矩阵。

构建配置参考 #

您可以在我们的 Travis CI 构建配置参考 中找到有关 Objective-C 的构建配置格式的更多信息。

模拟器 #

每个 Xcode 版本中可用的模拟器完整列表在 macOS 环境页面 中显示。