首页 文章

如何让Travis CI构建和测试Github上托管的xcode项目?

提问于
浏览
8

我在github上托管了一些开源代码,用于添加block based category to UITextField . 我添加了一个.travis.yml文件来让travis CI在每次推送时构建和运行代码 . Link to The Travis CI warning . 它成功地构建了该项目 . 运行.travis.yml脚本时收到的警告是:

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

我想运行的示例项目位于文件夹/ UITextView Blocks示例/如何添加到.travis.yml文件以运行此项目?我的travis.yml文件现在由

language: objective-c

2 回答

  • 3

    2017年更新

    skypecakes提及in the comments

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


    原始答案(2013)

    你可以查看this tutorial,其解释如下:

    xctool是在Travis CI或Jenkins等持续集成服务器下运行测试的绝佳选择 . 为了在持续集成环境中运行测试,必须为应用程序目标创建共享方案,并确保将所有依赖项(例如CocoaPods)显式添加到Scheme中 . 为此:通过选择“产品”菜单>“方案”>“管理方案”打开“管理方案”表单...在列表中找到应用程序目标 . 确保选中工作表最右侧列中的共享复选框 . 如果您的应用程序或测试目标包含跨项目依赖项(如CocoaPods),那么您需要确保它们已配置为显式依赖项 . 为此:突出显示您的应用程序目标,然后单击编辑...按钮以打开方案编辑表 . 单击Scheme编辑器左侧面板中的Build选项卡 . 单击按钮并将每个依赖项添加到项目中 . CocoaPods将显示为名为Pods的静态库 . 将依赖项拖到应用程序目标上方,以便首先构建它 . 您现在将在Xcode项目下的xcshareddata / xcschemes目录中有一个新文件 . 这是您刚配置的共享方案 . 将此文件检入您的存储库,xctool将能够在下一个CI构建中查找并执行您的测试 . 为了获得更大的灵活性,您还可以控制Travis如何安装和调用xctool:

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

    最后一个配置类似于this other tutorial中说明的方法:

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

    language: objective-c
    
      before_script: travis/before_script.sh
      script: travis/script.sh
    

    首先我告诉特拉维斯,这是一个客观的项目 . 接下来,我告诉Travis我是如何通过给出它应该运行哪些脚本来实际执行构建来对这个repo执行CI的 . 我还提供了一些关于在运行构建之前要做什么的额外说明 . 将所有构建步骤直接放在.travis.yml文件中是很常见的,但我更喜欢在我的go repo中的travis目录中的repo中创建bash脚本,然后从我的.travis中引用这些脚本 . 阳明海运 . 这使.yml文件保持良好和小巧,并且使我可以轻松地在本地测试travis构建脚本 . 我们在上面的.yml文件中给Travis一个before_script . 这是Travis代理程序用于下载构建过程中所需的工具 . 这是它的样子:

    travis/before_script.sh
    
    #!/bin/sh
    set -e
    
    brew update
    brew install xctool
    

    很简单 . 我们只需使用自制软件在构建代理上安装xctool . 所有travis构建代理都预装了自制软件,但有时公式不是最新的,因此最好在尝试brew安装之前运行brew更新 . 这就是我们为构建代理做准备所需要的全部工作 . 接下来让我们看一下构建脚本本身:

    travis/script.sh
    
    #!/bin/sh
    set -e
    
    xctool -workspace MyWorkspace -scheme MyScheme build test
    

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

  • 16

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

    由于您的repo在根目录中没有任何工作区(它们位于 Examples 下),因此它可以构建任何内容 .

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

    .travis.yml 中添加以下内容:

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

    (由于文件名具有内部空间,引号存在 . )

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

    有用的参考:

相关问题