0%

混合开发中,flutter使用三方库依赖iOS的SDK和原生使用的SDK重叠

混合开发中,flutter使用三方库依赖iOS的SDK和原生使用的SDK重叠

影响范围

主要影响和接入方式有关

一、源码接入

判断flutter使用三方库依赖iOS的SDK和原生使用的SDK是否相同:

  1. 相同: Pod会只安装一次。
  2. 不相同: 在执行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冲突,包体积增加等问题。

解决方案
  1. **注释掉s.dependency xxx**: flutter私有化冲突的插件,在插件的iOS目录下的xxx.podspec文件中,注释掉# s.dependency xxx

  2. 新建头文件:新建xxx_plugin-Swift.h,里面只写SDK的引入

  3. 修改引入方式

    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
  4. 再次运行打包指令flutter build ios-framework --cocoapods --output=some/path/MyApp/Flutter/