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

Breakfast Finder示例代码导入新xcodeproj项目后出现白屏如何解决?

问题:Breakfast Finder示例代码导入新Xcode项目后相机流白屏

需求目标

计划将苹果官方Breakfast Finder示例代码的物体检测功能应用到自有应用中,将个人训练的模型加入原示例代码运行时,可正常检测物体并展示标签。

遇到问题

将该示例代码导入新建xcodeproj测试项目时,仅弹出相机权限申请弹窗,之后显示白屏,无法加载实时相机流。

复现步骤

  • 复制了ViewController、ViewObjectRecognitionViewController两个Swift文件到项目中
  • 将Preview View的引用出口关联到ViewController第17行定义的@IBOutlet
  • 导入了示例代码自带的mlmodel文件
  • 在Info文件中添加了带取值的NSCameraUsageDescription权限声明
    额外测试:直接复制示例代码的所有文件(Swift、plist、mlmodel等)到新项目,排查连接问题后仍出现同样故障。

运行环境

测试设备为运行iOS 15的iPhone XR,开发者此前未接触过实时相机流开发。

故障原因及排查方案

按优先级从高到低排序,依次检查以下配置:

  1. UI生命周期配置不匹配
    官方示例采用SceneDelegate管理UI入口,你新建的Xcode项目如果使用默认模板,需要确认Info.plist中Application Scene Manifest下的初始场景配置和示例代码完全一致,尤其是初始ViewController的类名是否和导入的文件匹配。如果你的项目删除了SceneDelegate改用AppDelegate管理根控制器,需要手动在application(_:didFinishLaunchingWithOptions:)方法中将相机相关ViewController设置为根视图,不要使用Main.storyboard的默认入口。
  2. AVCaptureSession未在后台队列运行
    相机捕获会话不能在主线程执行,否则会阻塞UI导致预览无法渲染。检查代码是否存在后台队列初始化和会话调度逻辑:
// 专门的相机会话串行队列
private let sessionQueue = DispatchQueue(label: "com.example.camera.sessionQueue")
// 会话启动放到后台队列执行
sessionQueue.async { [weak self] in
    self?.captureSession.startRunning()
}
  1. 预览容器View配置错误
    确认你关联IBOutlet的Preview View是示例代码中自定义的子类,其layerClass设置为AVCaptureVideoPreviewLayer:
class PreviewView: UIView {
    override class var layerClass: AnyClass {
        AVCaptureVideoPreviewLayer.self
    }
    
    var previewLayer: AVCaptureVideoPreviewLayer {
        layer as! AVCaptureVideoPreviewLayer
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:03