<!--
{
  "availability" : [
    "iOS: 10.0.0 -",
    "iPadOS: 10.0.0 -",
    "macCatalyst: 14.0.0 -",
    "macOS: 10.15.0 -",
    "tvOS: 17.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "AVFoundation",
  "identifier" : "/documentation/AVFoundation/AVCapturePhotoCaptureDelegate",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "AVFoundation"
    ],
    "preciseIdentifier" : "c:objc(pl)AVCapturePhotoCaptureDelegate"
  },
  "title" : "AVCapturePhotoCaptureDelegate"
}
-->

# AVCapturePhotoCaptureDelegate

Methods for monitoring progress and receiving results from a photo capture output.

```
protocol AVCapturePhotoCaptureDelegate : NSObjectProtocol
```

## Overview

You implement methods in the [`AVCapturePhotoCaptureDelegate`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate) protocol to be notified of progress and results when capturing photos with the [`AVCapturePhotoOutput`](/documentation/AVFoundation/AVCapturePhotoOutput) class.

To capture a photo, you pass an object implementing this protocol to the [`capturePhoto(with:delegate:)`](/documentation/AVFoundation/AVCapturePhotoOutput/capturePhoto(with:delegate:)) method, along with a settings object that describes the capture to be performed. As the capture proceeds, the photo output calls several of the methods in this protocol on your delegate object, providing information about the capture’s progress and delivering the resulting photos.

Which delegate methods the photo output calls depends on the photo settings you initiate capture with. All methods in this protocol are optional at compile time, but at run time your delegate object must respond to certain methods depending on your photo settings:

- If you request a still photo capture (by specifying image formats or file types), your delegate either must implement the [`photoOutput(_:didFinishProcessingPhoto:error:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didFinishProcessingPhoto:error:)) method, or must implement methods listed in `Receiving Capture Results (Deprecated)` corresponding to whether you request capture in RAW format, processed format, or both.
- If you request Live Photo capture (by setting the [`livePhotoMovieFileURL`](/documentation/AVFoundation/AVCapturePhotoSettings/livePhotoMovieFileURL) property to a non-`nil` value), your delegate must implement the [`photoOutput(_:didFinishProcessingLivePhotoToMovieFileAt:duration:photoDisplayTime:resolvedSettings:error:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didFinishProcessingLivePhotoToMovieFileAt:duration:photoDisplayTime:resolvedSettings:error:)) method.

The capture output validates these requirements when you call the [`capturePhoto(with:delegate:)`](/documentation/AVFoundation/AVCapturePhotoOutput/capturePhoto(with:delegate:)) method. If your delegate does not meet these requirements, that method raises an exception.

You must use a unique [`AVCapturePhotoSettings`](/documentation/AVFoundation/AVCapturePhotoSettings) object for each capture request. When the photo output calls your delegate methods, it provides an [`AVCaptureResolvedPhotoSettings`](/documentation/AVFoundation/AVCaptureResolvedPhotoSettings) object whose [`uniqueID`](/documentation/AVFoundation/AVCapturePhotoSettings/uniqueID) property matches that of the photo settings you requested capture with. When making multiple captures, use this unique ID to determine which delegate method calls correspond to which requests.

The photo output always calls each method listed in Monitoring Capture Progress exactly once for each capture request. For methods listed in Receiving Capture Results, you may receive a call more than once, or not at all, depending on your photo settings. See the description of each method for details.

## Topics

### Monitoring capture progress

[`photoOutput(_:willBeginCaptureFor:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:willBeginCaptureFor:))

Notifies the delegate that the capture output has resolved settings and will soon begin its capture process.

[`photoOutput(_:willCapturePhotoFor:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:willCapturePhotoFor:))

Notifies the delegate that photo capture is about to occur.

[`photoOutput(_:didCapturePhotoFor:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didCapturePhotoFor:))

Notifies the delegate that the photo has been taken.

[`photoOutput(_:didFinishCaptureFor:error:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didFinishCaptureFor:error:))

Notifies the delegate that the capture process is complete.

### Receiving capture results

[`photoOutput(_:didFinishProcessingPhoto:error:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didFinishProcessingPhoto:error:))

Provides the delegate with the captured image and associated metadata resulting from a photo capture.

[`photoOutput(_:didFinishRecordingLivePhotoMovieForEventualFileAt:resolvedSettings:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didFinishRecordingLivePhotoMovieForEventualFileAt:resolvedSettings:))

Notifies the delegate that the movie content of a Live Photo has finished recording.

[`photoOutput(_:didFinishProcessingLivePhotoToMovieFileAt:duration:photoDisplayTime:resolvedSettings:error:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didFinishProcessingLivePhotoToMovieFileAt:duration:photoDisplayTime:resolvedSettings:error:))

Provides the delegate the movie file URL resulting from a Live Photo capture.

[`photoOutput(_:didFinishCapturingDeferredPhotoProxy:error:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didFinishCapturingDeferredPhotoProxy:error:))

Tells the delegate when the system finishes capturing the photo proxy.

[`photoOutput(_:didFinishProcessingPhoto:previewPhoto:resolvedSettings:bracketSettings:error:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didFinishProcessingPhoto:previewPhoto:resolvedSettings:bracketSettings:error:))

Provides the delegate a captured image in a processed format (such as JPEG).

[`photoOutput(_:didFinishProcessingRawPhoto:previewPhoto:resolvedSettings:bracketSettings:error:)`](/documentation/AVFoundation/AVCapturePhotoCaptureDelegate/photoOutput(_:didFinishProcessingRawPhoto:previewPhoto:resolvedSettings:bracketSettings:error:))

Provides the delegate a captured image in RAW format.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)