PermissionsSwiftUI muestra y maneja los permisos en Swiftui. Está en gran medida inspirado en Sppermissions. La interfaz de usuario es altamente personalizable y se asemeja a un estilo de Apple . Si te gusta el proyecto, por favor star ★ .

Permissionsswiftui se ve igualmente hermoso tanto en ☀️light como en? modo oscuro.
onAppear y onDisappear AnulaciónPuede instalar PermissionsSwiftUi en su proyecto XCode a través de SPM. Para obtener más información sobre SPM, haga clic aquí
Para Xcode 13, navegue a los archivos → Agregar paquete
https://github.com/jevonmao/PermissionsSwiftUI ) y haga clic en Siguiente .(No necesita agregar corepermissionsswiftui o permisssswiftui)

También puede instalar PermissionsSwiftui con Cocoapods. Agregue pod 'PermissionsSwiftUI' en su Podfile:
platform :ios , '14.0'
target 'test abstract' do
use_frameworks!
pod 'PermissionsSwiftUI'
end Antes de comenzar, por favor,
star ★este repositorio. Tu estrella es mi mayor motivación para atraer a los noches y mantener este proyecto de código abierto.
v1.4 está aquí! Si se encuentra con algún problema, consulte la guía de migración diseñada para ayudar a los desarrolladores a resolver cualquier deprecación y actualización de API.
Para usar PermissionsSwiftui, simplemente agregue el modificador JMModal a cualquier vista:
. JMModal ( showModal : $showModal , for : [ . locationAlways , . photo , . microphone ] ) ` Pase en un Binding<Bool> para mostrar la vista modal y agregue los permisos que desee mostrar. Por ejemplo:
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 ] ) Similar a los JMPermissions anteriores, debe pasar una Binding<Bool> para mostrar la vista y agregar los permisos que desee mostrar. Para mirar rápidamente toda la personalización y configuraciones de PermissionsSwiftui, ¡consulte la hoja de trucos!
Para personalizar los textos de permiso, use el modificador setPermissionComponent() Por ejemplo, puede cambiar el título, la descripción y el icono de la imagen:
. setPermissionComponent ( for : . camera ,
image : AnyView ( Image ( systemName : " camera.fill " ) ) ,
title : " Camcorder " ,
description : " App needs to record videos " )y el resultado:

setPermissionComponent ( for : . tracking , title : " Trackers " ) setPermissionComponent ( for : . tracking , description : " Tracking description " )Nota:
setPermissionComponent en su vista de nivel de raíz, después del modificador JMPermissions El parámetro de image acepta Anyview , así que no dude en usar símbolos SF o su activo personalizado:
. setPermissionComponent ( for : . camera ,
image : AnyView ( Image ( " Your-cool-image " ) )Incluso las vistas completas de Swiftui funcionarán?:
. setPermissionComponent ( for : . camera ,
image : AnyView ( YourCoolView ( ) )Puede usar texto e iconos personalizados para todos los permisos compatibles, con una sola línea de código.
Para personalizar el título del encabezado, use el modificador changeHeaderTo : 
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . calendar ] )
. changeHeaderTo ( " App Permissions " ) Para personalizar la descripción del encabezado, use el modificador changeHeaderDescriptionTo hasta:
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeHeaderDescriptionTo ( " Instagram need certain permissions in order for all the features to work. " ) Para personalizar la descripción inferior, use el modificador changeBottomDescriptionTo hasta:
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeBottomDescriptionTo ( " If not allowed, you have to enable permissions in settings " )onAppear y onDisappear Anulación Puede que le resulte increíblemente útil ejecutar su código o realizar alguna acción de actualización cuando aparezca y desaparezca una vista de permisos que aparece y desaparece.
Puede realizar alguna acción cuando aparece la vista de permisos que aparecen o desaparecen por:
. JMPermissions ( showModal : $showModal , for : [ . locationAlways , . photo , . microphone ] , onAppear : { } , onDisappear : { } ) Los parámetros de cierre onAppear y onDisappear se ejecutarán cada vez que aparezca y desaparezca los permisos de los permisos que desaparecen.
El mismo cierre del modificador de vista para los cambios de estado está disponible para el modificador JMAlert :
. JMAlert ( showModal : $showModal ,
for : [ . locationAlways , . photo ] ,
onAppear : { print ( " Appeared " ) } ,
onDisappear : { print ( " Disappeared " ) } ) PermissionsSwiftui de forma predeterminada verificará automáticamente el estado de autorización. Solo mostrará permisos que actualmente son un estado notDetermined . (El sistema iOS evita que los desarrolladores soliciten permisos denegados. Los permisos permitidos también serán ignorados por permisos que Swiftui). Si se permiten o denegan todos los permisos, los permisos Swiftui no mostrarán el modal o la alerta en absoluto. Para establecer la autorización de verificación automática, use el parámetro autoCheckAuthorization :
. JMModal ( showModal : $showModal , for : [ . camera ] , autoCheckAuthorization : false )Lo mismo se aplica a JMalert
. JMAlert ( showModal : $showModal , for : [ . camera ] , autoCheckAuthorization : false )PermissionsSwiftui por defecto no tendrá ningún comportamiento de descarga automática. Puede anular este comportamiento para que descarte automáticamente el modal o alerta después de que el usuario permita el último elemento de permiso. (Se deben permitir todos los permisos, si se niega, no se descartará automáticamente).
. JMModal ( ... autoDismiss : Bool ) - > some View Pase en true o false para seleccionar si debe descartar automáticamente la vista.
Utilizando las capacidades de permisos Wiftui, los desarrolladores y diseñadores pueden personalizar todos los colores de la interfaz de usuario con una flexibilidad increíble. Puede configurar completamente todo el color en todos los estados con sus colores personalizados.
Para cambiar fácilmente el color de acento:
. setAccentColor ( to : Color ( . sRGB , red : 56 / 255 , green : 173 / 255 ,
blue : 169 / 255 , opacity : 1 ) )Para cambiar los colores primarios (azul de manzana predeterminado) y terciarios (rojo de manzana predeterminado):
. setAccentColor ( toPrimary : Color ( . sRGB , red : 56 / 255 , green : 173 / 255 ,
blue : 169 / 255 , opacity : 1 ) ,
toTertiary : Color ( . systemPink ) ) 
️ .setAccentColor()y.setAllowButtonColor()nunca se debe usar al mismo tiempo.
Para desatar la personalización completa de todos los colores de los botones en todos los estados, debe pasar en la estructura AllButtonColors :
. setAllowButtonColor ( to : . init ( buttonIdle : ButtonColor ( foregroundColor : Color ,
backgroundColor : Color ) ,
buttonAllowed : ButtonColor ( foregroundColor : Color ,
backgroundColor : Color ) ,
buttonDenied : ButtonColor ( foregroundColor : Color ,
backgroundColor : Color ) ) )Para obtener más información sobre el método anterior, haga referencia a la documentación oficial.
PermissionsSwiftui, por defecto, evitará que el usuario descarte el modal y la alerta antes de que se hayan interactuado todos los permisos. Esto significa que si el usuario no ha negado o permitido explícitamente todos los permisos mostrados, no podrá descartar la vista de permisos que Esto restringe el comportamiento de despido puede ser anulado por el var restrictModalDismissal: Bool o var restrictAlertDismissal: Bool propiedades. Para deshabilitar el comportamiento de desestimación de restricción predeterminada:
. JMModal ( showModal : $show , for permis sions : [ . camera ] , restrictDismissal : false )También puede configurar con el modelo:
let model : PermissionStore = {
var model = PermissionStore ( )
model . permissions = [ . camera ]
model . restrictModalDismissal = false
model . restrictAlertDismissal = false
return model
}
......
. JMModal ( showModal : $showModal , forModel : model )A diferencia de todos los demás permisos, la configuración para el permiso de salud es un poco diferente. Debido a que Apple requiere que los desarrolladores establezcan explícitamente los tipos de lectura y escritura, los permisos Swiftui simplifican enormemente el proceso.
HKAccessSe requiere la estructura de HKAccess al inicializar los valores asociados de Enumss de permiso de salud. Encapsula los permisos de lectura y escritura para el permiso de salud.
Para establecer los tipos de salud de lectura y escritura ( activeEnergyBurned se usa como ejemplo aquí):
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 ) ) ] )Para configurar leer o escribir individualmente:
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 ) ) ] )También puede configurar solo el tipo de lectura o escritura:
let readTypes = Set ( [ HKSampleType . quantityType ( forIdentifier : . activeEnergyBurned ) ! ] )
. JMModal ( showModal : $showModal , for : [ . health ( categories : . init ( read : readTypes ) ) ] ) Personalizar el color de acento general:
setAccentColor ( to : )
setAccentColor ( toPrimary : toTertiary : )Personalizar título:
changeHeaderTo ( _ : )Personalizar la descripción superior:
changeHeaderDescriptionTo ( _ : )Personalizar descripción inferior:
changeBottomDescriptionTo ( _ : )Personalice el texto y la imagen que se muestran cada permiso:
setPermissionComponent ( for : image : title : description : )
setPermissionComponent ( for : title : )
setPermissionComponent ( for : description : ) Personalizar los colores del botón allow :
setAllowButtonColor ( to : )Despedir automáticamente después del último
autoDismiss: BoolJMModal y JMAlertVerifique la autorización antes de mostrar modales o alerta
autoCheckAuthorization: BoolEvite el desestimación antes de que interactuaran todos los permisos
restrictDismissal: BoolHaz algo justo antes de que aparezca la vista
onAppear: ( ) -> VoidHaz algo justo antes de que la vista desaparezca
onDisappear: ( ( ) - > Void Aquí hay una lista de todos los permisos de permisos que SportsSwiftui Supports. Sí, incluso el permiso tracking más reciente para iOS 14 para que puedas estar al tanto de tu juego. Todos los permisos en PermissionsSwiftui vienen con un nombre predeterminado, una descripción y un impresionante icono de símbolos SF nativos de Apple.
¡El apoyo para el permiso de FaceID es trabajo en progreso y próximamente! Si no encuentra un permiso que necesita, abra un problema. Aún mejor, construirlo usted mismo y abrir una solicitud de extracción, puede seguir esta guía paso a paso para agregar nuevos permisos. 
Las contribuciones son bienvenidas aquí para codificadores y no codificadores por igual. No importa cuál sea su nivel de habilidad, puede contribuir con ciertos a la comunidad de código abierto de permisos Wiftui. Lea Contriping.MD antes de comenzar, y si está buscando contribuir con un nuevo tipo de permiso de iOS, asegúrese de leer esta guía paso a paso.
Si encuentra algún problema, tiene alguna inquietud o algún comentario, no dude en avisarme. Abra una discusión, un problema o envíeme un correo electrónico. Como desarrollador, te siento cuando no entiendes algo en la base de código. Intento comentar y documentar lo mejor que pueda, pero si encuentra algún problema, estaré encantado de ayudar de cualquier manera que pueda.
Sppermissions es en grande una nueva versión de la famosa Biblioteca Swift Sppermissions de @verabeis. Sppermissions se creó inicialmente en 2017, y hoy en Github tiene más de 4000 estrellas. Permissionsswiftui tiene como objetivo ofrecer una biblioteca tan hermosa y poderosa en Swiftui. Si star ★ mi proyecto de permisos Swiftui, asegúrese de consultar el proyecto original Sppermissions donde tomé prestado el diseño de la interfaz de usuario, algunas partes de la página ReadMe.md y las referencias importantes del código fuente en el camino.
PermissionsSwiftui es creado por Jingwen (Jevon) Mao y con licencia bajo la licencia MIT