module.map 用于从测试目标访问主目标中的 (Swift 和 Objective-C) 类
module.map for accessing (Swift and Objective-C) classes in main target from test target
我正在将 Swift 类 添加到现有的 Objective-C 项目中。作为其中的一部分,我向目标 MyProjectTests
添加了一个 MyProjectTests.swift
。它使用 import MyProject
从目标 MyProject
导入 Swift 类 并且工作正常。
我现在也想在 MyProjectTests.m
中使用 @import Swift;
。但是,编译器发出错误 Module 'MyProject' not found
.
我有这些问题:
在测试目标中使import和@import都成功
为什么 Swift 编译器可以看到模块 MyProject
而 Objective-C 编译器却看不到?我必须更改 MyProjectTest
中的哪些构建设置才能使 @import MyProject
也成功。
从主要目标导出Objective-C类
最终 MyProjectTest.swift
和 MyProjectTest.m
还需要从目标 MyProject
访问 Objective-C 类。到目前为止,我有多个目标文件,但我也想在这里切换到使用模块。
我目前的理解是,这是提供一个 module.map
文件的问题,该文件将列出我希望 "export" 的 类 的头文件。
我必须完成哪些具体步骤?在 MyProject
和 MyProjectTests
这两个目标中,我应该在哪里放置头文件以及我需要更改哪些构建设置?
我目前在我的项目中有一个(目前为空)module.map
,目标 MyProject
的构建设置包括 Defines Module: Yes
、Product Module Name: MyProject
.
UPDATE 我现在想知道是否无法从 iOS 应用程序(而不是 framework) 项目作为一个模块。但是它似乎已经适用于 Swift 个文件(不知何故)。
我现在得出结论,当前的 Xcode (6.1.1) 工具无法做到这一点。 (真是浪费时间!)
针对 MyProject
和 MyProjetTest
的双目标源文件的旧方案也对具有大量代码的混合 Objective-C/Swift 项目提出了一些挑战:
其 Objective-C 部分定义了与 Swift.Repeat<T>
名称冲突的遗留 NS_ENUM(Integer, Repeat)
。将其称为 MyProject.Repeat
(而不是 MyProjectTests.Repeat
)会在为目标 MyProjectTests
编译时导致问题,这会将此目标的 Project Name
(也)更改为 MyProject
(不是: MyProjectTests
) 好像没有解决。
构造的编译,其中 Swift class A
采用 Objective-C class B
,后者又采用Swift class C
似乎无法以直接的方式实现。由于C
的定义编译器还没有生成MyProject-Swift.h
,所以无法编译B
。但由于它无法编译 B
,因此无法编译 A
,因此无法生成 MyProject-Swift.h
。赶上 22,似乎是这样。
双向 Swift 代码从自动生成的 MyProject-Swift.h
导入 Swift classes。对于目标 MyProjectTests
,此名称不适用,但这就是源文件中的名称。我不想走改变 MyProjectTests
' Project Name
的道路(见上文)。通过目标 *.pch
导入正确的自动生成的文件可能是可能的,但它可能不是 ...
我正在将 Swift 类 添加到现有的 Objective-C 项目中。作为其中的一部分,我向目标 MyProjectTests
添加了一个 MyProjectTests.swift
。它使用 import MyProject
从目标 MyProject
导入 Swift 类 并且工作正常。
我现在也想在 MyProjectTests.m
中使用 @import Swift;
。但是,编译器发出错误 Module 'MyProject' not found
.
我有这些问题:
在测试目标中使import和@import都成功
为什么 Swift 编译器可以看到模块 MyProject
而 Objective-C 编译器却看不到?我必须更改 MyProjectTest
中的哪些构建设置才能使 @import MyProject
也成功。
从主要目标导出Objective-C类
最终 MyProjectTest.swift
和 MyProjectTest.m
还需要从目标 MyProject
访问 Objective-C 类。到目前为止,我有多个目标文件,但我也想在这里切换到使用模块。
我目前的理解是,这是提供一个 module.map
文件的问题,该文件将列出我希望 "export" 的 类 的头文件。
我必须完成哪些具体步骤?在 MyProject
和 MyProjectTests
这两个目标中,我应该在哪里放置头文件以及我需要更改哪些构建设置?
我目前在我的项目中有一个(目前为空)module.map
,目标 MyProject
的构建设置包括 Defines Module: Yes
、Product Module Name: MyProject
.
UPDATE 我现在想知道是否无法从 iOS 应用程序(而不是 framework) 项目作为一个模块。但是它似乎已经适用于 Swift 个文件(不知何故)。
我现在得出结论,当前的 Xcode (6.1.1) 工具无法做到这一点。 (真是浪费时间!)
针对 MyProject
和 MyProjetTest
的双目标源文件的旧方案也对具有大量代码的混合 Objective-C/Swift 项目提出了一些挑战:
其 Objective-C 部分定义了与
Swift.Repeat<T>
名称冲突的遗留NS_ENUM(Integer, Repeat)
。将其称为MyProject.Repeat
(而不是MyProjectTests.Repeat
)会在为目标MyProjectTests
编译时导致问题,这会将此目标的Project Name
(也)更改为MyProject
(不是:MyProjectTests
) 好像没有解决。构造的编译,其中 Swift class
A
采用 Objective-C classB
,后者又采用Swift classC
似乎无法以直接的方式实现。由于C
的定义编译器还没有生成MyProject-Swift.h
,所以无法编译B
。但由于它无法编译B
,因此无法编译A
,因此无法生成MyProject-Swift.h
。赶上 22,似乎是这样。双向 Swift 代码从自动生成的
MyProject-Swift.h
导入 Swift classes。对于目标MyProjectTests
,此名称不适用,但这就是源文件中的名称。我不想走改变MyProjectTests
'Project Name
的道路(见上文)。通过目标*.pch
导入正确的自动生成的文件可能是可能的,但它可能不是 ...