Pods-Runner target has frameworks with conflicting names XXXX.
# 出现情景
在百度地图开始收50000/年的授权费的情况下,公司所有产品线的地图服务转向高德地图(也是5000/年)。在项目中使用了高德地图的SDK,编译的时候出现了下面的错误
[!] The 'Pods-Runner' target has frameworks with conflicting names: amapfoundationkit.framework.
1
# 出现原因
这种问题通常发生在 Flutter 项目中使用了不同的地图 SDK,并且使用了类似 CocoaPods 的依赖管理工具管理项目依赖时。错误提示是由于存在冲突的 framework 名称导致无法构建项目。
# 解决方法
# 方式一.去除掉一个地图SDK,并清除缓存,重新构建
这种方式适用于项目中只使用了一个地图SDK的情况,比如项目中只使用了高德地图,那么就可以去除掉百度地图的SDK,然后清除缓存,重新构建项目。
# 方式二.如果两个SDK用的是同一个framework,那么可以将framework的版本改为同一个
下面以flutter项目中amap_flutter_map和amap_search_fluttify中amapfoundationkit.framework冲突为例,介绍下具体的操作步骤。 我们可以在amap_search_fluttify的podspec文件中进行如下修改
s.dependency 'AMapFoundationKit', '~> 1.4.0'
或者将AMapSearch改成和amap_flutter_map中的版本一致
s.dependency 'AMapSearch', '9.3.1'
1
2
3
2
3
重新构建项目。
这种方式适用于项目中只使用了一个地图SDK的情况,比如项目中只使用了高德地图,那么就可以去除掉百度地图的SDK,然后清除缓存,重新构建项目。
# 方式三.修改冲突的framework名称,使两个冲突的framework断开链接
这种方式适用于项目中使用了多个地图SDK的情况,比如项目中同时使用了高德地图和百度地图,那么就需要修改其中一个地图SDK的framework名称,然后清除缓存,重新构建项目。
下面以修改高德地图的framework名称为例,介绍下具体的操作步骤。
post_install do |installer|
# 修改AMapFoundationKit.framework的名称
target_names = [
"AMapFoundationKit",
"AMapLocation",
"AMapNavi",
"AMapSearch"
]
installer.pods_project.targets.each do |target|
if target_names.include?(target.name)
target.build_configurations.each do |config|
config.build_settings['CURRENT_PROJECT_VERSION'] = '1'
end
target.path = "Frameworks"
end
end
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
该脚本会将使用了target_names数组中的库的工程中的AMapFoundationKit.framework修改为AMapFoundationKit_1.framework,其他的 framework 也会进行相应的更改。
然后清除缓存,重新构建项目。