测试测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2018年9月 |
SPM支持 SPM | ✗ |
由 Alexander Widerberg 维护。
该仓库是原始项目 https://github.com/delba/Permission 的分支。要切换到此分支,只需将使用 CocoaPods 的 pod 'Permission'
替换为 pod 'leetal-Permission'
,或者如果您使用 Carthage,则将 github "delba/Permission"
替换为 github "leetal/Permission"
。
Permission 提供了一个统一的 API 来在 iOS 上请求权限。
let permission: Permission = .contacts
print(permission.status) // PermissionStatus.NotDetermined
permission.request { status in
switch status {
case .authorized: print("authorized")
case .denied: print("denied")
case .disabled: print("disabled")
case .notDetermined: print("not determined")
}
}
当您第一次请求权限时,将向用户显示系统警报。
如果您请求了一个已拒绝/已停用的权限,则将显示 PermissionAlert
。
您可能想要更改默认的 title
、message
、cancel
和 settings
文本
let alert = permission.deniedAlert // or permission.disabledAlert
alert.title = "Please allow access to your contacts"
alert.message = nil
alert.cancel = "Cancel"
alert.settings = "Settings"
如果不想显示这些警报,请将 permission.presentDeniedAlert = false
或 permission.presentDisabledAlert = false
设置。
为了不烧掉显示系统警报的唯一机会,您可以显示一个 权限预警报。更多关于此信息,请参阅这篇 文章。
permission.presentPrePermissionAlert = true
let alert = permission.prePermissionAlert
alert.title = "Let Foo Access Photos?"
alert.message = "This lets you choose which photos you want to add to your Foo profile"
alert.cancel = "Not now"
alert.confirm = "Give Access"
只有在用户点击“授予访问”时,才会显示系统警报。
使用 PermissionSet
检查一组 Permission
的状态,并在请求权限时作出反应。
let permissionSet = PermissionSet(.contacts, .camera, .microphone, .photos)
permissionSet.delegate = self
print(permissionSet.status) // PermissionStatus.NotDetermined
// ...
func permissionSet(permissionSet: PermissionSet, willRequestPermission permission: Permission) {
print("Will request \(permission)")
}
func permissionSet(permissionSet: PermissionSet, didRequestPermission permission: Permission) {
switch permissionSet.status {
case .authorized: print("all the permissions are granted")
case .denied: print("at least one permission is denied")
case .disabled: print("at least one permission is disabled")
case .notDetermined: print("at least one permission is not determined")
}
}
PermissionButton
在被点击时会请求权限,并在其底层权限状态变化时更新自身。
let button = PermissionButton(.photos)
PermissionButton
是 UIButton
的子类。所有 UIButton
的 getters 和 setters 在 PermissionButton
中都有对应的。
button.setTitles([
.authorized: "Authorized",
.denied: "Denied",
.disabled: "Disabled",
.notDetermined: "Not determined"
])
// button.setAttributedTitles
// button.setTitleColors
// button.setTitleShadowColors
// button.setImages
// button.setBackgroundImages
// etc.
class PermissionsViewController: UIViewController, PermissionSetDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel()
let contacts = PermissionButton(.contacts)
let camera = PermissionButton(.camera)
let microphone = PermissionButton(.microphone)
let photos = PermissionButton(.photos)
contacts.setTitles([
.notDetermined: "Contacts - NotDetermined"
.authorized: "Contacts - Authorized",
.denied: "Contacts - Denied"
])
contacts.setTitleColors([
.notDetermined: .black,
.authorized: .green,
.denied: .red
])
// ...
let permissionSet = PermissionSet(contacts, camera, microphone, photos)
permissionSet.delegate = self
label.text = String(permissionSet.status)
for subview in [label, contacts, camera, microphone, photos] {
view.addSubview(subview)
}
}
func permissionSet(permissionSet: PermissionSet, didRequestPermission permission: Permission) {
label.text = String(permissionSet.status)
}
}
Carthage 是一个集中式依赖管理器,该管理器会自动将框架添加到您的 Cocoa 应用程序中。
您可以使用以下命令通过 Homebrew 安装 Carthage
$ brew update
$ brew install carthage
要使用 Carthage 将 Permission 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它
github "leetal/Permission"
由于苹果新政策对权限访问的规定,二进制可能因被认为尝试
未经使用密钥访问隐私敏感数据而被拒绝,随后因实际未请求权限而被进一步拒绝。
作为解决方案,您可以在构建动态框架之前提供自定义构建标志,以仅编译
您请求的权限。这样做是通过在您的项目根目录中添加一个名为PermissionConfiguration.xcconfig
的配置文件来实现的。为了方便,您可以使用位于
Permission/
存储库目录下的PermissionConfiguration.xcconfig
。只需注释掉您要使用的权限
,然后编译框架。
仅编译通知和照片权限
PERMISSION_ADDRESS_BOOK = // PERMISSION_ADDRESS_BOOK
PERMISSION_BLUETOOTH = // PERMISSION_BLUETOOTH
PERMISSION_CAMERA = PERMISSION_CAMERA
PERMISSION_CONTACTS = // PERMISSION_CONTACTS
PERMISSION_EVENTS = // PERMISSION_EVENTS
PERMISSION_LOCATION = // PERMISSION_LOCATION
PERMISSION_MICROPHONE = // PERMISSION_MICROPHONE
PERMISSION_MOTION = // PERMISSION_MOTION
PERMISSION_NOTIFICATIONS = PERMISSION_NOTIFICATIONS
PERMISSION_PHOTOS = // PERMISSION_PHOTOS
PERMISSION_REMINDERS = // PERMISSION_REMINDERS
PERMISSION_SPEECH_RECOGNIZER = // PERMISSION_SPEECH_RECOGNIZER
PERMISSION_MEDIA_LIBRARY = // PERMISSION_MEDIA_LIBRARY
// Do not modify this line. Instead, remove comments above as needed to enable the categories your app uses.
PERMISSION_FLAGS= $(PERMISSION_ADDRESS_BOOK) $(PERMISSION_BLUETOOTH) $(PERMISSION_CAMERA) $(PERMISSION_CONTACTS) $(PERMISSION_EVENTS) $(PERMISSION_LOCATION) $(PERMISSION_MICROPHONE) $(PERMISSION_MOTION) $(PERMISSION_NOTIFICATIONS) $(PERMISSION_PHOTOS) $(PERMISSION_REMINDERS) $(PERMISSION_SPEECH_RECOGNIZER) $(PERMISSION_MEDIA_LIBRARY)
SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) $(PERMISSION_FLAGS)
CocoaPods是Cocoa项目的依赖管理器。
您可以使用以下命令安装它
$ gem install cocoapods
要使用CocoaPods将Permission集成到您的Xcode项目中,请在您的Podfile
中指定它。由于苹果对权限访问的新政策,您需要使用子规格明确定义要访问的权限类型。例如,如果您想访问相机和通知,您可以定义以下
use_frameworks!
pod 'leetal-Permission/Camera'
pod 'leetal-Permission/Notifications'
有关可用的子规格的更多信息,请参阅Permission.podspec
。
版权(c)2015-2016 Damien(《http://delba.io》)
在此特此授予,免费提供给任何获得此软件和相关文档副本("软件")的人
权利,不需要限制使用、复制、修改、合并、发布、分发、再许可和/或出售软件的副本,并允许
个人使用软件,本软件受以下条件的限制:
1.以上版权声明和本许可证应包含在任何副本或软件的大部分内容中。
2.《软件》按“原样”提供,不提供任何保证,无论明示或暗示,包括但不限于适销性、适用于特定目的和无侵权性的保证。
在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论是否涉及合同、侵权或其他行为,由此产生、由此产生或与《软件》或其使用或其他方式关联。
本软件的授权方式已得到许可,不受限制,包括使用、复制、修改、合并、发布、分发、子许可和/或销售软件副本的权利,并允许
软件提供者使用软件,受以下条件的约束:
1.上述版权声明和本许可证应包含在任何副本或软件的大部分内容中。
2.《软件》按“原样”提供,不提供任何保证,无论明示或暗示,包括但不限于适销性、适用于特定目的和无侵权性的保证。
在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论是否涉及合同、侵权或其他行为,由此产生、由此产生或与《软件》或其使用或其他方式关联。
3.不得在任何形式下更改、分发、再许可、公开披露或转让本许可证或软件副本的权利。
4.本许可证的任何部分不得被删除或更改。
5.此许可证下授予的权利不构成对任何专利、商标、版权或其他知识产权的授权。
6.除了上述表达许可的条款外,不得授予其他任何权利。