混合开发中,flutter使用三方库依赖iOS的SDK和原生使用的SDK重叠
影响范围
主要影响和接入方式有关
一、源码接入
判断flutter使用三方库依赖iOS的SDK和原生使用的SDK是否相同:
- 相同: Pod会只安装一次。
- 不相同: 在执行
pod install
过程中会报错,提示依赖冲突
二、通过xcode拖入framework产物接入
未测试,应该和源码接入类似
三、通过CocoaPods拖入framework产物接入
在flutter module下通过以下指令生成flutter相关产物:flutter build ios-framework --cocoapods --output=some/path/MyApp/Flutter/
这个时候flutter使用的三方库中,含有原生SDK的同样会生成一份framework。
默认集成中,flutter和原生共用的三方SDK会有两份包含在包里,会导致api冲突,包体积增加等问题。
解决方案
**注释掉
s.dependency xxx
**: flutter私有化冲突的插件,在插件的iOS目录下的xxx.podspec
文件中,注释掉# s.dependency xxx
新建头文件:新建
xxx_plugin-Swift.h
,里面只写SDK的引入修改引入方式:
1
2
3
4
5
6
7
8#if __has_include(<xxx_plugin/xxx_plugin-Swift.h>)
#import <xxx_plugin/xxx_plugin-Swift.h>
#else
// Support project import fallback if the generated compatibility header
// is not copied when this plugin is created as a library.
// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816
#import "xxx_plugin-Swift.h"
#endif再次运行打包指令
flutter build ios-framework --cocoapods --output=some/path/MyApp/Flutter/