React Native iOS构建失败求助:Ld命令出错,常规方案无效
React Native 0.64.2 + Xcode 14.3: 解决
Ld链接失败导致的BUILD FAILED问题 问题场景
执行以下命令构建iOS应用时遭遇构建失败:
yarn react-native run-ios --simulator="iPhone 14" # 或 npx react-native run-ios --simulator="iPhone 14"
报错信息:
** BUILD FAILED **
以下构建命令执行失败:
Ld /Users/username/Library/Developer/Xcode/DerivedData/Appname-hash/Build/Products/Debug-iphonesimulator/Appname.app/Appname normal (in target 'Appname' from project 'Appname')
(1 failure)
已尝试所有常规修复步骤(均无效):
- 删除Pods/、Podfile.lock、node_modules/、yarn.lock:
rm -rf Pods/ rm Podfile.lock rm -rf node_modules/ rm yarn.lock - 删除Mac存储中的项目构建数据和索引
- 在Xcode中执行
Product > Clean Build Folder清理缓存 - 清理Yarn/npm缓存:
yarn cache clean # 或 npm cache clean --force - 清理Pod缓存:
pod cache clean --all - 重新安装依赖:
yarn install pod install
环境信息:
macOS: 13.0.1 react-native: 0.64.2 Xcode: 14.3 npm: 8.1.2 (全局)
针对性解决方案
1. 强制使用旧版链接器适配Xcode 14.3
Xcode 14.3默认启用新链接器ld64.lld,旧版RN存在兼容性问题,需强制切换回旧版:
- 打开项目的
ios/Appname.xcworkspace - 选中目标
Appname,进入Build Settings - 搜索
Other Linker Flags,添加-ld64参数
2. 排除模拟器架构冲突
M系列Mac的模拟器架构与旧版RN存在适配问题,需排除arm64架构:
- 在Xcode的
Build Settings中搜索Excluded Architectures - 分别为Debug、Release模式下的
Any iOS Simulator SDK添加arm64 - 或者直接修改Pod配置文件:在
Pods/Target Support Files/Pods-Appname/Pods-Appname.debug.xcconfig和Pods-Appname.release.xcconfig末尾添加:EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
3. 升级CocoaPods版本
旧版CocoaPods对Xcode 14.3支持不足,升级到1.12.0及以上版本:
sudo gem install cocoapods
升级后重新执行pod install
4. 修复React Native Core模块补丁
RN 0.64.2的WebSocket模块存在空指针问题,需打补丁修复:
- 安装补丁工具:
yarn add -D patch-package - 创建
patch/react-native+0.64.2.patch文件,内容如下:
diff --git a/node_modules/react-native/Libraries/WebSocket/RCTReconnectingWebSocket.m b/node_modules/react-native/Libraries/WebSocket/RCTReconnectingWebSocket.m index 3f31a4f..b8b4b7a 100644 --- a/node_modules/react-native/Libraries/WebSocket/RCTReconnectingWebSocket.m +++ b/node_modules/react-native/Libraries/WebSocket/RCTReconnectingWebSocket.m @@ -147,7 +147,7 @@ static NSString *const RCTReconnectingWebSocketDefaultURL = @"ws://localhost:808 } // Check if server exists - if (!_webSocket) { + if (!_webSocket && _url) { _webSocket = [[RCTWebSocket alloc] initWithURL:_url queue:_methodQueue]; _webSocket.delegate = self; [_webSocket open];
- 执行补丁:
yarn patch-package
5. 查看Xcode详细报错
直接在Xcode中点击构建按钮,查看完整的链接错误日志(比如缺失符号、依赖冲突等),根据具体信息进一步定位问题。
内容的提问来源于stack exchange,提问作者Muhammad Aqeel
相关产品推荐
相关产品推荐

