构建 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.4
或xcode7.3
镜像构建的版本默认使用 xctool,而不是 xcodebuild 和 xcpretty。
共享方案 #
为了在 Travis CI 上运行测试,您还需要为您的应用程序目标创建一个共享方案,并确保所有依赖项(例如 CocoaPods)都已显式添加到该方案中。为此,请执行以下操作
- 通过选择 **产品 → 方案 → 管理方案…** 菜单选项打开 **管理方案** 工作表。
- 在列表中找到您要用于测试的目标。确保工作表最右侧列中的 **共享** 复选框已选中。
-
如果您的目标包含跨项目依赖项,例如 CocoaPods,那么您需要确保它们已配置为显式依赖项。为此,请执行以下操作
- 突出显示您的应用程序目标,然后点击 **编辑…** 按钮打开方案编辑工作表。
- 点击方案编辑器左侧面板中的 **构建** 选项卡。
- 点击 **+** 按钮并将每个依赖项添加到项目中。CocoaPods 将显示为名为 **Pods** 的静态库。
- 将依赖项拖到测试目标上方,以便它先被构建。
现在您将在您的 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 上进行测试时,您应该在您的设备目标中包含以下键
platform
:macOS
、iOS Simulator
、watchOS Simulator
、tvOS 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 项目,可以将 env
、rvm
、gemfile
、xcode_sdk
和 xcode_scheme
作为数组传递,以构建构建矩阵。
构建配置参考 #
您可以在我们的 Travis CI 构建配置参考 中找到有关 Objective-C 的构建配置格式的更多信息。
模拟器 #
每个 Xcode 版本中可用的模拟器完整列表在 macOS 环境页面 中显示。