React Native生产环境真机部署遇DYLD加载OpenSSL框架失败求助
针对你遇到的DYLD error: Library not loaded: @rpath/OpenSSL.framework/OpenSSL错误,结合模拟器正常、真机归档后异常的情况,可按以下方向排查:
确认Embedded Content的嵌入方式
检查General -> Frameworks, Libraries, and Embedded Content中OpenSSL.framework的选项,必须设置为Embed & Sign,而非Do Not Embed。真机环境下未签名的框架无法被加载,模拟器对签名要求更宽松,这是常见的差异点。验证OpenSSL库的架构完整性
打开终端,进入OpenSSL.framework所在目录,执行命令:lipo -info OpenSSL.framework/OpenSSL输出需包含
arm64(真机架构)和x86_64(模拟器架构)。如果缺少arm64,说明你使用的OpenSSL-Universal包不包含真机架构,需要重新下载或编译支持全架构的版本。检查Runpath Search Paths配置
进入Targets -> Build Settings,搜索Runpath Search Paths,确保包含以下路径:@executable_path/Frameworks @loader_path/Frameworks真机构建时,@rpath需要正确指向应用内的Frameworks目录,缺失这些路径会导致系统找不到框架文件。
排查构建优化导致的引用丢失
在Build Settings中搜索Dead Code Stripping,确保Release(生产构建)模式下该选项设置为NO。部分情况下,编译器会误判CPP调用的OpenSSL代码为无用代码,在归档时剥离相关引用,导致框架无法被正确加载。确认Pod依赖的配置(若使用CocoaPods)
如果是通过Pod引入OpenSSL-Universal,检查Podfile中是否添加了正确的配置:pod 'OpenSSL-Universal'执行
pod install后,重新打开Xcode工程,确保Pod生成的Target中OpenSSL已被正确嵌入。有时手动添加框架会和Pod的配置冲突,建议优先通过Pod管理依赖。
内容的提问来源于stack exchange,提问作者Laurenz Honauer

