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 ↗Chapters
Code shown on screen · 5 snippets
Configure the AVCaptureSession
import AVFoundation
private let session = AVCaptureSession()
private func configureSession() {
session.beginConfiguration()
session.sessionPreset = .photo
} Configure AVCapturePhotoOutput
import AVFoundation
private let photoOutput = AVCapturePhotoOutput()
private let configurePhotoOutput: () -> Void = {
photoOutput.maxPhotoQualityPrioritization = .quality // or .balanced
} Add maxPhotoDimensions to AVCapturePhotoOutput
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
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
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
Related sessions
-
25 min -
18 min -
27 min -
15 min -
35 min