如何检查ios设置应用程序中是否存在应用程序设置



我正在使用权限,我似乎遇到了一个有趣的边缘案例。。。

似乎只有在用户授予一个或多个权限后才能创建应用程序设置。我有一个按钮,它试图通过调用以下代码(在appDelegate的扩展中(来打开设置应用程序中的应用程序设置

open(UIApplication.openSettingsURLString, completionHandler: { success in
// success
})

用户可以在请求任何应用程序权限之前或之后访问此按钮。

如果用户在授予任何应用程序权限之前尝试打开应用程序设置,则特定于应用程序的设置似乎不会在设置应用程序中列出。

如何以编程方式检查应用程序设置是否已创建?

我通过在应用程序中添加settings.bundle解决了这个问题。

事实证明,添加Settings.bundle(即使是没有指定任何首选项规范的空Settings.bunde(也可以确保在设备上安装iOS设置应用程序时,将应用程序设置添加到该应用程序中。这保证了应用程序设置始终存在。

右键单击项目>新建文件并将Settings.bundle添加到项目中。然后更改或删除默认的首选项规范。

有关Settings.bundle的详细信息,请参阅:https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/UserDefaults/Preferences/Preferences.html

我使用的设置.bundle如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array/>
</dict>
</plist>

您可以维护应用程序使用的所有权限的列表。假设它使用PhotosCamera权限。您可以单独检查每个权限,以了解是否已为您的应用程序创建了系统设置。

import AVFoundation
import Photos
class PermissionsUtil {
class var isSystemSettingsCreatedForApp: Bool {
PHPhotoLibrary.hasUserInteractedWithSystemPermissionsAlert
||
AVCaptureDevice.hasUserInteractedWithSystemPermissionsAlert
/// And so on
}
}
extension PHPhotoLibrary {
class var hasUserInteractedWithSystemPermissionsAlert: Bool {
self.authorizationStatus() != .notDetermined
}
}
extension AVCaptureDevice {
class var hasUserInteractedWithSystemPermissionsAlert: Bool {
self.authorizationStatus(for: .video) != .notDetermined
}
}

这需要一些维护,因为新的权限被添加到应用程序中。不过,在不使用任何私有API的情况下解决了此目的。

相关内容

最新更新