PermissionsSwiftUI отображает и обрабатывает разрешения в Swiftui. Это в значительной степени вдохновлено сппермиссиями. Пользовательский интерфейс очень настраивается и напоминает стиль Apple . Если вам нравится проект, пожалуйста, star ★ .

PermissionsWiftui выглядит одинаково великолепно как на ☀, так и на? темный режим.
onAppear и onDisappear переопределениеВы можете установить PermissionsSwiftui в свой проект XCode через SPM. Чтобы узнать больше о SPM, нажмите здесь
Для Xcode 13 перейдите к файлам → Добавить пакет
https://github.com/jevonmao/PermissionsSwiftUI ) и нажмите «Далее» .(Вам не нужно добавлять corepermissionswiftui или permissionswiftui)

Вы также можете установить PermissionsWiftui с кокоподами. Добавьте pod 'PermissionsSwiftUI' в свой Podfile:
platform :ios , '14.0'
target 'test abstract' do
use_frameworks!
pod 'PermissionsSwiftUI'
end Прежде чем начать, пожалуйста,
star ★Это хранилище. Ваша звезда-моя самая большая мотивация, чтобы вытащить All-Nighters и поддерживать этот проект с открытым исходным кодом.
v1.4 здесь! Если вы столкнетесь с какими -либо проблемами, пожалуйста, ознакомьтесь с руководством по миграции, предназначенному для того, чтобы помочь разработчикам разрешить какие -либо амортизации и обновления API.
Чтобы использовать разрешения wiftui, просто добавьте модификатор 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> , чтобы показать представление и добавить любые разрешения, которые вы хотите показать. Чтобы быстро взглянуть на все настройки и конфигурации PermissionsWiftui, ознакомьтесь с чит -листом!
Для настройки текстов разрешений используйте модификатор 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 " )Примечание:
setPermissionComponent в представление корневого уровня, после модификатора JMPermissions Modifier Параметр 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 " ) Чтобы настроить описание заголовка, используйте Modifier changeHeaderDescriptionTo :
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeHeaderDescriptionTo ( " Instagram need certain permissions in order for all the features to work. " ) Чтобы настроить нижнее описание, используйте Modifier changeBottomDescriptionTo :
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeBottomDescriptionTo ( " If not allowed, you have to enable permissions in settings " )onAppear и onDisappear переопределение Вы можете найти невероятно полезным для выполнения вашего кода или выполнить какое -то действие обновления, когда появляется и исчезает представление о разрешении. Swiftui.
Вы можете выполнить какое -то действие, когда появляется или исчезнут:
. JMPermissions ( showModal : $showModal , for : [ . locationAlways , . photo , . microphone ] , onAppear : { } , onDisappear : { } ) Параметры закрытия onAppear и onDisappear будут выполняться каждый раз, когда появляется представление о разрешениях wiftui, и исчезает.
Для изменения состояния доступно то же самое модификатор для изменений состояния: модификатор JMAlert :
. JMAlert ( showModal : $showModal ,
for : [ . locationAlways , . photo ] ,
onAppear : { print ( " Appeared " ) } ,
onDisappear : { print ( " Disappeared " ) } ) PermissionsSwiftui по умолчанию будет автоматически проверять статус авторизации. Он будет показывать только разрешения, которые в настоящее время notDetermined . (Система iOS не позволяет разработчикам просить об отказе в разрешениях. Разрешенные разрешения также будут проигнорированы с помощью PermissionsWiftui). Если все разрешения разрешены или отклонены, 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, разработчики и дизайнеры могут настроить все цвета пользовательского интерфейса с невероятной гибкостью. Вы можете полностью настроить весь цвет во всех состояниях с помощью пользовательских цветов.
Чтобы легко изменить цвет акцента:
. 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 ) ) 
️ .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 по умолчанию не позволяет пользователю отклонить модальный и оповещение, прежде чем все разрешения будут взаимодействовать. Это означает, что если пользователь явно не отказался и не разрешил каждое показанное разрешение, он не сможет отклонить представление о разрешениях. Это ограничение поведения увольнения может быть переопределено 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 Вот список всех поддержки разрешений разрешений. Да, даже новейшее разрешение tracking для iOS 14, чтобы вы могли оставаться на вершине своей игры. Все разрешения в PermissionsSwiftui поставляются с именем по умолчанию, описанию и потрясающим значком SF Native Apple.
Поддержка разрешения FaceID оказалась в стадии разработки и скоро появится! Если вы не найдете необходимое разрешение, откройте проблему. Более того, постройте его самостоятельно и откройте запрос на притяжение, вы можете следовать этому пошаговому руководству по добавлению новых разрешений. 
Взносы приветствуются здесь как для кодировщиков, так и для не кодеров. Независимо от того, каков ваш уровень квалификации, вы можете с некоторым образом внести свой вклад в сообщество с открытым исходным кодом. Пожалуйста, прочитайте Anforming.md перед началом, и если вы хотите внести новый тип разрешения iOS, обязательно прочитайте это пошаговое руководство.
Если вы столкнетесь с какой -либо проблемой, есть какие -либо проблемы или какие -либо комментарии, пожалуйста, не стесняйтесь сообщить мне. Откройте обсуждение, выпуск или напишите мне. Как разработчик, я чувствую вас, когда вы что -то не понимаете в кодовой базе. Я стараюсь комментировать и документировать как можно лучше, но если вам случится столкнуться с любыми проблемами, я буду рад помочь любым способом.
Sppermissions находится в большом римейке Swiftui знаменитой библиотеки Swift Sppermissions @verabeis. Sppermissions изначально была создана в 2017 году, и сегодня на Github насчитывается более 4000 звезд. PermissionsWiftui стремится доставить такую же красивую и мощную библиотеку в Swiftui. Если вы star ★ моем проекте PermissionsSwiftui, обязательно ознакомьтесь с оригинальными проектами Sppermissions, где я позаимствовал дизайн пользовательского интерфейса, некоторые части readme.md -страницы и важные ссылки на исходный код на этом пути.
PermissionsSwiftui создается Jingwen (Jevon) MAO и лицензирован по лицензии MIT