iOS 27 extends fast capture prioritization on iPhone 16 and 17 to apply deferred processing to balanced-quality captures taken in quick succession, dramatically reducing shot-to-shot delay while still delivering high-quality results. Combined with 24/48MP support on the telephoto and ultrawide cameras, this release brings significant capture pipeline improvements.
โข iOS 27 adds deferred processing support for balanced fast captures on iPhone 16/17, reducing sustained shot-to-shot delay far beyond what was possible in iOS 16โ26
โข Ultrawide camera on iPhone 17 gains 24MP and 48MP capture support (previously telephoto gained this on iPhone 16 Pro)
โข The 18MP Center Stage front camera capture tier is new in iOS 27 on iPhone 17
โข Starting in iOS 27 on iPhone 16/17, fast capture prioritization now defers processing of balanced captures, minimizing blocking time and allowing sustained rapid-fire high-quality shooting
โข The ultrawide camera on iPhone 17 now supports 24MP and 48MP captures, expanding full-resolution shooting to all three lenses
โข Developers can pre-allocate resources with setPreparedPhotoSettingsArray to eliminate per-capture allocation delays, keeping the shutter feeling instantaneous
Configures an AVCaptureSession for 48MP photo output with fast capture prioritization and deferred processing enabled, then fires a capture with pre-allocated resources to keep the shutter snappy.
import AVFoundationimport UIKitโ// Pre-iOS-27: fast capture prioritization existed but balanced fast capturesโ// were NOT deferred โ they still blocked the next capture during processing.โclass LegacyHighResPhotoCapture: NSObject, AVCapturePhotoCaptureDelegate {+class HighResPhotoCapture: NSObject, AVCapturePhotoCaptureDelegate {private let session = AVCaptureSession()private let photoOutput = AVCapturePhotoOutput()+ private var selectedMaxDimensions = CMVideoDimensions(width: 0, height: 0)func configure() {guard session.canSetSessionPreset(.photo) else { return }session.beginConfiguration()session.sessionPreset = .photo+ // Add camera inputguardlet device = AVCaptureDevice.default(.builtInWideAngleCamera,for: .video,position: .back),let input = try? AVCaptureDeviceInput(device: device),session.canAddInput(input)else {session.commitConfiguration()return}session.addInput(input)+ // Configure photo output before commitphotoOutput.maxPhotoQualityPrioritization = .quality+ // Enable responsive capture to overlap capture + processing stagesphotoOutput.isResponsiveCaptureEnabled = trueโ // Deferred delivery available since iOS 17+ // Deferred processing: proxy delivered immediately, final processed laterphotoOutput.isDeferredPhotoDeliveryEnabled = trueโ // Fast capture existed but on iOS 16โ26, balanced fast captures wereโ // NOT deferred โ processing still blocked subsequent captures.+ // Fast capture: system downgrades to .balanced during rapid bursts (iOS 27: also defers those)photoOutput.isFastCapturePrioritizationEnabled = trueโ // NOTE: ultrawide 24/48MP not available before iOS 27 / iPhone 17guard session.canAddOutput(photoOutput) else {session.commitConfiguration()return}session.addOutput(photoOutput)++ // Pick the largest supported dimensions on the active format+ if let largest = device.activeFormat.supportedMaxPhotoDimensions.last {+ selectedMaxDimensions = largest+ }+session.commitConfiguration()++ // Pre-allocate resources for 48MP quality captures+ let prepareSettings = AVCapturePhotoSettings()+ prepareSettings.maxPhotoDimensions = selectedMaxDimensions+ prepareSettings.photoQualityPrioritization = .quality+ photoOutput.setPreparedPhotoSettingsArray([prepareSettings]) { prepared, error in+ if prepared {+ print("Resources pre-allocated for \(self.selectedMaxDimensions.width)x\(self.selectedMaxDimensions.height)")+ }+ }+session.startRunning()}func capturePhoto() {โ let settings = AVCapturePhotoSettings()โ // On iOS 16-26, no pre-allocation API difference, but balanced fastโ // captures during rapid bursts would still incur full processing delay.โ settings.photoQualityPrioritization = .qualityโ photoOutput.capturePhoto(with: settings, delegate: self)+ // Create a NEW settings object matching the prepared configuration+ let captureSettings = AVCapturePhotoSettings()+ captureSettings.maxPhotoDimensions = selectedMaxDimensions+ captureSettings.photoQualityPrioritization = .quality+ photoOutput.capturePhoto(with: captureSettings, delegate: self)}+ // MARK: - AVCapturePhotoCaptureDelegate+func photoOutput(_ output: AVCapturePhotoOutput,+ didCapturePhotoFor resolvedSettings: AVCaptureResolvedPhotoSettings) {+ let range = resolvedSettings.photoProcessingTimeRange+ print("Capture done. Expected processing: \(range.start.seconds)s โ \(range.duration.seconds)s")+ }++ func photoOutput(_ output: AVCapturePhotoOutput,+ didFinishCapturingDeferredPhotoProxy deferredPhotoProxy: AVCaptureDeferredPhotoProxy?,+ error: Error?) {+ guard let proxy = deferredPhotoProxy else {+ print("Deferred proxy error: \(String(describing: error))")+ return+ }+ // Save proxy to photo library; system finalises full-res image later+ let data = proxy.fileDataRepresentation()+ print("Deferred proxy received, \(data?.count ?? 0) bytes. Final image will be processed in background.")+ }++ func photoOutput(_ output: AVCapturePhotoOutput,didFinishProcessingPhoto photo: AVCapturePhoto,error: Error?) {guard error == nil, let data = photo.fileDataRepresentation() else { return }โ print("Photo ready: \(data.count) bytes")+ print("Full-res photo ready: \(data.count) bytes")}}
iOS 27 adds sectioned queries, codable model attributes, ResultsObserver for non-SwiftUI change observation, and HistoryObserver for reacting to persistent history changes in SwiftData.
USDKit is a new first-party Swift framework introduced in iOS/macOS 27 that brings native USD scene creation, composition, modification, and export capabilities to Apple platform apps, with deep RealityKit and Spatial Preview integration.
LiveCommunicationKit is the modern replacement for CXProvider that delivers rich, native conversation UIs integrated with the Lock Screen, Dynamic Island, Phone app Recents, and Siri. It provides a unified lifecycle model for audio and video conversations with a single delegate-driven action pipeline.
In-depth guide
iOS 26 โ iOS 27 Migration Guide โmaxPhotoDimensions is a request not a guarantee โ check AVCaptureResolvedSettings for actual dimensions. Never reuse a prepare-settings object for the actual capture; create a matching but distinct AVCapturePhotoSettings. Changing maxPhotoQualityPrioritization after commitConfiguration triggers a costly pipeline reconfiguration. 18MP and 24MP multi-frame fused captures require quality prioritization or deferred processing to be enabled.
48MP requires iPhone 14 Pro or later; 24MP requires iPhone 15 or later; fast capture deferred processing requires iPhone 16 or iPhone 17; ultrawide 24/48MP requires iPhone 17
The NowPlaying framework introduces a first-class Swift API for surfacing app media in system-wide now-playing surfaces โ Lock Screen, Control Center, Dynamic Island, StandBy, CarPlay, Apple Watch, and Apple TV โ via a declarative MediaSessionRepresentable protocol. It also supports remote media sessions (for controlling external speakers/TVs) and Media Sharing Extensions for routing media to third-party devices.