我尝试通过向 AVAuthorizationStatus 注入
.notDetermined
值来重置相机权限。我可以在下面的代码中看到 AVCaptureDevice.requestAccess(for: .video)
被重新触发,但是相机警报不会在 iPhone 上再次出现。
我的问题是
AVCaptureDevice.requestAccess(for: .video)
是否会在某些数据库中重新检查AVAuthorizationStatus,或者它只是弹出权限警报,这样我应该在iPhone上收到警报。相机权限存储在 iPhone 中的任何持久存储中,我们可以用代码清除该存储吗?
并且已经浏览了几篇文章,他们建议卸载应用程序,但在自动化 UI 测试中,据我所知,我们无法卸载应用程序。
private var isAuthorized: Bool {
get async {
// If UI Test, inject AVAuthorizationStatus = .notDetermined
let status = RuntimeEnv.isUITest ? .notDetermined : AVCaptureDevice.authorizationStatus(for: .video)
var isAuthorized = status == .authorized
if status == .notDetermined {
isAuthorized = await AVCaptureDevice.requestAccess(for: .video)
}
return isAuthorized
}
}
一般来说,隐私请求对话框一旦显示,就不会再次显示。
如果您正在模拟器上进行测试并希望在下次测试运行之前重置设备状态,您可以在终端中使用
xcrun simctl
命令:
xcrun simctl privacy <device> reset all <your.app.bundle>
将重置指定模拟器的所有隐私权限状态 <device>
。您可以省略 <your.app.bundle>
以重置设备上所有应用程序的权限。
除了删除并重新安装您的应用程序之外,没有任何方法可以在真实设备上重置权限请求状态。