Ios 混合Objective-C/Swift框架的模块映射位置和编译器设置
背景:我正在将一个大型的旧混合语言代码库转换为一个框架。我有问题,所以我想我应该从一个最小的测试项目开始,看看事情是如何运作的。我遇到了更多的问题。这是带有Xcode 10.2.1的Swift 5.0 我创建了一个新的iOS框架项目TestFramework。TestFramework具有以下源文件:Ios 混合Objective-C/Swift框架的模块映射位置和编译器设置,ios,objective-c,swift,xcode,module-map,Ios,Objective C,Swift,Xcode,Module Map,背景:我正在将一个大型的旧混合语言代码库转换为一个框架。我有问题,所以我想我应该从一个最小的测试项目开始,看看事情是如何运作的。我遇到了更多的问题。这是带有Xcode 10.2.1的Swift 5.0 我创建了一个新的iOS框架项目TestFramework。TestFramework具有以下源文件: OCTest.[hm],具有单个私有类 OCPublic.[hm],具有单个公共类。它叫八重奏 STest.swift,具有单个公共类。它同时称为OCPublic和OCTest 我还有以下两个
,具有单个私有类OCTest.[hm]
,具有单个公共类。它叫八重奏OCPublic.[hm]
,具有单个公共类。它同时称为OCPublic和OCTestSTest.swift
,这是一个自动创建的Xcode。我只添加了TestFramework.h
#导入“OCPublic.h”
。它有两行:TestFramework\u Private.h
#包括“TestFramework.h” #包括“OCTest.h”
TestFramework
文件夹中,以及Info.plist
和Xcode自动创建的所有其他内容
我成功地进行了编译,使用carthage build--archive
构建了一个框架包,并在一个测试应用程序中成功地使用了生成的框架,其中包含以下模块映射和构建设置:
存在且为空TestFramework/module.modulemap
与以下行一起存在:TestFramework/module.private.modulemap
module TestFramework_Private { umbrella header "TestFramework_Private.h" export * }
- 生成设置中的
和MODULEMAP\u文件
均未设置MODULEMAP\u私有文件
是SWIFT\u INCLUDE\u路径
$(项目目录)/TestFramework
为真定义\u模块
framework-module-TestFramework{…}
)添加到modulemap
,或者尝试将modulemap\u文件
或modulemap\u-PRIVATE\u文件
指向它们的文件(值为TestFramework/modulemap
和TestFramework/modulemap.PRIVATE.modulemap
)我遇到各种构建错误(找不到TestFramework\u Private、重新定义模块TestFramework等)
如果删除空的主模块映射,则不会得到STest.swift
尝试导入的模块“TestFramework\u Private”
如果我尝试将私有内容移动到一个单独的文件夹中,并更改SWIFT\u INCLUDE\u路径
和MODULEMAP\u private\u文件
,我会得到更多构建错误
在主模块映射中有或没有内容的情况下,
MODULEMAP
*设置是否有一些值应该起作用?如果我想将内容移动到不同的文件夹中,该怎么办?似乎至少我的一些问题是由以下原因引起的:
当构建一个框架,该框架在定义同一模块的源目录和安装目录中都有模块映射时,编译器将显示一条重新定义消息。(28638816)
解决方法:将源目录中的模块映射文件重命名为非默认名称(默认名称为module.modulemap或module.map),并将模块映射文件生成设置设置为重命名的模块映射
将我的模块映射文件重命名为除module.modulemap
以外的任何文件(例如,在“全部”中使用的名称),可以将modulemap\u文件
指向它,并允许我将标题移动到其他位置等