You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS TurboModule多Spec配置出现重复符号链接错误排查

问题描述

参考React Native官方文档实现单个TurboModule正常,但配置多个Spec时出现链接错误:

10 duplicate symbols
Linker command failed with exit code 1 (use -v to see invocation)

操作步骤:

  • 使用npx @react-native-community/cli@latest init FirstApp创建项目,React Native版本为0.77.0;
  • 在package.json中添加codegenConfig配置,包含NativeLocalStorageSpec和NativeBluetoothSpec两个模块;
  • 在specs目录下创建NativeBluetooth.ts和NativeLocalStorage.ts两个Spec文件;
  • 执行cd ios、bundle install、bundle exec pod install后,在Xcode中构建项目触发上述错误。
问题排查与解决

针对多TurboModule配置出现的重复符号链接错误,可从以下几个方向排查:

1. 检查codegenConfig配置是否正确

确保package.json中的codegenConfig是统一配置扫描整个specs目录,而非为每个Spec单独配置。错误的多配置会导致codegen重复生成相同符号的代码。

正确配置示例:

"codegenConfig": {
  "name": "FirstAppSpecs",
  "type": "all",
  "jsSrcsDir": "./specs",
  "android": {
    "javaPackageName": "com.firstapp"
  }
}

避免为NativeLocalStorageSpec和NativeBluetoothSpec分别设置独立的codegenConfig项。

2. 移除Xcode中手动添加的生成文件

React Native 0.70+版本中,Pod会自动管理codegen生成的GeneratedCode目录文件。如果手动将这些文件添加到Xcode编译目标中,会导致链接时重复引用符号。

解决:打开Xcode项目,找到GeneratedCode相关文件,从编译目标中移除,依赖Pod的自动配置即可。

3. 检查Spec文件中的重复命名

查看NativeBluetooth.ts和NativeLocalStorage.ts,确认是否存在同名的类型、函数或常量。例如两个文件都定义了export interface Config或同名的异步方法,codegen生成Native代码时会产生重复符号。

解决:为每个模块的命名添加独特前缀,比如BluetoothConfig、LocalStorageGetItem,确保命名唯一。

4. 清理缓存重新构建

缓存残留也可能导致重复符号问题,执行以下步骤清理:

  • 删除iOS目录下的Pods文件夹和Podfile.lock文件;
  • 清理CocoaPods缓存:rm -rf ~/Library/Caches/CocoaPods;
  • 删除iOS构建目录:rm -rf ios/build;
  • 清理Xcode Derived Data:打开Xcode → 设置 → 位置 → Derived Data,点击删除按钮;
  • 重新执行bundle install和bundle exec pod install,再尝试构建项目。

内容的提问来源于stack exchange,提问作者Morton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:47:38