百度地图.a和.framwork冲突(一)

因项目需求,公司的Flutter项目使用了百度地图来实现地图相关功能。然而百度地图的坑不是一般的多,主要体现和framework(含Swift)库的问题,包括在库的导入、编译、打包都存在不少问题。该篇文章主要解决利用Vscode 编译问题

一. 库的导入问题,相关配置可查看百度地图官网

  1. 根据官网的提示在pubspec.yaml文件添加插件之后,直接运行flutter run 指令,会出现库相互依赖的问题
    依赖问题
    解决方案:
    打开iOS的Podfile文件,把文件底部的注释掉,然后重新运行flutter run 指令即可解决问题
    此处是为了让下载的包变成.a的静态库,官方文档并没有提及相关问题
提及其他问题先显示以下两个图,就是注释use_frameworks之后在项目中的区别,后面的问题需要关注这两个库的格式
注释前的是.framework库
注释之后此处显示的都是.a的库

期间可能会引起一些报名,根据提示执行相关命令即可(pod install)
切换注释有可能引发该问题

二.如果引入其他只能Pod .frameworks库的时候,就会引起编译问题,此处用flutter_inappwebview 为例
如果在注释掉Podfile 文件中的use_frameworks!执行flutter run 就会出现该问题

解决思路
  1. 光看这个问题可能不知道从哪里入手,所以就打开iOS项目看看报了什么错误(如图所示)
    发现提示找不到flutter_inappwebview/flutter_inappwebview-Swift.h

    按以前的经验,应该就是配置没有配置好该模块的同名-swift.h文件,可是如果到项目配置中查看,会发现配置是没有问题的
    image.png
  2. 在多次尝试修改配置仍然没有解决以上问题的情况下,只能首先让这个库能正常编译之后再去查找原因,所以我重新创建一个新项目,仅添加flutter_inappwebview这个插件试试编译能否成功
    可以发现单独添加这个插件,项目是可以编译成功的
  3. 然后我就直接在新项目中添加了百度地图的插件,然后执行flutter run 惊奇地发现编译通过了,但是为什么呢,为什么原来编译不能通过,后面的却能通过呢
    编译通过
  4. 在想不通的情况下,我继续尝试再次新建项目,添加百度地图以及flutter_inappwebview插件,在多次尝试之后发现,当我执行flutter run 的时候,会创建一个build的文件夹,里面存放的就是编译相关的一些文件,然后发现只有如图所示flutter_inappwebview文件夹内的文件都存在的时候,百度地图和flutter_inappwebview两个插件就可以共存编译通过
    此处为成功编译的文件
  5. 然后我再次尝试把项目搞成编译不成功的情况,就如下图所示
    发现此处的文件少了很多
  6. 细心观察成功与不成功,可以发现实际上是因为库并没有下载成功,这是为什么呢,后来想想可能是因为修改了导致的,然后就尝试着先把Podfile 的修改还原,使得flutter_inappwebview插件能正常编译,然后再看看该文件夹内的变化,多了一个flutter_inappwebview.framework库
    可以观察到成功编译此处文件夹内就存在,flutter_inappwebview.framework的库
  7. 然后再次把百度地图相关的插件添加,并修改Podfile,执行flutter run指令观察,会发现编译通过
    问题已经很明确了
总结
  1. 因为flutter_inappwebview,只有在use_frameworks!不被注释的情况下,才能正常下载flutter_inappwebview.framework的库,而不注释的情况下就无法下载百度地图相关的库。
  2. 所以解决的方法就是先添加flutter_inappwebview,再进行编译,使得flutter_inappwebview.framework能正常下载下来,然后再添加百度地图的插件,这样的话会把百度地图的库下载下来并且会根据flutter_inappwebview.framework生成对应的.a文件,使得编译通过
  3. 此处仅解决了利用Vscode编译的问题,但是如果你使用Xcode进行编译,可以发现仍然会报相同的错误,解决方案请关注百度地图.a和.framwork冲突(二)

你可能感兴趣的:(百度地图.a和.framwork冲突(一))