如何检查 ios 设置应用中是否存在应用设置
How to check if app settings exist in ios setting app
我正在使用权限,我似乎遇到了一个有趣的边缘情况...
似乎直到用户授予一项或多项权限后,应用程序设置才会创建。我有一个按钮试图通过调用以下代码(在 appDelegate 的扩展中)在设置应用程序中打开应用程序设置
open(UIApplication.openSettingsURLString, completionHandler: { success in
// success
})
用户可以在请求任何应用权限之前或之后访问此按钮。
如果用户在授予任何应用权限之前尝试打开应用设置,则应用特定设置似乎未在设置应用中列出。
如何以编程方式检查应用设置是否已创建?
您可以维护您的应用使用的所有权限的列表。假设它使用 Photos
和 Camera
权限。您可以单独检查这些权限中的每一个,以了解是否已为您的应用创建系统设置。
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 就解决了这个问题。
我通过向应用程序添加 settings.bundle 解决了这个问题。
事实证明,添加一个 Settings.bundle(即使是一个没有指定任何 PreferenceSpecifiers 的空 Settings.bundle)将确保将应用程序设置添加到 iOS 设置应用程序当应用程序安装在设备上时。这保证了应用程序设置始终存在。
右键单击项目 > 新建文件并向项目添加 Settings.bundle。
然后更改或删除默认的 PreferenceSpecifiers。
有关 Settings.bundle 的详细信息,请参阅:
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/UserDefaults/Preferences/Preferences.html
我用的settings.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>
我正在使用权限,我似乎遇到了一个有趣的边缘情况...
似乎直到用户授予一项或多项权限后,应用程序设置才会创建。我有一个按钮试图通过调用以下代码(在 appDelegate 的扩展中)在设置应用程序中打开应用程序设置
open(UIApplication.openSettingsURLString, completionHandler: { success in
// success
})
用户可以在请求任何应用权限之前或之后访问此按钮。
如果用户在授予任何应用权限之前尝试打开应用设置,则应用特定设置似乎未在设置应用中列出。
如何以编程方式检查应用设置是否已创建?
您可以维护您的应用使用的所有权限的列表。假设它使用 Photos
和 Camera
权限。您可以单独检查这些权限中的每一个,以了解是否已为您的应用创建系统设置。
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 就解决了这个问题。
我通过向应用程序添加 settings.bundle 解决了这个问题。
事实证明,添加一个 Settings.bundle(即使是一个没有指定任何 PreferenceSpecifiers 的空 Settings.bundle)将确保将应用程序设置添加到 iOS 设置应用程序当应用程序安装在设备上时。这保证了应用程序设置始终存在。
右键单击项目 > 新建文件并向项目添加 Settings.bundle。 然后更改或删除默认的 PreferenceSpecifiers。
有关 Settings.bundle 的详细信息,请参阅: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/UserDefaults/Preferences/Preferences.html
我用的settings.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>