Fix Center Stage crash - set control mode to .app before enabling
AVCaptureDevice.centerStageControlMode must be .app (not .user) before we can programmatically set isCenterStageEnabled. When mode is .user, only the user can toggle it via Control Center.
This commit is contained in:
parent
56890cb519
commit
564d2107ea
@ -338,16 +338,25 @@ struct CustomCameraScreen: MCameraScreen {
|
|||||||
private func applyCenterStage(_ enabled: Bool) {
|
private func applyCenterStage(_ enabled: Bool) {
|
||||||
// Center Stage is a system-wide setting on AVCaptureDevice
|
// Center Stage is a system-wide setting on AVCaptureDevice
|
||||||
// Only available on devices with Ultra Wide front camera (iPhone 11+, iPad Pro 2021+)
|
// Only available on devices with Ultra Wide front camera (iPhone 11+, iPad Pro 2021+)
|
||||||
guard AVCaptureDevice.isCenterStageEnabled != enabled else { return }
|
|
||||||
|
|
||||||
// Check if Center Stage is supported
|
// Check if Center Stage is supported
|
||||||
if let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front),
|
guard let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front),
|
||||||
device.activeFormat.isCenterStageSupported {
|
device.activeFormat.isCenterStageSupported else {
|
||||||
AVCaptureDevice.isCenterStageEnabled = enabled
|
|
||||||
Design.debugLog("Center Stage set to \(enabled)")
|
|
||||||
} else {
|
|
||||||
Design.debugLog("Center Stage not supported on this device")
|
Design.debugLog("Center Stage not supported on this device")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Must set control mode to .app before we can programmatically control Center Stage
|
||||||
|
// When mode is .user, only the user can toggle via Control Center
|
||||||
|
if AVCaptureDevice.centerStageControlMode != .app {
|
||||||
|
AVCaptureDevice.centerStageControlMode = .app
|
||||||
|
Design.debugLog("Center Stage control mode set to .app")
|
||||||
|
}
|
||||||
|
|
||||||
|
guard AVCaptureDevice.isCenterStageEnabled != enabled else { return }
|
||||||
|
|
||||||
|
AVCaptureDevice.isCenterStageEnabled = enabled
|
||||||
|
Design.debugLog("Center Stage set to \(enabled)")
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Skin Smoothing
|
// MARK: - Skin Smoothing
|
||||||
|
|||||||
@ -627,6 +627,7 @@
|
|||||||
},
|
},
|
||||||
"Captured photo" : {
|
"Captured photo" : {
|
||||||
"comment" : "A label describing a captured photo.",
|
"comment" : "A label describing a captured photo.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
@ -651,6 +652,7 @@
|
|||||||
},
|
},
|
||||||
"Captured video" : {
|
"Captured video" : {
|
||||||
"comment" : "A label describing a captured video.",
|
"comment" : "A label describing a captured video.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
@ -769,6 +771,7 @@
|
|||||||
},
|
},
|
||||||
"Close preview" : {
|
"Close preview" : {
|
||||||
"comment" : "A button label that closes the preview screen.",
|
"comment" : "A button label that closes the preview screen.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
@ -1249,6 +1252,7 @@
|
|||||||
},
|
},
|
||||||
"Front Flash" : {
|
"Front Flash" : {
|
||||||
"comment" : "Title of a toggle in the Settings view that controls whether the front flash is enabled.",
|
"comment" : "Title of a toggle in the Settings view that controls whether the front flash is enabled.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
@ -1397,6 +1401,7 @@
|
|||||||
},
|
},
|
||||||
"Hide preview during capture for flash effect" : {
|
"Hide preview during capture for flash effect" : {
|
||||||
"comment" : "Text displayed in a toggle within the \"Camera Controls\" section, allowing the user to enable or disable the feature of hiding the camera preview during a photo capture to simulate a flash effect.",
|
"comment" : "Text displayed in a toggle within the \"Camera Controls\" section, allowing the user to enable or disable the feature of hiding the camera preview during a photo capture to simulate a flash effect.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
@ -1929,6 +1934,7 @@
|
|||||||
},
|
},
|
||||||
"Retake" : {
|
"Retake" : {
|
||||||
"comment" : "Title for a button that allows the user to retake a captured photo or video.",
|
"comment" : "Title for a button that allows the user to retake a captured photo or video.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
@ -2119,6 +2125,7 @@
|
|||||||
},
|
},
|
||||||
"Save" : {
|
"Save" : {
|
||||||
"comment" : "Title for a button that saves the currently captured photo or video to the user's photo library.",
|
"comment" : "Title for a button that saves the currently captured photo or video to the user's photo library.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
@ -2143,6 +2150,7 @@
|
|||||||
},
|
},
|
||||||
"Saved to Photos" : {
|
"Saved to Photos" : {
|
||||||
"comment" : "Text shown as a toast message when a photo is successfully saved to Photos.",
|
"comment" : "Text shown as a toast message when a photo is successfully saved to Photos.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
@ -2359,6 +2367,7 @@
|
|||||||
},
|
},
|
||||||
"Share" : {
|
"Share" : {
|
||||||
"comment" : "Title for a button that shares the captured media.",
|
"comment" : "Title for a button that shares the captured media.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
@ -3031,6 +3040,7 @@
|
|||||||
},
|
},
|
||||||
"Uses screen flash when taking front camera photos" : {
|
"Uses screen flash when taking front camera photos" : {
|
||||||
"comment" : "A toggle that enables or disables the use of the front camera's flash during photo captures.",
|
"comment" : "A toggle that enables or disables the use of the front camera's flash during photo captures.",
|
||||||
|
"extractionState" : "stale",
|
||||||
"isCommentAutoGenerated" : true,
|
"isCommentAutoGenerated" : true,
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"es-MX" : {
|
"es-MX" : {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user