背景:我正在将大型旧混合语言代码库转换为框架。我遇到了问题,所以我想我会从一个最小的测试项目开始,看看事情是如何工作的。我遇到了更多的问题。这是带有 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
应该起作用的值,在主模块映射中有或没有内容?如果我想将东西移动到不同的文件夹中,我应该怎么做?