Swift中@_exported import合并框架问题:引入A时找不到B模块
关于
@_exported import在静态库依赖框架中的误区说明 你对@_exported import的理解确实存在偏差——它的作用仅是让被导入模块的公开API在当前模块中自动对外暴露,但并不会把依赖模块(这里的静态库B)的二进制代码或模块信息打包进框架A中。
具体细节:
@_exported import B只是让客户端引入框架A后,无需手动import B就能直接调用B的公开API,但这有个前提:客户端项目必须能找到B模块的完整文件(包括模块映射、头文件、静态库二进制)。- 由于B是静态库,默认构建框架A时,并不会把B的代码合并到A的二进制里(除非你在A的构建设置中开启静态库合并,比如设置
OTHER_LDFLAGS为-all_load或-force_load,同时确保B被正确链接)。 - 你分发框架A时如果没同步提供B的模块文件和静态库,客户端项目自然找不到B模块,就会触发“Cannot find module B”的错误。
可行的解决方向:
- 若想让客户端仅依赖框架A就能使用A和B的API,需要把静态库B的代码合并到框架A的二进制中:在A的构建设置里,将B的静态库添加到
Link Binary With Libraries,并配置合适的链接标记确保B的代码被打包进A;同时把B的公开头文件合并到A的公开头文件目录,或通过A的模块映射文件暴露B的API。 - 若不想合并二进制,分发框架A时必须同时提供静态库B的完整模块包,让客户端能同时引入A和B。
内容的提问来源于stack exchange,提问作者sîrghi
相关产品推荐
相关产品推荐

