PermissionsKit

通用 API,用于请求权限并获取其状态 — 可用状态包括 .authorized.denied.notDetermined

iOS 开发者社区

导航

权限

图标 权限 Info.plist 的键 获取状态 发起请求
蓝牙 NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription
日历 NSCalendarsUsageDescription, NSCalendarsFullAccessUsageDescription, NSCalendarsWriteOnlyAccessUsageDescription
相机 NSCameraUsageDescription
通讯录 NSContactsUsageDescription
FaceID NSFaceIDUsageDescription ☑️
健康 NSHealthUpdateUsageDescription, NSHealthShareUsageDescription
定位 NSLocationAlwaysAndWhenInUseUsageDescription NSLocationWhenInUseUsageDescription
媒体资料库 NSAppleMusicUsageDescription
麦克风 NSMicrophoneUsageDescription
运动与健身 NSMotionUsageDescription
通知
照片图库 NSPhotoLibraryUsageDescription, NSPhotoLibraryAddUsageDescription
提醒事项 NSRemindersUsageDescription, NSRemindersFullAccessUsageDescription
Siri NSSiriUsageDescription
语音识别 NSSpeechRecognitionUsageDescription
跟踪 NSUserTrackingUsageDescription

安装

可在 iOS 12+ 上使用。支持 iOS、macOS、visionOS、tvOS 和 watchOS。可与 UIKitSwiftUI 配合使用。

Swift Package Manager

在 Xcode 中,前往 Project -> Your Project Name -> Package Dependencies -> 点击 Plus。插入 URL

https://github.com/sparrowcode/PermissionsKit

接下来,选择您需要的权限。但不要添加所有权限,因为苹果会拒绝应用。或者将其添加到您的 Package.swiftdependencies

dependencies: [
    .package(url: "https://github.com/sparrowcode/PermissionsKit", .upToNextMajor(from: "11.0.0"))
]

并选择有效的目标。

CocoaPods

这是一种过时的方法。我建议您使用 SPM。但是,我将在一段时间内继续支持 Cocoapods。

Cocoapods 安装

CocoaPods 是一个依赖管理器。有关使用和安装说明,请访问其网站。要使用 CocoaPods 集成,请在您的 Podfile 中指定它

pod 'PermissionsKit/NotificationPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'

由于 Apple 关于权限访问的新政策,您需要使用子规范明确定义您想要访问的权限类型。

pod 'PermissionsKit/CameraPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/ContactsPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/CalendarPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/PhotoLibraryPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/NotificationPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/MicrophonePermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/RemindersPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/SpeechRecognizerPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/LocationPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/MotionPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/MediaLibraryPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/BluetoothPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/TrackingPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/FaceIDPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/SiriPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/HealthPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'

为何使用模块

如果您将所有代码放在一个包中并进行编译,Apple 审核团队将看到许多对权限 API 的调用。他们很可能会要求您提供一个有效的理由,说明您为何真正需要这些权限。使用模块允许您仅编译实际使用的代码部分。只需选择您需要的即可。

警告

仅导入您真正需要的权限。

请求权限

import PermissionsKit
import NotificationPermission

PermissionsKit.Permission.notification([.alert, .badge, .sound]).request {

}

获取权限状态

import PermissionsKit
import NotificationPermission

let authorized = Permission.notification.authorized

警告

对于 FaceID 权限,无法准确检测请求是 .authorized 还是 .notDetermined 状态。.denied 状态检测良好。目前,对于这两种状态都返回 .notDetermined

Info.plist 中的键

您需要根据 Apple 的要求向 Info.plist 文件添加一些包含描述的字符串。您可以按如下方式获取权限键的 plist

let key = Permission.bluetooth.usageDescriptionKey

注意

请勿使用描述作为键的名称。Xcode 无法构建。

本地化

如果您使用 xliff 本地化导出,键将自动创建。如果您更喜欢手动进行本地化文件,则需要创建 InfoPlist.strings,在右侧菜单中选择语言,并添加键作为 plist 文件中的键。请参阅

"NSCameraUsageDescription" = "Here description of usage camera";

正在使用的应用

如果您使用了 PermissionsKit,请通过 Pull Request 添加您的应用。