9

我在 github 上托管了一些开源代码,用于向UITextField 添加基于块的类别。我添加了一个 .travis.yml 文件来让 travis CI 在每次推送时构建和运行代码。链接到 Travis CI 警告。它成功地构建了项目。运行 .travis.yml 脚本时收到的警告是:

WARNING: Using Objective-C testing without specifying a scheme and either
a workspace or a project is deprecated.

我要运行的示例项目位于文件夹 /UITextView Blocks Example/ 我如何添加到 .travis.yml 文件来运行这个项目?我的 travis.yml 文件现在包含

language: objective-c
4

2 回答 2

17

2017 年更新

skypecakes在评论中提到:

对于使用XCode 8 及更高版本的任何人:xctool不再受支持,并且不起作用。
请改用xcodebuild


原始答案(2013)

您可以查看本教程,其中解释了:

xctool是在 Travis CI 或 Jenkins 等持续集成服务器下运行测试的绝佳选择。
为了在持续集成环境中运行测试,您必须为应用程序目标创建共享方案,并确保所有依赖项(例如 CocoaPods)都明确添加到方案中。
为此:

  1. 通过选择产品菜单 > 方案 > 管理方案...打开管理方案表
  2. 在列表中找到您的应用程序目标。确保选中工作表最右侧列中的共享复选框。
  3. 如果您的应用程序或测试目标包括跨项目依赖项,例如 CocoaPods,那么您需要确保它们已被配置为显式依赖项。为此:
    • 突出显示您的应用程序目标并点击 Edit... 按钮以打开 Scheme 编辑表。
    • 单击 Scheme 编辑器左侧面板中的 Build 选项卡。
    • 单击 + 按钮并将每个依赖项添加到项目中。CocoaPods 将显示为名为 Pods 的静态库。
    • 将依赖项拖到应用程序目标上方,以便首先构建它。

xcshareddata/xcschemes现在,您将在 Xcode 项目下的目录中拥有一个新文件
这是您刚刚配置的共享方案。
将此文件签入您的存储库,xctool 将能够在下一次 CI 构建中找到并执行您的测试。

为了获得更大的灵活性,您还可以控制 Travis 安装和调用 xctool 的方式:

language: objective-c
before_install:
    - brew update
    - brew install xctool
script: xctool -workspace MyApp.xcworkspace -scheme MyApp test

最后一个配置类似于其他教程中说明的方法:

一旦你链接了你的 repo,下一步就是将一个.travis.yml文件添加到 repo 的根目录。

  language: objective-c

  before_script: travis/before_script.sh
  script: travis/script.sh
  • 首先我要告诉 Travis 这是一个 Objective-C 项目。
  • 接下来,我告诉 Travis 我希望它如何针对这个 repo 执行 CI,方法是向它提供关于它应该运行哪些脚本以实际执行构建的说明。

我还提供了一些关于在运行构建之前做什么的额外说明。
将所有构建步骤直接放在 .travis.yml 文件中是很常见的,但我更喜欢在我的 git repo 的 travis 目录中的 repo 中实际创建 bash 脚本,然后只从我的 .travis 目录中引用这些脚本.travis.yml
这使.yml文件既美观又小,也使我可以轻松地在本地测试 travis 构建脚本

before_script我们在上面的.yml文件中给了 Travis 一个。这旨在供 Travis 代理用于下载构建过程中所需的工具。这是它的样子:

travis/before_script.sh

#!/bin/sh
set -e

brew update
brew install xctool

非常简单。我们只是使用自制软件安装xctool在构建代理上。
所有 travis 构建代理都homebrew预装了,但有时公式不是最新的,所以最好brew update在尝试brew install.
这就是我们为构建准备代理所需要做的一切。

接下来让我们看一下构建脚本本身:

travis/script.sh

#!/bin/sh
set -e

xctool -workspace MyWorkspace -scheme MyScheme build test

同样,这真的很简单。
我们首先通过要求xctool构建我们的应用程序、指定工作区和方案来进行基本的健全性检查。
这只是检查我们没有任何编译错误。
假设成功xctool,然后将为我们的应用程序构建和运行单元测试目标,如果需要,在 Travis 代理上启动模拟器。

于 2013-10-29T07:13:44.883 回答
3

当您在.travis.yml文件中指定语言为 Objective-C 时,CI 服务器将默认使用其改编版本的osx-cibuild.sh. 这将在当前目录中查找任何工作区,并构建所有默认目标。

由于您的 repo 在根目录中没有任何工作区(它们位于 下Examples),因此它找不到要构建的内容,因此不会构建任何东西。

您可以将项目文件从下移动Examples到根目录,或者通过在 Travis CI 配置中设置来指定要构建的内容XCWORKSPACE,或者您​​可以指定要运行的自定义脚本然后调用xcodebuild自己。设置工作区配置可能是首选选项;如果不需要,请不要自定义它。

将以下内容添加到您的.travis.yml

env:
  - XCWORKSPACE="Examples/UITextField-Blocks Example.xcodeproj"

(引号在那里是因为文件名有一个内部空格。)

值得检查osx-cibuild.sh脚本以了解它是如何工作的,以及如何通过设置各种环境变量来自定义其行为。

有用的参考资料:

于 2013-10-29T07:43:38.153 回答