iOS迁移至SPM后真机安装Apollo 1.0.6崩溃求助(Xcode14.1)
混合CocoaPods/SPM环境下Apollo 1.0.6真机崩溃问题排查方案
针对Xcode14.1中从CocoaPods迁移到SPM、升级Apollo后真机崩溃(模拟器正常),报错dyld[561]: Library not loaded: @rpath/ApolloAPI.framework/ApolloAPI的问题,给出以下排查和解决步骤:
1. 检查框架嵌入配置
- 打开主Target和Target B的
Build Phases > Embed Frameworks,确认ApolloAPI.framework已添加,且Embed选项设置为Embed & Sign。真机对框架嵌入的要求比模拟器严格,未正确嵌入会导致运行时找不到库。 - 注意:SPM引入的框架默认是
Do Not Embed,如果Target A通过SPM依赖ApolloAPI,需要确保依赖能传递到Target B和主Target,必要时手动调整嵌入规则。
2. 验证依赖传递与链接
- 检查Target B的
Build Phases > Link Binary With Libraries,确认ApolloAPI.framework已存在。由于Target B依赖Target A,理论上依赖会自动传递,但混合CocoaPods/SPM的场景下可能出现传递断层,手动添加可修复该问题。 - 确认Target A的
Build Settings > Framework Search Paths包含SPM依赖的正确路径,真机环境下的路径可能与模拟器不同,建议使用SPM自动生成的相对路径(如$(PROJECT_DIR)/../.swiftpm/xcode/package.xcworkspace/contents/Resources)。
3. 彻底清理缓存并重建
- 执行以下操作清理所有可能的缓存:
- 删除Xcode Derived Data:
Xcode > Settings > Locations > Derived Data,点击箭头打开文件夹后删除全部内容 - 清理项目构建缓存:按下
Cmd+Shift+K清理项目,再按Cmd+Option+Shift+K清理构建文件夹 - 重新同步CocoaPods依赖:终端执行
pod deintegrate && pod install - 重启Xcode,重新构建并部署到真机
- 删除Xcode Derived Data:
4. 确保Apollo版本完全一致
- 检查Target A的SPM依赖中ApolloAPI的版本是否为1.0.6,同时确认Target B的Podfile中明确指定
pod 'Apollo', '1.0.6'和pod 'ApolloTestSupport', '1.0.6'。版本不一致会导致符号不匹配或加载失败。
5. 调整SPM依赖的作用域
- 在Xcode的
Project > Package Dependencies中,点击ApolloAPI依赖,进入Target Membership设置页面,确认Target A、Target B和主Target都已勾选该依赖。混合环境下SPM依赖默认仅对引入它的Target可见,需要手动扩展作用域以覆盖CocoaPods管理的Target。
6. 排查真机签名配置
- 确认主Target、Target A和Target B的
Build Settings > Code Signing Identity及Provisioning Profile在真机配置下均正确。签名异常可能间接导致框架无法加载,即使报错信息未直接提及签名问题。
内容的提问来源于stack exchange,提问作者Alberto Novo
相关产品推荐
相关产品推荐

