使目标名称 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.MyEnum
(MyEnum
用于所有目标)
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
【讨论】:
asOther 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 循环中缺少变量
Swift 3 更新后 iOS UITests 无法执行基本操作