PermissionsSwiftUI แสดงและจัดการสิทธิ์ใน Swiftui ส่วนใหญ่ได้รับแรงบันดาลใจจาก SPPermissions UI สามารถปรับแต่งได้สูงและคล้ายกับ สไตล์แอปเปิ้ล ถ้าคุณชอบโครงการโปรด star ★

Permissionsswiftui ดูงดงามพอ ๆ กันทั้ง☀lightและ? โหมดมืด
onAppear และ onDisappear Overrideคุณสามารถติดตั้ง Permissionsswiftui ลงในโครงการ XCode ของคุณผ่าน SPM หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ SPM คลิกที่นี่
สำหรับ Xcode 13 ให้ไปที่ ไฟล์ → เพิ่มแพ็คเกจ
https://github.com/jevonmao/PermissionsSwiftUI ) และคลิก ถัดไป(คุณไม่จำเป็นต้องเพิ่ม coreRePermissionsswiftui หรือ permissionsswiftui)

คุณยังสามารถติดตั้ง Permissionsswiftui ด้วย cocoapods เพิ่ม pod 'PermissionsSwiftUI' ใน podfile ของคุณ:
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 ได้อย่างรวดเร็วลองดู Cheatsheet!
ในการปรับแต่งข้อความการอนุญาตให้ใช้ตัวดัดแปลง 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 พารามิเตอร์ 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 :
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeHeaderDescriptionTo ( " Instagram need certain permissions in order for all the features to work. " ) ในการปรับแต่งคำอธิบายด้านล่างให้ใช้ตัวดัดแปลง changeBottomDescriptionTo :
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeBottomDescriptionTo ( " If not allowed, you have to enable permissions in settings " )onAppear และ onDisappear Override คุณอาจพบว่ามีประโยชน์อย่างไม่น่าเชื่อในการเรียกใช้รหัสของคุณหรือดำเนินการอัปเดตบางอย่างเมื่อมุมมอง Permissionsswiftui ปรากฏขึ้นและหายไป
คุณสามารถดำเนินการบางอย่างเมื่อ Permissionsswiftui View ปรากฏขึ้นหรือหายไปโดย:
. JMPermissions ( showModal : $showModal , for : [ . locationAlways , . photo , . microphone ] , onAppear : { } , onDisappear : { } ) พารามิเตอร์การปิด onAppear และ onDisappear จะถูกดำเนินการ ทุกครั้งที่ได้รับอนุญาตให้ใช้มุมมอง Aswiftui จะปรากฏขึ้นและหายไป
การปิดตัวดัดแปลงมุมมองเดียวกันสำหรับการเปลี่ยนแปลงสถานะมีให้สำหรับตัวดัดแปลง JMAlert :
. JMAlert ( showModal : $showModal ,
for : [ . locationAlways , . photo ] ,
onAppear : { print ( " Appeared " ) } ,
onDisappear : { print ( " Disappeared " ) } ) Permissionsswiftui โดยค่าเริ่มต้นจะตรวจสอบสถานะการอนุญาตโดยอัตโนมัติ มันจะแสดงเฉพาะสิทธิ์ที่อยู่ในสถานะ notDetermined (ระบบ iOS ป้องกันไม่ให้นักพัฒนาขอสิทธิ์ที่ถูกปฏิเสธการอนุญาตที่ได้รับอนุญาตจะถูกเพิกเฉยโดย Permissionsswiftui) หากอนุญาตหรือปฏิเสธการอนุญาตทั้งหมด 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 ) ) 
.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 เป็นสิ่งจำเป็นเมื่อเริ่มต้นการเริ่มต้นค่า enum ที่เกี่ยวข้องกับการอนุญาตสุขภาพ มันห่อหุ้มสิทธิ์การอ่านและการเขียนเพื่อการอนุญาตสุขภาพ
ในการตั้งค่าการอ่านและเขียนประเภทสุขภาพ ( 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ตรวจสอบการอนุญาตก่อนแสดง modal หรือการแจ้งเตือน
autoCheckAuthorization: Boolป้องกันการไล่ออกก่อนการอนุญาตทั้งหมดมีการโต้ตอบ
restrictDismissal: Boolทำสิ่งที่ถูกต้องก่อนที่จะปรากฏ
onAppear: ( ) -> Voidทำสิ่งที่ถูกต้องก่อนที่มุมมองจะหายไป
onDisappear: ( ( ) - > Void นี่คือรายการของสิทธิ์การอนุญาตทั้งหมดที่สนับสนุน ใช่แม้กระทั่งสิทธิ์ tracking ใหม่ล่าสุดสำหรับ iOS 14 เพื่อให้คุณสามารถอยู่ด้านบนของเกมของคุณ สิทธิ์ทั้งหมดใน Permissionsswiftui มาพร้อมกับชื่อเริ่มต้นคำอธิบายและไอคอนสัญลักษณ์ SF Native Apple ที่สวยงาม
การสนับสนุนการอนุญาตแบบ FaceId กำลังดำเนินการอยู่ในระหว่างดำเนินการและเร็ว ๆ นี้! หากคุณไม่พบสิทธิ์ที่คุณต้องการให้เปิดปัญหา ยิ่งไปกว่านั้นสร้างมันเองและเปิดคำขอดึงคุณสามารถทำตามคำแนะนำทีละขั้นตอนนี้ในการเพิ่มสิทธิ์ใหม่ 
ยินดีต้อนรับการมีส่วนร่วมที่นี่สำหรับผู้เขียนโค้ดและผู้ที่ไม่ใช่ตัวกำหนด ไม่ว่าระดับทักษะของคุณจะเป็นอย่างไรคุณสามารถมีส่วนร่วมในชุมชนโอเพ่นซอร์สของ PermissionsWiftui โปรดอ่าน Inteding.md ก่อนเริ่มต้นและหากคุณกำลังมองหาการให้สิทธิ์ iOS ประเภทใหม่ให้แน่ใจว่าได้อ่านคำแนะนำทีละขั้นตอนนี้
หากคุณพบปัญหาใด ๆ มีข้อกังวลหรือความคิดเห็นใด ๆ โปรดอย่าลังเลที่จะแจ้งให้เราทราบ เปิดการสนทนาปัญหาหรือส่งอีเมลถึงฉัน ในฐานะนักพัฒนาฉันรู้สึกว่าคุณไม่เข้าใจอะไรบางอย่างใน codebase ฉันพยายามแสดงความคิดเห็นและจัดทำเอกสารให้ดีที่สุดเท่าที่จะทำได้ แต่ถ้าคุณพบปัญหาใด ๆ ฉันยินดีที่จะช่วยเหลือในทุกวิถีทางเท่าที่จะทำได้
SPPermissions มีขนาดใหญ่ในการรีเมค Swiftui ของ Swift Library SPPermissions โดย @Verabeis SPPermissions ถูกสร้างขึ้นครั้งแรกในปี 2560 และวันนี้ที่ GitHub มีมากกว่า 4,000 ดาว Permissionsswiftui ตั้งเป้าหมายที่จะส่งมอบห้องสมุดที่สวยงามและทรงพลังใน Swiftui หากคุณ star ★ Project Permissionsswiftui ให้แน่ใจว่าได้ตรวจสอบโครงการ SPPermissions ดั้งเดิมที่ฉันยืมการออกแบบ UI บางส่วนของหน้า readme.md และการอ้างอิงซอร์สโค้ดที่สำคัญตลอดทาง
Permissionsswiftui ถูกสร้างขึ้นโดย Jingwen (Jevon) Mao และได้รับใบอนุญาตภายใต้ใบอนุญาต MIT