PermissionsSwiftUI在Swiftui中显示和处理权限。它在很大程度上受到了sppermissions的启发。 UI是高度可定制的,类似于Apple样式。如果您喜欢该项目,请star ★ 。

Permissionsswiftui在☀️Light和?黑暗模式。
onAppear和onDisappear覆盖您可以通过SPM安装PermissionsSwiftUI到XCode项目中。要了解有关SPM的更多信息,请单击此处
对于Xcode 13,导航到文件→添加软件包
https://github.com/jevonmao/PermissionsSwiftUI ),然后单击下一步。(您不需要添加CoreMissionsSwiftUI或Permissionsswiftui)

您还可以安装带有可可录的Permissionsswiftui。在您的podfile中添加pod 'PermissionsSwiftUI' :
platform :ios , '14.0'
target 'test abstract' do
use_frameworks!
pod 'PermissionsSwiftUI'
end 在开始之前,请
star ★此存储库。您的明星是我最大的动力,是拉动所有夜间的动力并维护这个开源项目。
v1.4在这里!如果遇到任何问题,请查看旨在帮助开发人员解决任何折旧和API更新的迁移指南。
要使用Permissionsswiftui,只需将JMModal修饰符添加到任何视图中:
. JMModal ( showModal : $showModal , for : [ . locationAlways , . photo , . microphone ] ) `传递Binding<Bool>以显示模态视图,并添加您要显示的任何权限。例如:
struct ContentView : View {
@ State var showModal = false
var body : some View {
Button ( action : {
showModal = true
} , label : {
Text ( " Ask user for permissions " )
} )
. JMModal ( showModal : $showModal , for : [ . locationAlways , . photo , . microphone ] )
}
}
. JMAlert ( showModal : $showModal , for : [ . locationAlways , . photo ] )与以前的JMPermissions类似,您需要传递Binding<Bool>以显示视图,并添加要显示的任何权限。要快速浏览所有Permissionsswiftui的自定义和配置,请查看作弊表!
要自定义权限文本,请使用修饰符setPermissionComponent()例如,您可以更改标题,描述和图像图标:
. setPermissionComponent ( for : . camera ,
image : AnyView ( Image ( systemName : " camera.fill " ) ) ,
title : " Camcorder " ,
description : " App needs to record videos " )结果:

setPermissionComponent ( for : . tracking , title : " Trackers " ) setPermissionComponent ( for : . tracking , description : " Tracking description " )笔记:
JMPermissions修改器之后,在root leve视图上添加setPermissionComponent修饰符image参数接受AnyView ,因此请随时使用SF符号或您的自定义资产:
. setPermissionComponent ( for : . camera ,
image : AnyView ( Image ( " Your-cool-image " ) )即使是全部的Swiftui观看次数也会起作用?:
. setPermissionComponent ( for : . camera ,
image : AnyView ( YourCoolView ( ) )您可以使用一行代码使用自定义文本和图标,以适应所有受支持的权限。
要自定义标题标题,请使用修饰符changeHeaderTo : 
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . calendar ] )
. changeHeaderTo ( " App Permissions " )要自定义标题描述,请使用修饰符changeHeaderDescriptionTo To:
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeHeaderDescriptionTo ( " Instagram need certain permissions in order for all the features to work. " )要自定义底部描述,请使用修饰符changeBottomDescriptionTo To:
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeBottomDescriptionTo ( " If not allowed, you have to enable permissions in settings " )onAppear和onDisappear覆盖您可能会发现执行代码或执行PermissionsSwiftUI视图出现并消失时执行一些更新操作非常有用。
当Permissionsswiftui视图出现或消失时,您可以执行一些操作:
. JMPermissions ( showModal : $showModal , for : [ . locationAlways , . photo , . microphone ] , onAppear : { } , onDisappear : { } )每次出现并消失时,都会执行onAppear和onDisappear闭合参数。
JMAlert修饰符可用于状态更改的相同视图修饰符关闭:
. JMAlert ( showModal : $showModal ,
for : [ . locationAlways , . photo ] ,
onAppear : { print ( " Appeared " ) } ,
onDisappear : { print ( " Disappeared " ) } )默认情况下,PermissionsSwiftUI将自动检查授权状态。它将仅显示当前notDetermined状态的权限。 (iOS系统可防止开发人员要求拒绝权限。允许的权限也将被许可权忽略。如果允许或拒绝所有权限,则PermissionsSwiftUI将根本不会显示模式或警报。要设置自动检查授权,请使用autoCheckAuthorization参数:
. JMModal ( showModal : $showModal , for : [ . camera ] , autoCheckAuthorization : false )同样适用于JMALERT
. JMAlert ( showModal : $showModal , for : [ . camera ] , autoCheckAuthorization : false )默认情况下,Permissionsswiftui将没有任何自动解雇行为。您可以覆盖此行为,以使其在用户允许最后一个权限项目后自动删除模式或警报。 (必须允许所有许可,如果有的话,它将不会自动解雇)。
. JMModal ( ... autoDismiss : Bool ) - > some View传递true还是false以选择是否自动删除视图。
使用Permissionswiftui的功能,开发人员和设计人员可以以令人难以置信的灵活性来定制所有UI颜色。您可以使用自定义颜色在所有状态下完全配置所有颜色。
轻松改变重音颜色:
. setAccentColor ( to : Color ( . sRGB , red : 56 / 255 , green : 173 / 255 ,
blue : 169 / 255 , opacity : 1 ) )要更改主要(默认的苹果蓝色)和第三纪(默认的苹果红色)颜色:
. setAccentColor ( toPrimary : Color ( . sRGB , red : 56 / 255 , green : 173 / 255 ,
blue : 169 / 255 , opacity : 1 ) ,
toTertiary : Color ( . systemPink ) ) 
配x .setAccentColor()和.setAllowButtonColor()绝不应同时使用。
要释放所有状态下所有按钮颜色的全部自定义,您需要传递AllButtonColors结构:
. setAllowButtonColor ( to : . init ( buttonIdle : ButtonColor ( foregroundColor : Color ,
backgroundColor : Color ) ,
buttonAllowed : ButtonColor ( foregroundColor : Color ,
backgroundColor : Color ) ,
buttonDenied : ButtonColor ( foregroundColor : Color ,
backgroundColor : Color ) ) )有关上述方法的更多信息,请参考官方文档。
默认情况下,PermissionsSwiftUI将在与所有权限进行交互之前,以防止用户解散模式并发出警报。这意味着,如果用户没有明确拒绝或允许显示的所有许可,则他们将无法删除PermissionsSwiftUI视图。这限制了解雇行为,可以被var restrictModalDismissal: Bool或var restrictAlertDismissal: Bool属性。禁用默认限制解雇行为:
. JMModal ( showModal : $show , for permis sions : [ . camera ] , restrictDismissal : false )您也可以使用模型配置:
let model : PermissionStore = {
var model = PermissionStore ( )
model . permissions = [ . camera ]
model . restrictModalDismissal = false
model . restrictAlertDismissal = false
return model
}
......
. JMModal ( showModal : $showModal , forModel : model )与所有其他权限不同,健康许可的配置有些不同。因为Apple要求开发人员明确设置读写类型,所以Permissionsswiftui大大简化了该过程。
HKAccess初始化健康许可的枚举相关值时,需要HKACCESS。它封装了读写类型权限以获得健康许可。
设置读写健康类型(在此使用activeEnergyBurned为示例):
let healthTypes = Set ( [ HKSampleType . quantityType ( forIdentifier : . activeEnergyBurned ) ! ] )
. JMModal ( showModal : $show , for : [ . health ( categories : . init ( readAndWrite : healthTypes ) ) ] )
//Same exact syntax for JMAlert styles
. JMAlert ( showModal : $show , for : [ . health ( categories : . init ( readAndWrite : healthTypes ) ) ] )设置单独读取或写入:
let readTypes = Set ( [ HKSampleType . quantityType ( forIdentifier : . activeEnergyBurned ) ! ] )
let writeTypes = Set ( [ HKSampleType . quantityType ( forIdentifier : . appleStandTime ) ! ] )
. JMModal ( showModal : $showModal , for : [ . health ( categories : . init ( read : readTypes , write : writeTypes ) ) ] )您也可以仅设置读或写类型:
let readTypes = Set ( [ HKSampleType . quantityType ( forIdentifier : . activeEnergyBurned ) ! ] )
. JMModal ( showModal : $showModal , for : [ . health ( categories : . init ( read : readTypes ) ) ] ) 自定义整体重音颜色:
setAccentColor ( to : )
setAccentColor ( toPrimary : toTertiary : )自定义标题:
changeHeaderTo ( _ : )自定义顶部描述:
changeHeaderDescriptionTo ( _ : )自定义底部描述:
changeBottomDescriptionTo ( _ : )自定义每个权限显示的文本和图像:
setPermissionComponent ( for : image : title : description : )
setPermissionComponent ( for : title : )
setPermissionComponent ( for : description : )自定义allow按钮的颜色:
setAllowButtonColor ( to : )上次自动解雇
autoDismiss: BoolJMModal和JMAlert的参数在显示模式或警报之前先检查授权
autoCheckAuthorization: Bool在所有许可互动之前,请防止解雇
restrictDismissal: Bool在视图出现之前做某事
onAppear: ( ) -> Void在视图消失之前做点什么
onDisappear: ( ( ) - > Void这是所有权限权限Swiftui支持的列表。是的,即使是iOS 14的最新tracking许可,因此您可以保持游戏的顶峰。 Permissionsswiftui中的所有权限都带有默认名称,描述和令人惊叹的Apple本机SF符号图标。
支持FaceID许可正在进行中,即将上映!如果您没有找到所需的许可,请打开问题。更好的是,自己构建它并打开拉动请求,您可以遵循此分步指南,以添加新的许可。 
欢迎在这里为编码人员和非编码器提供贡献。无论您的技能水平是什么,您都可以为Permissionswiftui的开源社区做出贡献。请在开始之前阅读condrating.md,如果您想贡献一种新型的iOS许可,请务必阅读此逐步指南。
如果您遇到任何问题,有任何疑虑或任何评论,请随时让我知道。打开讨论,问题或给我发送电子邮件。作为开发人员,当您在代码库中不了解某些内容时,我会感到您。我会尽力发表评论和记录,但是如果您碰巧遇到任何问题,我将很乐意以任何方式提供帮助。
Sppermissions在很大程度上是@verabeis著名的Swift图书馆的Swiftui翻拍。 Sppermissions最初成立于2017年,如今在Github上拥有4000多颗。 Permissionsswiftui的目标是在Swiftui提供同样美丽而强大的图书馆。如果您star ★我的项目Permissionsswiftui,请务必查看我借用UI设计的原始项目Sppermissions,readme.md页面的某些部分以及一路上重要的源代码参考。
Permissionsswiftui由Jingwen(Jevon)Mao创建,并根据MIT许可获得许可