使目标名称 Swift 标志在 UITests 模块中可见(Swift 5)

Posted

技术标签:

【中文标题】使目标名称 Swift 标志在 UITests 模块中可见(Swift 5)【英文标题】:Make Target name Swift flag visible in UITests module (Swift 5) 【发布时间】:2020-05-26 13:57:15 【问题描述】:

我在项目中有多个目标,并且所有目标之间共享大量代码。

我想让 -D $(TARGETNAME) 在 UITests 中可见,并能够从根项目中看到 @testable import enum TargetFirst.MyEnumMyEnum 用于所有目标)

UITest 的文件应该是什么:

#if TargetFirst
    @testable import enum TargetFirst.MyEnum
#elseif TargetSecond
    @testable import enum TargetSecond.MyEnum
#endif

当然,我可以为每个 Target 创建单独的文件,但我想避免代码重复。

有可能吗?如果是,我错过了什么以及如何让它发挥作用?

【问题讨论】:

【参考方案1】:

您可以在 Build Settings 下为您的目标添加 Active Compilation Conditions

Active Compilation Conditions 是用于传递的新构建设置 Swift 编译器的条件编译标志。

import XCTest

#if FirstTarget
   // ..
#else
   // ..
#endif

【讨论】:

as Other Swift Flags Active Compilation Conditions 在根项目中有效,但在 UITests 目标中无效 :( 实际上当你在你的根项目中更新“Active Compilation Conditions”时,它也会默认在你的uitest目标中更新。你能检查它们是否相同吗?如果是这样,您应该可以使用它。 我只是用硬编码的字符串仔细检查了它,并且 $(TARGETNAME) snd 仍然无法正常工作。我错过了什么?它对你有用吗? 是的,我测试了在我的测试目标中使用,就像我在上面的 sn-p 中分享的一样。你遇到了什么错误? 只是在#if #endif 块中的代码是不可接受的,无论我在这个块中放了什么。我可以描述我所做的:(1)在 TargetFirst 和 TargetSecond 的Active Compilation Conditions 中添加了 $(TARGETNAME)(2)尝试在 UITest 的目标文件中使用#if FirstTarget 标志(在 TargetFirstUITests 和 TargetSecondtUITests 中可用)

以上是关于使目标名称 Swift 标志在 UITests 模块中可见(Swift 5)的主要内容,如果未能解决你的问题,请参考以下文章

Gfortran -Wuninitialized 标志在 do 循环中缺少变量

对标志在makefile中的工作方式感到困惑

gcc 编译器标志在编译期间抑制模板扩展的模板错误?

Swift 3 更新后 iOS UITests 无法执行基本操作

如何使用标志在 Drupal 视图中为节点提供特定的放置顺序

如何使用 GITLAB 功能标志在 CI yml 文件中按顺序运行同一阶段的作业