移除use_frameworks!后Swift框架无法导入静态Pod库的技术咨询
解决Swift动态框架导入静态Pod库的问题
嘿,这个问题我在CocoaPods 1.5.0刚推出静态库支持的时候踩过一模一样的坑,给你几个亲测有效的解决办法:
方法1:全局开启模块化头文件支持(官方推荐)
CocoaPods 1.5.0引入了use_modular_headers!,用来替代use_frameworks!让静态库具备模块化特性,这样Swift代码就能正常导入静态Pod了。你只需要修改Podfile:
# 删掉原来的 use_frameworks! use_modular_headers! target '你的Swift动态框架名称' do pod '你要导入的Pod名称' end
改完之后执行pod install,回到你的Swift框架里就能直接import 你的Pod名称了,这个方法最省心,也是官方主推的方案。
方法2:给单个Pod单独开启模块化支持
如果不想给所有Pod都开启模块化,只想针对特定的Pod设置,那可以这样写Podfile:
target '你的Swift动态框架名称' do pod '你要导入的Pod名称', :modular_headers => true end
这样只有指定的Pod会被处理成可被Swift导入的静态库,其他Pod保持原有状态,适合只需要个别Pod支持的场景。
方法3:手动调整Build Settings(兜底方案)
如果上面两种方法都没生效,那可以手动配置你的动态框架的Build Settings:
- 找到
Other Linker Flags,添加-ObjC(确保静态库的所有符号都被正确链接到动态框架) - 找到
Header Search Paths,添加$(SRCROOT)/Pods/你要导入的Pod名称(让Swift编译器能找到Pod的头文件) - 确认你的动态框架的
Defines Module选项已经设为YES(动态框架默认就是这个值,但检查一下避免意外)
额外注意点
- 如果你的Pod是纯Objective-C的,上面的方法都能完美解决;如果是Swift混编或者纯Swift的Pod,CocoaPods 1.5.0对Swift静态库的支持还不算特别完善,优先用前两种方法。
- 每次修改Podfile或者Build Settings后,记得先Clean项目(快捷键
Cmd+Shift+K)再重新编译,避免缓存导致的奇怪问题。
内容的提问来源于stack exchange,提问作者Bryan Boyko
相关产品推荐
相关产品推荐

