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

React Native添加Swift文件后Turbo Module无法构建Xcode项目

React Native Turbo Module 添加Swift文件后Xcode构建失败

我在React Native中创建基础Turbo Module,未添加Swift文件时项目可正常运行,但**仅向模块中添加Swift文件(未实际使用)**后,Xcode项目便无法构建。

Podfile 内容

# Resolve react_native_pods.rb with node to allow for hoisting
require Pod::Executable.execute_command('node', ['-p',
  'require.resolve(
    "react-native/scripts/react_native_pods.rb",
    {paths: [process.argv[1]]},
  )', __dir__]).strip

platform :ios, '13.4'
prepare_react_native_project!

linkage = ENV['USE_FRAMEWORKS']
if linkage != nil
  Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
  use_frameworks! :linkage => linkage.to_sym
end

target 'BasicApp' do
  config = use_native_modules!

  use_react_native!(
    :path => config[:reactNativePath],
    # An absolute path to your application root.
    :app_path => "#{Pod::Config.instance.installation_root}/.."
  )

  target 'BasicAppTests' do
    inherit! :complete
    # Pods for testing
  end

  post_install do |installer|
    # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
    react_native_post_install(
      installer,
      config[:reactNativePath],
      :mac_catalyst_enabled => false,
      # :ccache_enabled => true
    )
  end
end

安装Pods使用的命令

bundle install && RCT_NEW_ARCH_ENABLED=1 bundle exec "USE_FRAMEWORKS=dynamic pod install"

Xcode报错信息

Xcode构建时出现编译错误:无法找到生成的Swift桥接头文件,Swift代码未被正确集成到Turbo Module的Objective-C++编译目标中

我的计划是通过Swift实现功能,再在Objective-C++代码中调用Swift函数,最终导出到React Native。


解决方案

1. 给Turbo Module的Pod配置添加Swift支持

在你的Turbo Module对应的xxx.podspec文件中,补充Swift相关配置,让Pod能识别并编译Swift文件:

s.swift_version = '5.0'
# 包含所有源文件(包括Swift)
s.source_files = "ios/**/*.{h,m,swift}"
# 若Swift文件集中在单独目录,可单独指定
# s.source_files = "ios/Swift/**/*.swift", "ios/**/*.{h,m}"

2. 配置Xcode桥接头文件

如果模块未自动生成桥接头,需要手动创建并配置:

  • 在模块iOS目录下创建[你的模块名]-Bridging-Header.h文件
  • 选中Turbo Module的Xcode目标,进入Build Settings,搜索Objective-C Bridging Header,设置路径为$(SRCROOT)/ios/[你的模块名]-Bridging-Header.h
  • 桥接头可暂时为空,后续需要暴露Swift类时再添加对应声明

3. 调整Podfile的动态框架适配

由于使用了USE_FRAMEWORKS=dynamic,需确保本地Turbo Module的Pod被正确识别为动态框架。如果是本地开发的模块,在Podfile中明确指定路径:

# 替换为你的模块实际路径
pod 'YourTurboModule', :path => '../path/to/your/module'

4. 清理并重新构建

  • 删除ios/Pods目录和Podfile.lock
  • 重新执行安装命令:bundle install && RCT_NEW_ARCH_ENABLED=1 USE_FRAMEWORKS=dynamic bundle exec pod install
  • 关闭Xcode,清除Derived Data(路径:Xcode -> Preferences -> Locations -> Derived Data,点击箭头打开目录后删除)
  • 重新打开Xcode并尝试构建

5. 确保Swift代码可被Objective-C++调用

Swift类和方法需要添加@objc和public修饰,才能在Objective-C++中访问:

@objc public class SwiftUtils: NSObject {
  @objc public static func getDemoString() -> String {
    return "来自Swift的内容"
  }
}

之后在Objective-C++文件中导入自动生成的Swift头文件:

#import "YourTurboModule-Swift.h"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 01:03:24