将Swift文件从链接的框架项目暴露到上层

时间:2019-01-31 14:28:33

标签: swift static frameworks

我有一个XCWorkspace,其中包含单独的框架项目,项目结构如下

AFramework项目(静态框架项目,AFramework项目链接BFramework并将其添加到其目标依赖项中)

BFramework项目(静态框架项目,包含公共BClass.swift文件)

XCWorkspace Project that contains framework projects

AFramework项目可以按预期访问BClass.swift文件,但我还想将BClass.swift文件公开到AFramework的外部,假设一个应用程序项目仅链接AFramework,并且在该应用程序上我想访问BClass.swift文件,使用自定义模块映射可能会有用吗?

这是演示应用程序的屏幕截图,该应用程序仅链接AFramework并尝试访问BClass.swift文件,但该文件不可访问。

On demo app project B

提前感谢您的帮助

3 个答案:

答案 0 :(得分:2)

最后,我找到了答案。为了能够公开子模块的公共api,可以使用@_explored import属性。

对于我在AClass.swift文件上使用“ @_exported import BFramework”的情况,这导致BFramework的公共api也可以从仅链接AFramework的应用程序侧访问。

请注意,它尚未正式发布。

可以在herehere中找到有关此问题的一些讨论。

答案 1 :(得分:0)

我认为您要么将B框架添加为依赖项,要么在A框架上创建一个类,以暴露所需的功能。

答案 2 :(得分:0)

您应该只能像这样导入BClass

import class BFramework.BClass

只要框架中的类是公共的,那就应该起作用。这对于func,var,protocol,struct和enum(例如import struct BFramework.BStruct)也应该起作用