嵌套自定义框架时出现dyld「Library not loaded」加载错误
解决iOS嵌套Framework的dyld加载错误问题
你遇到的dyld错误本质是:主应用ParentApp只链接了POSSampleFramework,但POSSampleFramework依赖的PaymentSampleFramework没有被打包进主应用的Bundle,导致启动时dyld找不到这个依赖库。要实现仅嵌入POSSampleFramework就自动包含其内部依赖,可按以下步骤配置:
1. 配置POSSampleFramework的嵌入依赖设置
- 打开
POSSampleFramework的Target设置,切换到Build Phases标签页 - 如果没有
Embed Frameworks阶段,点击左上角的+按钮,选择New Copy Files Phase,将阶段名称改为Embed Frameworks,并把Destination设置为Frameworks - 将
PaymentSampleFramework添加到这个Embed Frameworks阶段,同时勾选Code Sign On Copy选项 - 进入
PaymentSampleFramework的Build Settings,将Skip Install设置为YES,避免它被单独安装到主应用的Frameworks目录外
2. 调整POSSampleFramework的链接路径设置
- 在
POSSampleFramework的Build Settings中,找到Other Linker Flags,添加参数-rpath @executable_path/Frameworks,确保dyld能正确定位到嵌入的子Framework - 确认Framework Search Paths包含
PaymentSampleFramework的所在路径,保证编译时能正常找到依赖
3. 主应用ParentApp的简化配置
- 主应用只需要在General标签页的Frameworks, Libraries, and Embedded Content中添加
POSSampleFramework,并设置为Embed & Sign - 不需要将
PaymentSampleFramework添加到主应用的任何配置中 - 如果你的Framework使用Swift编写,确保主应用的Build Settings中Always Embed Swift Standard Libraries设置为
YES
4. 清理重建项目
- 执行
Cmd+Shift+K清理项目缓存,再用Cmd+B重新构建整个工作区 - 必要时删除Derived Data:通过Xcode的
Settings -> Locations -> Derived Data打开对应文件夹,删除当前项目的缓存目录
完成以上配置后,POSSampleFramework会自动将PaymentSampleFramework打包进主应用的Bundle,启动时dyld就能正常加载依赖库,无需主应用单独添加所有内部依赖。
内容的提问来源于stack exchange,提问作者SARATH SASI
相关产品推荐
相关产品推荐

