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

AVCapturePhotoOutput的didFinishProcessingPhoto回调未调用问题求助

问题原因汇总

  • Delegate对象提前被释放:你代码中的Delegate实例是testCapture函数内的局部变量,AVCapturePhotoOutput的capturePhoto(with:delegate:)方法不会对传入的delegate做强引用。函数执行到wait方法后,局部delegate会被ARC自动回收,后续照片处理完成要触发回调时已经找不到对应实例,所以只会执行到捕获阶段的回调,处理完成的回调无法触发。
    解决方法:将delegate改为测试类的强持有属性,等回调执行完成、expectation被fulfill之后再释放。
  • AVCaptureSession运行队列错误:AVCaptureSession的startRunning()是阻塞方法,必须在非主线程的专属串行队列中执行,直接在XCTest的默认测试队列调用会导致会话状态异常,照片处理流程卡住无法触发后续回调。
    解决方法:创建专门的串行调度队列,所有会话配置、启动操作都放到该队列中执行。
  • 相机权限缺失:iOS系统要求应用必须在Info.plist中配置NSCameraUsageDescription权限声明,且首次运行需要获得用户授权才能正常使用相机。未获得权限的情况下会话可以正常启动,但照片处理流程会静默失败。
    解决方法:提前配置权限声明,XCTest运行前先确认测试目标已经获得相机授权。
  • 系统版本兼容问题:你在Delegate中同时实现了两个版本的照片处理完成回调,其中带AVCapturePhoto参数的回调是iOS 11以上才支持的,iOS 10及更低版本只会触发带CMSampleBuffer参数的旧版本回调,如果你测试的设备系统版本低于iOS 11,就不会走到你绑定了callback的回调方法。
  • 测试超时终止流程:如果测试设备性能较差或者会话配置存在异常,可能在你设置的30秒超时时间内还未完成照片处理流程,测试被提前终止也会导致后续回调无法打印。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 03:24:00