你能创建一个;超集;Xcode中的目标?

你能创建一个;超集;Xcode中的目标?,xcode,dependencies,target,superset,Xcode,Dependencies,Target,Superset,为了进行单元测试,我想在Xcode中创建一个iPhone项目目标,其中包括所有发布应用程序文件,以及一些包含对UI单元测试有用的代码的附加文件 我可以通过复制原始应用程序目标来实现这一点;但是,问题是每次我向应用程序目标添加新的源文件时,我还需要将其添加到UnitTestUI目标。这没什么大不了的,只是不方便总是记住向两个目标添加文件 是否有某种方法可以设置依赖项,以便添加到原始应用程序目标的每个文件也自动添加到单元测试目标?没有。您想要单元测试目标中的每一个文件,有什么特别的原因吗?这将包括m

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

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


是否有某种方法可以设置依赖项,以便添加到原始应用程序目标的每个文件也自动添加到单元测试目标?

没有。您想要单元测试目标中的每一个文件,有什么特别的原因吗?这将包括main.m和所有您没有测试的类(比如您的视图类)。事实上,如果您的单元测试中包含main.m,那么您的单元测试如何才能正常运行?

在Xcode中,您可以创建相互直接依赖的目标。在添加新目标时,其他类别中有许多非产品构建目标可以帮助实现这一点,具体取决于您的设置有多简单或复杂。为运行单元测试创建直接依赖于主项目目标的特定目标是非常常见的,苹果和许多博客都对此进行了记录

然而,在您的情况下,您可能需要对新的UI测试目标进行大量调整,但一旦设置好,它将很容易维护。由于不知道自己的具体情况,不可能一步一步地给你答案,但这里有一些一般的指导原则(调整以适应你的情况):

  • 创建原始目标的副本,因为大多数设置都相同
  • 选择新目标并打开inspector(⌘(一)
  • 在直接依赖项下,单击+按钮并选择主要目标
  • 根据需要设置新目标,包括额外的文档/源代码/规则或其他内容
  • 如果您喜欢拖拽东西,也可以将原始目标(从目标披露三角下方)拖拽到新目标中,它将自动设置依赖关系


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

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

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

    • libMyApp
      • 编译.m文件
    • MyApp.app
      • libMyApp(依赖项)
      • 与库的链接:libMyApp.a
    • UITest.app
      • libMyApp(依赖项)
      • 与库的链接:libMyApp.a
    通过这种方式,我可以只将
    .m
    文件添加到“libMyApp”目标中,并使它们在应用程序和测试中都可用,甚至不必重新编译它们


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

    我应该澄清,这个目标是为了测试依赖于整个应用程序上下文的代码。(例如一些UIViewController。)因此,它更像是一个UI测试框架,旨在涵盖我们其他“无头”单元测试无法涵盖的内容。当然,目标可以是彼此的直接依赖关系。非常感谢这个非常有用的答案!回答得很好。最初我认为我也可以从新的目标中删除我的链接库,但是几次git重置--hard都无法修复。