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許可獲得許可