Dunfey · Hotel WWDC as data, est. 1983
Front desk everything
Years
Topics

2026 Photos & Camera

WWDC26 · 18 min · Photos & Camera

Implement high resolution photo capture

Capture super high resolution photos in your app using AVFoundation. Learn when to use the three different options to capture images — RAW, exposure-bracketed, and fully processed. Walk through configuring photo capture for 24MP and 48MP images across the Main, Tele, and Ultra Wide cameras. And discover how deferred photo processing keeps your app responsive as more photos are taken.

Watch at developer.apple.com ↗

Transcript all transcripts

Chapters

  • 0:00 — Introduction
  • 0:52 — High-resolution photos
  • 4:07 — Types of captures
  • 5:20 — Configure a capture session
  • 9:41 — Responsive capture best practices

Code shown on screen · 5 snippets

Configure the AVCaptureSession swift · at 5:26 ↗
import AVFoundation

private let session = AVCaptureSession()
private func configureSession() {
    session.beginConfiguration()
    session.sessionPreset = .photo
}
Configure AVCapturePhotoOutput swift · at 6:11 ↗
import AVFoundation

private let photoOutput = AVCapturePhotoOutput()
private let configurePhotoOutput: () -> Void = {
    photoOutput.maxPhotoQualityPrioritization = .quality // or .balanced
}
Add maxPhotoDimensions to AVCapturePhotoOutput swift · at 6:38 ↗
import AVFoundation

let supportedMaxPhotoDimensions = device?.activeFormat.supportedMaxPhotoDimensions ?? []
if let largestDimension = supportedMaxPhotoDimensions.max(by: { lhs, rhs in
    Int(lhs.width) * Int(lhs.height) < Int(rhs.width) * Int(rhs.height)
} ) {
    photoOutput?.maxPhotoDimensions = largestDimension
}

session?.commitConfiguration()
session?.startRunning()
Update AVCapturePhotoSettings swift · at 7:21 ↗
import AVFoundation

let settings = AVCapturePhotoSettings()
settings.maxPhotoDimensions = dimension.cmVideoDimensionsValue
settings.photoQualityPrioritization = .quality

var delegate: AVCapturePhotoCaptureDelegate?

// Configure photo request delegate

if let delegate {
 photoOutput?.capturePhoto(with: settings, delegate: delegate)
}
Prepare resources for the capture swift · at 8:59 ↗
import AVFoundation

let prepareSettings = AVCapturePhotoSettings()
prepareSettings.maxPhotoDimensions = photoOutput.maxPhotoDimensions
prepareSettings.photoQualityPrioritization = .quality

photoOutput.setPreparedPhotoSettingsArray([prepareSettings]) { prepared, error in
  if let error = error {
    print("Failed to prepare: \(error)")
      return
  }
  print("Pipeline prepared: \(prepared)")
}

// Later, when ready to capture — create NEW settings
let captureSettings = AVCapturePhotoSettings()
captureSettings.maxPhotoDimensions = photoOutput.maxPhotoDimensions
captureSettings.photoQualityPrioritization = quality
photoOutput.capturePhoto(with: captureSettings, delegate: self)

Resources