测试项目的“定义模块=是”的行为

时间:2018-08-20 08:48:30

标签: ios xcode

我的Swift / Obj-C混合项目设置了两个目标:

public class Blah { public Yadda1 Yadda1 { get; set; } public Yadda2 Yadda2 { get; set; } public Yadda3 Yadda3 { get; set; } [XmlElement("contentX", typeof(ContentX))] [XmlElement("contentY", typeof(ContentY))] [XmlChoiceIdentifier(nameof(PayloadType))] public Payload Payload { get; set; } public PayloadType PayloadType { get; set; } } public abstract class Payload { ... } public class ContentX : Payload { ... } public class ContentY : Payload { ... } [XmlType] public enum PayloadType { [XmlEnum("contentX")] ContentX, [XmlEnum("contentY")] ContentY, } MyProject

为了编写单元测试(使用MyProjectTests),我对主要目标(XCTest)构建设置进行了以下配置:

MyProject

这很好,但是我想知道当我指定Enable testability = Yes Defines module = Yes 时实际发生了什么。这是否意味着为项目创建了一个框架,或者至少为该项目创建了一个模块映射,还是一个伞形标题?还是Xcode将主要项目目标与其他框架(例如CocoaPods创建的框架)区别对待?如果是第一种情况,即至少生成了临时构建文件以使主目标看起来像一个模块,那么它们通常位于何处?在Defines module = Yes中?

1 个答案:

答案 0 :(得分:2)

使应用程序与Swift和Objective-C一起使用可能是一个微妙的过程。如果要混合项目,则必须采用模块。将旧的Objective-C代码引入Swift项目时,这意味着在框架目标中将“定义模块”(DEFINES_MODULE)构建设置设置为YES。这指示Xcode在框架的标题旁边安装module.modulemap文件(可能还有module.private.modulemap)。 Objective-C框架需要定义一个要由Swift使用的模块。

来源:Big Nerd Ranch