我在为特定的构建配置实现模块时遇到问题。我有一堆动态框架,我想添加模块映射文件,以便它们可以自然地导入Swift,而无需使用Objective-C桥接头文件。我遇到的问题如下:
我有多个模块化框架:
Framework.framework(基础框架,所有组件都需要)
Framework.Component1.framework
Framework.Component2.framework
......等
我希望能够为每个框架编写一个模块映射,使用这个点符号进行模块命名(用于向后兼容,以及其他原因),但Xcode不允许我用点语法命名整个模块,因为点语法是为子模块保留的。
我尝试创建一个包含所有不同组件并为其编写单个模块映射的伞形框架,但鉴于框架是动态的,如果用户不是这样,这必然会使最终的二进制大小膨胀。使用伞形框架内的所有框架。
是否有任何解决方案允许我使用此点语法,同时为每个框架提供单独的模块映射文件?
谢谢!
答案 0 :(得分:0)
采用伞形框架策略。
然后,对于"可选的子模块"在你的伞形框架中(甚至可能是全部或大部分)将子模块声明设置为explicit
。这意味着消费者必须明确导入子模块才能加载它。这就是我过去将一个非常大的C库导入Clang模块系统所做的工作,并且运行良好。
文档好的,但不是很好。但是,他们确实很好地处理了这个案例:https://clang.llvm.org/docs/Modules.html#submodule-declaration