ios - 用于测试项目的“定义模块 = 是”的行为
问题描述
我的 Swift/Obj-C 混合项目设置有两个目标:
MyProject
和MyProjectTests
为了编写单元测试(使用XCTest
),我对主要目标(MyProject
)构建设置进行了以下配置:
Enable testability = Yes
Defines module = Yes
这很好用,但我想知道当我指定Defines module = Yes
.
指定是否Defines module = Yes
意味着:
- 为目标创建了一个框架,或者至少是一个模块映射,还是为目标创建了一个总括标题?
- 如果是这种情况,即至少会生成临时构建文件以使主目标看起来像一个模块,那么它们通常位于哪里?在
DerivedData
?
- 如果是这种情况,即至少会生成临时构建文件以使主目标看起来像一个模块,那么它们通常位于哪里?在
- 或者 Xcode 是否对主项目目标进行了一些特殊处理,例如打开
Defines Module = Yes
标志对文件系统没有任何影响,但仍允许将主项目目标作为(可测试的)模块导入测试目标中?
解决方案
让应用同时使用 Swift 和 Objective-C,可能是一个微妙的过程。如果你想要一个混合项目,你必须采用模块。将旧的 Objective-C 代码引入 Swift 项目时,这意味着在框架目标中设置“定义模块”( DEFINES_MODULE
)构建设置。YES
这指示 Xcode在框架中的标头旁边安装一个module.modulemap
文件(可能还有一个)。module.private.modulemap
Objective-C 框架需要定义一个模块供 Swift 使用。
资料来源:大书呆子牧场