Swift静态库中包含OC - ShenYj/ShenYj.github.io GitHub Wiki
在作为 framework
开发时,如果存在 Swift
和OC
混编,由于 framework
中无法使用桥接文件, 就可以利用 Module
来实现
在 framework 项目下使用 bridge 会编译报错
error: using bridging headers with framework targets is unsupported
Command CompileSwiftSources failed with a nonzero exit code
framework
中使用了 Module
, 那么默认所有 Module
都是暴露的
单纯的将头文件放在
private
中也是无效的,会导致同属一个framework target下的 Swift 文件也无法使用 OC文件
如果需要控制其模块的可见性,需要通过 private.modulemap
-
e.g.
framework module A_Private { header "A.h" export * }
- 私有
module
的命名有规定, 必须要以_Private
结尾,并且P
是大写
- 私有
类似于 .modulemap
那样
- 创建一个
xxx.private.modulemap
的文件 - 在
build setting - Private Module Map File
中配置路径不希望被暴露出去的Module
.private.modulemap
也并不是真正意义上的私有,而是在使用Module
时进行区分,无法直接根据A.Module
访问到私有部分,但是仍然可以通过XXX_Private.xxx
来访问到
如果想要在 Swift framework中彻底对外隐藏掉 oc 文件, 还可以考虑将 oc的方法封装一层 protocol,暴露给swift使用,作为framework 对外暴露 Swift api和这一层 protocol