带有AVCaptureVideoDataOutput的iOS应用在App Store版本中崩溃了

时间:2019-07-13 19:46:41

标签: ios swift xcode avfoundation

我有一个正在使用相机的应用程序。在上一个版本中,我将相机控件移到了一个新类,除了第一次运行外,它在App Store版本中开始崩溃。通过Xcode安装时,该应用程序可以正常运行。

我具有以下功能来进行配置。

func performConfiguration(block: @escaping (() -> Void)) {
    sessionQueue.async { () -> Void in
        block()
    }
}

应用程序在我检查是否可以将视频输出添加到会话中的行中崩溃(下面的第6行):

func configureVideoOutput() {
    performConfiguration { () -> Void in
        self.videoOutput = AVCaptureVideoDataOutput()
        self.videoOutput.setSampleBufferDelegate(self.delegate_voutput, queue: DispatchQueue(label: "sample buffer delegate"))

        if self.session.canAddOutput(self.videoOutput) {
            self.session.addOutput(self.videoOutput)
            let connection = self.videoOutput.connection(with: .video)
            connection?.videoOrientation = .portrait
        }
    }
}

这是proxy_v输出代码:

    weak var delegate_voutput: AVCaptureVideoDataOutputSampleBufferDelegate?

我将视图控制器中的proxy_voutput设置为“ self”并实现委托功能。

这是来自App Store的崩溃日志:

0  MyApp                          0x1003b921c closure #1 in CameraController.configureVideoOutput()
1  MyApp                          0x1003b9e90 partial apply for closure #1 in CameraController.performConfiguration(block:)
2  MyApp                          0x1003bd2c8 thunk for @escaping @callee_guaranteed () -> ()
3  libdispatch.dylib              0x192ff8304 _dispatch_call_block_and_release

我将NSCameraUsageDescription添加到了info.plist以及本地化版本(InfoPlist.strings)中,以防万一,这是原因。

我不确定第一次启动时的具体含义,因为硬盘驱动器中没有与该配置相关的内容。

是否可以在不将应用提交审核的情况下测试App Store的行为? TestFlight会给出相同的行为吗?

编辑:这是在sessionQueue中声明CameraController.swift的方式:

private var sessionQueue = DispatchQueue(label: "com.mikrasya.myapp")

1 个答案:

答案 0 :(得分:0)

我通过遵循解决崩溃的Apple的AVCam示例代码来更改了应用程序的体系结构。

使用Xcode安装App时确定运行正常,但在App Store版本中崩溃时,仍然是个谜。