iOS开发 添加framework运行出现dyld: Library not loaded:的解决方法

希望能长记性,记得记下解决bug的笔记

====================this is 分割线====================

升级第三方SDK时,又双叒叕报错了,控制台的错误信息如下。


该问题是iOS10以下版本机型报出,iOS10以上则运行正常,其原因是引入的UserNotifications.framework框架并不支持iOS10以下版本。

解决方案:在Link Binary With Libraries中,该框架的Required改为Optional即可。


Ps:此类问题一定要在多个系统版本下运行调试,真机和模拟器结合调试,毕竟一切结果要以真机为准~

如果上述方案并不能完全解决,可以尝试选中工程Targets,Build Phases选项卡,点击左上+号添加Copy Files节点,在Destination中选Framework,再点击下面的+号,选择框架。

附上截图~





<think>好的,我现在要帮助用户解决他们遇到的dyld库未加载的错误。首先,我需要理解用户的问题。他们之前遇到了编译时架构不匹配的问题,现在在运行时出现了动态链接库无法加载的情况。这说明虽然编译可能通过了,但应用在运行时找不到所需的框架。 首先,我应该回忆一下dyld错误常见的原因。通常,这种错误发生在应用启动时,动态链接器找不到所需的库。可能的原因包括:库未正确嵌入到应用包中、库的路径配置错误、签名问题,或者库本身的架构不兼容。 用户提供的错误信息显示,应用试图在@rpath下查找FFTW_GSL_SO.framework,但未找到。具体路径是应用包内的Frameworks目录,但文件不存在。这说明框架可能没有被正确复制到应用包中,或者rpath设置有问题。 接下来,我需要考虑可能的解决方案。首先,检查Xcode中的框架是否设置为“Embed & Sign”,这是确保框架被打包到应用中的关键步骤。其次,验证框架的搜索路径是否正确,包括Runpath Search Paths的设置。然后,检查框架是否实际存在于构建产物中,可能需要查看构建阶段的复制步骤是否正确执行。 另外,用户之前处理过架构问题,所以需要确认框架是否包含正确的架构,比如arm64用于iOS设备,排除其他不必要的架构。同时,代码签名也可能导致问题,需要确保框架和应用都正确签名,没有冲突。 还有可能的是,用户在使用自定义的框架路径,导致运行时路径解析失败。需要检查Framework Search Paths和LD_RUNPATH_SEARCH_PATHS的设置是否正确。此外,清理构建文件夹和重新安装应用也是常见的故障排除步骤,可以避免缓存或旧文件的影响。 最后,需要提醒用户注意依赖项的健康状况,比如框架是否损坏,或者是否有其他依赖项缺失。如果所有步骤都确认无误,可能需要使用工具如otool或检查崩溃日志来进一步诊断。 在整理这些思路时,需要确保回答结构清晰,分步骤指导用户检查各个可能的问题点,并提供具体的操作示例,比如终端命令或Xcode设置路径。同时,保持语言简洁,避免技术术语过于复杂,让用户能够逐步排查问题。</think>🔍 遇到 `dyld: Library not loaded` 运行时错误,这是典型的动态库加载失败问题。该错误可分解为以下关键原因解决方案: 📌 错误核心诊断: ``` 根本原因:应用包内缺少目标框架或路径解析失败 关键路径:@rpath/FFTW_GSL_SO.framework/FFTW_GSL_SO 失败表现:iOS应用启动时无法加载动态库 ``` 🛠 分步解决方案: 1️⃣ 检查框架嵌入状态 (最关键步骤) ```markdown 在Xcode中: 1. 选择主Target -> Build Phases 2. 展开 "Embed Frameworks" 3. 确认包含FFTW_GSL_SO.framework且状态为"Embed & Sign" 4. 若缺失则通过"+"按钮添加 ``` 2️⃣ 验证Runpath设置 ```bash # 检查Runpath Search Paths echo "Runpath Search Paths:" xcodebuild -showBuildSettings | grep LD_RUNPATH_SEARCH_PATHS # 正确应包含: @executable_path/Frameworks @loader_path/Frameworks ``` 若缺失需在Build Settings中设置: `LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks` 3️⃣ 物理路径验证 ```bash # 解压.ipa文件检查实际路径 unzip YourApp.ipa ls Payload/YourApp.app/Frameworks/FFTW_GSL_SO.framework ``` 若框架不存在,说明嵌入步骤失败 4️⃣ 架构兼容性二次验证 ```bash # 检查设备架构支持 lipo -info FFTW_GSL_SO.framework/FFTW_GSL_SO # iOS真机必须包含arm64架构 # 模拟器需要x86_64或arm64 ``` 若架构不匹配,需重建包含正确架构slice的库 5️⃣ 代码签名诊断 ```bash # 检查框架签名 codesign -dv FFTW_GSL_SO.framework # 检查主应用签名 codesign -dv YourApp.app # 签名必须包含相同的Team ID和兼容的entitlements ``` 发现签名冲突时,需统一使用"Apple Development"或"iOS Distribution"签名 6️⃣ 框架依赖链检查 ```bash # 使用otool查看依赖关系 otool -L FFTW_GSL_SO.framework/FFTW_GSL_SO # 输出示例: @rpath/SomeOther.framework/SomeOther /usr/lib/libz.1.dylib ``` 若存在未嵌入的第三方依赖,需一并添加到Embed Frameworks 💡 高级调试技巧: 1. 崩溃日志分析 ```bash # 获取完整崩溃日志 xcrun simctl spawn booted log collect --last 1h ``` 查找 `Dyld Error Message` 段落的详细描述 2. 动态加载追踪 ```bash # 设置环境变量获取加载细节 DYLD_PRINT_LIBRARIES=1 DYLD_PRINT_APIS=1 ./YourApp ``` 3. 路径解析模拟 ```bash # 查看实际解析路径 dlopen("@rpath/FFTW_GSL_SO.framework/FFTW_GSL_SO", RTLD_LAZY) ``` ⚠️ 常见陷阱排查: 1. **CocoaPods集成问题**:检查podspec中 `s.vendored_frameworks` 是否正确声明 2. **Fat Binary冲突**:使用 `lipo -remove` 剔除模拟器架构 3. **Xcode缓存问题**:执行深度清理: ```bash rm -rf ~/Library/Developer/Xcode/DerivedData xcodebuild clean ``` 📦 推荐工程配置: ```markdown 在Build Settings中设置: - Always Embed Swift Standard Libraries = YES - Skip Install = NO - Validate Workspace = YES ``` 如果问题仍未解决,建议: 1. 创建最小可复现代码示例 2. 使用Xcode 15的Diagnostics功能: `Product -> Perform Action -> Diagnostics` 3. 检查框架的Info.plist中 `CFBundleSupportedPlatforms` 是否包含iPhoneOS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值