背景:我正在将大型旧混合语言代码库转换为框架。我遇到了问题,所以我想我会从一个最小的测试项目开始,看看事情是如何工作的。我遇到了更多的问题。这是带有 Xcode 10.2.1 的 Swift 5.0。
我创建了一个名为 TestFramework 的新 iOS 框架项目。TestFramework 有以下源文件:
OCTest.[hm], 有一个私有类OCPublic.[hm],只有一个公共类。它调用 OCTest。STest.swift,只有一个公共类。它同时调用 OCPublic 和 OCTest。
我还有以下两个伞头,与源文件位于同一文件夹中:
TestFramework.h,这是自动创建的一个 Xcode。我只加了#import "OCPublic.h"。TestFramework_Private.h. 它有两行:#include "TestFramework.h" #include "OCTest.h"
它们都与Xcode 自动创建的所有其他内容TestFramework一起位于该文件夹中。Info.plist
我设法通过carthage build --archive以下模块映射和构建设置在测试应用程序中成功编译、构建框架包并使用生成的框架:
TestFramework/module.modulemap存在并且是空的。TestFramework/module.private.modulemap存在以下几行:module TestFramework_Private { umbrella header "TestFramework_Private.h" export * }MODULEMAP_FILE和in buildMODULEMAP_PRIVATE_FILE设置都未设置。SWIFT_INCLUDE_PATHS是$(PROJECT_DIR)/TestFramework。DEFINES_MODULE是真的。
如果我将任何内容 ( framework module TestFramework { … }) 添加到module.modulemap或尝试制作MODULEMAP_FILE或MODULEMAP_PRIVATE_FILE指向他们的文件(使用值TestFramework/module.modulemap和TestFramework/module.private.modulemap
STest.swift如果我删除空的主模块映射,我会在尝试导入它的地方得到 No such module 'TestFramework_Private' 。
如果我尝试将私有内容移动到单独的文件夹中并进行更改SWIFT_INCLUDE_PATHS,MODULEMAP_PRIVATE_FILE则会出现更多构建错误。
* 设置是否有一些MODULEMAP应该起作用的值,在主模块映射中有或没有内容?如果我想将东西移动到不同的文件夹中,我应该怎么做?