【问题标题】:Can you create a "superset" target in Xcode?你能在 Xcode 中创建一个“超集”目标吗?
【发布时间】:2009-01-05 02:00:52
【问题描述】:

出于单元测试的目的,我想在 Xcode 中创建一个 iPhone 项目目标,其中包括所有发布应用程序文件,以及一些包含对 UI 单元测试有用的代码的附加文件。

我可以通过复制原始应用程序目标来做到这一点;但是,这样做的问题是每次我将新的源文件添加到应用程序目标时,我还需要将它添加到 UnitTestUI 目标。这没什么大不了的,只是不方便总是记住将文件添加到两个目标。

有没有办法建立一个依赖关系,以便添加到原始应用程序目标的每个文件也自动添加到单元测试目标?

【问题讨论】:

    标签: xcode dependencies target


    【解决方案1】:

    在 Xcode 中,您可以创建相互直接依赖的目标。添加新目标时,其他类别中有许多非产品构建目标可以帮助解决此问题,具体取决于您的设置的简单或复杂程度。创建直接依赖于主要项目目标的运行单元测试的特定目标非常常见,Apple 和许多博客都有相关文档。

    但是,在您的情况下,您可能需要对新的 UI 测试目标进行大量调整,但是一旦设置好,维护起来就会非常容易。不知道您的具体情况,不可能给您一步一步的答案,但这里是一般准则(调整以适应您的情况):

    1. 创建原始目标的副本,因为您的大部分设置都是相同的。
    2. 选择您的新目标并打开检查器 (⌘I)
    3. Direct Dependencies 下,单击 + 按钮并选择您的主要目标。
    4. 根据需要设置新目标,使用额外的文档/源/规则或其他任何内容。

    如果您更喜欢拖放东西,您也可以将原始目标(从 Targets 显示三角形下方)拖到新目标中,它会自动设置依赖关系。

    现在,选择您的测试目标作为活动目标,它将始终按照这些规则构建。此外,如果您在主目标中添加/更改源,它将在构建测试目标时正确重建......无需记住也将源文件添加到测试目标。我建议花一些时间阅读各种 Xcode 文档并使用大量可用的目标模板......从长远来看,它确实有助于提高产品的使用效率。如果您知道如何在 Xcode 中完成很多漂亮的事情,即使是非常大或复杂的项目也是如此。

    【讨论】:

    • 非常感谢这个非常有用的答案!
    • 很好的答案。最初我认为我也可以从新目标中删除我的链接库,但没有几个 git reset --hard 无法修复。
    【解决方案2】:

    不,没有。您是否有特殊原因需要单元测试目标中的每个文件?这将包括 main.m 和您未测试的所有类(例如您的视图类)。事实上,如果 main.m 包含在您的单元测试中,那么您的单元测试将如何正常运行?

    【讨论】:

    • 我应该澄清一下,这个目标是为了测试依赖于整个应用程序上下文可用的代码。 (例如一些 UIViewControllers。)因此它更像是一个 UI 测试框架,旨在涵盖我们其他“无头”单元测试无法涵盖的内容。
    • 当然有,目标可以直接相互依赖。
    【解决方案3】:

    我通过将我的大部分应用程序构建为静态库解决了这个问题,该静态库链接到应用程序和单元测试目标。

    我项目中的目标如下所示:

    • libMyApp
      • 编译 .m 文件
    • MyApp.app
      • libMyApp(依赖)
      • 与库链接:libMyApp.a
    • UITest.app
      • libMyApp(依赖)
      • 与库链接:libMyApp.a

    这样我可以只将.m 文件添加到“libMyApp”目标,并让它们在应用程序和测试中都可用,甚至不必重新编译。

    唯一的问题是静态库似乎不支持 Objective-C 类别,所以我仍然必须将它们分别添加到每个目标中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 2013-07-22
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多