module.map用于从测试目标访问主目标中的(Swift和Objective-C)类

时间:2015-01-28 06:54:41

标签: objective-c swift module xcode6 xctest

我正在将Swift类添加到现有的Objective-C项目中。作为其中一部分,我向目标MyProjectTests.swift添加了MyProjectTests。它使用MyProject从目标import MyProject导入Swift类,并且可以正常工作。

我现在也想在@import Swift;中使用MyProjectTests.m。但是,编译器会发出错误Module 'MyProject' not found

我有这些问题:

使导入和@import在测试目标中成功

为什么Swift编译器看到模块MyProject但是Objective-C编译器没有?我需要更改MyProjectTest中的哪些构建设置才能使@import MyProject成功。

从主要目标

导出Objective-C类

最终MyProjectTest.swiftMyProjectTest.m还需要访问目标MyProject中的Objective-C类。到目前为止,我有多个目标文件,但我想在这里切换到使用模块。

我目前的理解是,这是一个提供module.map文件的问题,该文件将列出我希望的类的头文件" export"。

我必须经历的具体步骤是什么?我应该在哪里放置头文件以及我需要在两个目标MyProjectMyProjectTests中更改哪些构建设置?

我目前在我的项目中有一个(目前为空)module.map并且目标MyProject的构建设置包括Defines Module: YesProduct Module Name: MyProject

更新我现在想知道是否可能无法将iOS应用程序(而不是framework)项目中的(Objective-C)文件作为模块公开。但是它似乎已经适用于Swift文件(不知何故)。

1 个答案:

答案 0 :(得分:0)

我现在得出的结论是,目前的Xcode(6.1.1)工具无法做到这一点。 (多浪费时间!)

MyProjectMyProjetTest双向定位源文件的旧方案也为混合的Objective-C / Swift项目带来了一些挑战,其中包含非常重要的代码:

  • 其Objective-C部分定义了遗留NS_ENUM(Integer, Repeat),其名称与Swift.Repeat<T>冲突。将其称为MyProject.Repeat(不是MyProjectTests.Repeat)会在编译目标MyProjectTests时导致问题,这会将此目标Project Name(也)更改为{{1} }(不是:MyProject)似乎没有解决。

  • Swift类MyProjectTests使用Objective-C类A的构造的编译,而后者又采用Swift类B,这似乎不可能以直截了当的方式进行。由于编译器尚未使用C的定义生成MyProject-Swift.h,因此无法编译C。但由于它无法编译B,因此无法编译B,因此无法生成A。抓住22,或者看起来如此。

  • 双向目标Swift代码从自动生成的MyProject-Swift.h导入Swift类。对于目标MyProject-Swift.h,此名称不适用,但它与源文件中的名称相同。我不想走下改变MyProjectTests&#39; MyProjectTests(见上文)。通过目标Project Name导入正确的自动生成的文件可能是可能的,但它可能不是......