你能在Xcode中创建一个“超集”目标吗?

时间:2009-01-05 02:00:52

标签: xcode dependencies target superset

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

我可以通过复制原始应用程序目标来完成此操作;但是,问题是每次我向应用目标添加新的源文件时,我还需要将它添加到UnitTestUI目标。这并不是什么大问题,只是不方便总是记得向两个目标添加文件。

有没有办法设置依赖项,以便添加到原始应用目标的每个文件也自动添加到单元测试目标?

3 个答案:

答案 0 :(得分:4)

在Xcode中,您可以创建彼此直接相关的目标。在添加新目标时,有许多非产品构建目标可以在其他类别中为此提供帮助,具体取决于您的设置的简单性或复杂程度。为主要项目目标直接依赖而创建运行单元测试的特定目标非常常见,并且由Apple和许多博客记录。

但是,在您的情况下,您可能需要对新的UI测试目标进行大量调整,但一旦设置完成,它将非常容易维护。不知道你的具体情况,不可能给你一步一步的答案,但这里是一般的指导方针(根据你的情况调整):

  1. 创建原始目标的副本,因为大多数设置都是相同的。
  2. 选择新目标并打开检查器(⌘I)
  3. 直接相关性下,点击+按钮,然后选择您的主要目标。
  4. 根据需要设置新目标,使用额外的文档/来源/规则或其他。
  5. 如果你喜欢拖放东西,你也可以将原始目标(从目标显示三角形下方)拖到新目标中,它会自动设置依赖关系。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我项目中的目标如下:

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

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

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