解决AWS AppSync iOS SDK与AWS Amplify Swift的SPM共存冲突
出现“multiple product named”错误的核心原因是两个SDK包含了同名的共享组件(如AWSCore、AWSPluginsCore这类基础依赖),以下是具体解决步骤:
定位重复产物
打开Xcode的File > Packages > View Package Dependencies,分别查看AWS AppSync和Amplify的依赖树,找到错误提示中重复的产物名称,确认是哪两个模块产出了重复的target。缩小SPM导入范围
不要直接导入整个AWS AppSync SDK,只选择项目实际用到的产物。在Xcode的项目依赖设置中,编辑AppSync的package依赖,取消勾选与Amplify重复的产物target;如果使用Package.swift,则在dependencies的product字段里只声明需要的模块,比如:.package(url: "你的fork版AppSync仓库地址", from: "x.x.x"), .product(name: "AWSAppSync", package: "aws-mobile-appsync-sdk-ios")统一fork版AppSync的依赖版本
既然你已经fork了AppSync仓库,可在fork版本的Package.swift中,将其依赖的AWS基础组件(如aws-sdk-ios)版本,修改为与Amplify使用的版本完全一致。这样SPM会自动复用同一版本的依赖,避免重复生成同名产物。优化代码中的导入逻辑
在项目代码里避免全局同时导入冲突组件,仅在需要的文件中单独导入对应模块:比如仅用到AppSync的文件只写import AWSAppSync,仅用到Amplify的文件只写import Amplify,减少冲突概率。清理缓存重新解析
若以上操作后仍有问题,清理SPM和Xcode缓存:- 关闭Xcode,删除
~/Library/Caches/org.swift.swiftpm下的缓存文件 - 删除项目对应的DerivedData文件夹(可通过Xcode偏好设置的Locations面板找到路径)
- 重新打开项目,让SPM重新解析所有依赖
- 关闭Xcode,删除
内容的提问来源于stack exchange,提问作者Idan Moshe

