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

React Native新架构下.mm调用Swift类遇AVCapturePhotoCaptureDelegate错误

解决Objective-C++(.mm)调用Swift类时的「No type or protocol named 'AVCapturePhotoCaptureDelegate'」错误

针对React Native新架构下必须使用.mm文件的场景,以下是具体解决步骤:

1. 确保Swift桥接头文件导入AVFoundation

打开项目的Swift桥接头文件(命名格式通常为[项目名]-Bridging-Header.h),添加AVFoundation的导入:

#import <AVFoundation/AVFoundation.h>

2. 在.mm文件中显式导入依赖

直接在RTNMyCamera.mm顶部添加以下导入语句,不要依赖PrefixHeader.pch的全局导入:

#import <AVFoundation/AVFoundation.h>
#import "你的项目名-Swift.h"

注意:你的项目名-Swift.h是Xcode自动生成的文件,名称必须与项目的Product Name完全一致,区分大小写。

3. 检查Swift类的暴露修饰符

确保你的MyCamera类及相关方法符合Objective-C兼容要求:

@objc class MyCamera: NSObject, AVCapturePhotoCaptureDelegate, AVCaptureVideoDataOutputSampleBufferDelegate {
    // 需要在Objective-C中调用的方法必须添加@objc修饰
    @objc func startCapture() {
        // 业务逻辑
    }

    // 协议方法无需额外加@objc(AVCapture系列协议本身是Objective-C协议)
    func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
        // 协议实现逻辑
    }
}
  • 必须继承NSObject,确保Swift类具有Objective-C兼容性
  • 类前添加@objc修饰,让Xcode将其暴露给Objective-C++

4. 清理缓存并重新构建

缓存问题可能导致自动生成的桥接文件未更新,执行以下操作:

  • 关闭Xcode
  • 删除DerivedData文件夹(路径可通过Xcode偏好设置 → Locations 查看)
  • 重新打开项目,按下Cmd+Shift+K清理构建文件夹,再按Cmd+B重新构建

5. 检查项目Build Settings配置

确认以下配置项正确:

  • Swift Compiler - General → Objective-C Bridging Header:填写正确的桥接头文件路径(如$(SRCROOT)/项目名/项目名-Bridging-Header.h)
  • Swift Compiler - General → Install Objective-C Compatibility Header:设置为YES
  • Apple Clang - Language Modules → Enable Modules (C and Objective-C):设置为YES

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:07:25