从Carthage迁移到SPM时出现dyld: Library not loaded: @rpath/Purchases报错
解决方案
1 清理Carthage残留配置
- 打开项目的Build Settings,搜索
FRAMEWORK_SEARCH_PATHS,删除所有包含Carthage/Build的路径项,需同时检查项目级别和对应Target级别的配置,避免遗漏 - 搜索
OTHER_LDFLAGS,删除所有关联旧Carthage版本Purchases框架的链接配置 - 切换到Build Phases标签页,检查
Link Binary With Libraries、Embed Frameworks两个阶段,确认已移除所有旧Carthage导入的Purchases.framework项 - 右键项目根目录的
.xcodeproj文件选择显示包内容,找到project.pbxproj文件,全局搜索Carthage、Purchases.framework相关的残留行,手动删除无效条目,操作前注意备份原文件
2 重置Xcode缓存配置
- 完全退出Xcode后,在终端执行命令删除全局Xcode缓存:
rm -rf ~/Library/Caches/com.apple.dt.Xcode - 执行命令删除DerivedData目录:
rm -rf ~/Library/Developer/Xcode/DerivedData - 重启Xcode后按住Option键,点击顶部菜单栏
Product > Clean Build Folder,彻底清理项目构建缓存
3 校验当前依赖配置有效性
- 若当前Purchases依赖通过CocoaPods管理,在项目根目录执行
pod deintegrate && pod install重新生成Pods配置,清除旧依赖冲突 - 若当前Purchases依赖通过SPM管理,打开项目Package Dependencies配置页,右键Purchases依赖选择
Reset Package Caches,重新拉取构建依赖 - 打开Target的General配置页,检查
Frameworks, Libraries, and Embedded Content栏,确认当前Purchases框架的嵌入状态为Embed & Sign(动态框架需开启该配置)
4 校验rpath加载配置
- 在Build Settings中搜索
RUNPATH_SEARCH_PATHS,确认配置中包含@executable_path/Frameworks,这是iOS项目默认的动态框架加载路径 - 编译完成后在Products目录下找到生成的.app包,右键选择显示包内容,检查Frameworks目录下是否存在Purchases.framework文件,确认文件存在且签名状态正常
内容的提问来源于stack exchange,提问作者robowen5mac
相关产品推荐
相关产品推荐

