يعرض PermissionsSwiftUI الأذونات في Swiftui. إنه مستوحى إلى حد كبير من sppermissions. واجهة المستخدم قابلة للتخصيص بشكل كبير وتشبه نمط التفاح . إذا كنت تحب المشروع ، يرجى star ★ .

تبدو الأذونات swiftui رائعة بنفس القدر على كل من ☀light و؟ الوضع المظلم.
onAppear و onDisappear تجاوزيمكنك تثبيت الأذونات sswiftui في مشروع Xcode الخاص بك عبر SPM. لمعرفة المزيد حول SPM ، انقر هنا
لـ Xcode 13 ، انتقل إلى الملفات → إضافة حزمة
https://github.com/jevonmao/PermissionsSwiftUI ) وانقر فوق التالي .(لا تحتاج إلى إضافة CorePermissionsswiftui أو الأذنين swiftui)

يمكنك أيضًا تثبيت الأذونات swiftui مع cocoapods. أضف pod 'PermissionsSwiftUI' في podfile الخاص بك:
platform :ios , '14.0'
target 'test abstract' do
use_frameworks!
pod 'PermissionsSwiftUI'
end قبل أن تبدأ ، يرجى
star ★هذا المستودع. نجمك هو أكبر دافع لي لسحب جميع المتسابقين والحفاظ على هذا المشروع مفتوح المصدر.
v1.4 هنا! إذا واجهت أي مشكلات ، فيرجى مراجعة دليل الترحيل المصمم لمساعدة المطورين على حل أي انخفاضات وتحديثات API.
لاستخدام الأذونات swiftui ، ما عليك سوى إضافة معدّل 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> لإظهار العرض ، وإضافة أي أذونات تريد عرضها. لإلقاء نظرة سريعة على جميع الأذونات تخصيص وتكوينات وتكوينات ، تحقق من ورقة الغش!
لتخصيص نصوص الإذن ، استخدم modifier 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 أي عرض ، لذلك لا تتردد في استخدام رموز SF أو أصولك المخصصة:
. setPermissionComponent ( for : . camera ,
image : AnyView ( Image ( " Your-cool-image " ) )حتى وجهات نظر Swiftui الكاملة ستعمل؟:
. setPermissionComponent ( for : . camera ,
image : AnyView ( YourCoolView ( ) )يمكنك استخدام نص ورموز مخصصة لجميع الأذونات المدعومة ، مع سطر واحد من التعليمات البرمجية.
لتخصيص عنوان الرأس ، استخدم Modifier 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 في كل مرة تظهر فيها عرض الأذنين ويختفي.
يتوفر إغلاق معدّل العرض نفسه لتغييرات الحالة لمعدل JMAlert :
. JMAlert ( showModal : $showModal ,
for : [ . locationAlways , . photo ] ,
onAppear : { print ( " Appeared " ) } ,
onDisappear : { print ( " Disappeared " ) } ) سوف تتحقق الأذونات بشكل افتراضي بشكل افتراضي من حالة التفويض. سيظهر فقط الأذونات التي notDetermined حاليًا. (يمنع نظام iOS للمطورين من طلب أذونات مُرفض. سيتم تجاهل الأذونات المسموح بها أيضًا بواسطة الأذونات). إذا تم السماح بجميع الأذونات أو رفضها ، فلن تُظهر الأذونات swiftui الوسيطة أو التنبيه على الإطلاق. لتعيين تفويض التحقق التلقائي ، استخدم معلمة autoCheckAuthorization :
. JMModal ( showModal : $showModal , for : [ . camera ] , autoCheckAuthorization : false )ينطبق الشيء نفسه على jmalert
. JMAlert ( showModal : $showModal , for : [ . camera ] , autoCheckAuthorization : false )لن يكون للأذونات بشكل افتراضي أي سلوك طرد تلقائي. يمكنك تجاوز هذا السلوك لجعله تلقائيًا يرفض الوسيط أو التنبيه بعد أن يسمح المستخدم بآخر عنصر إذن. (يجب السماح بجميع الأذونات ، إذا تم رفض أي شيء ، فلن يتم رفضها تلقائيًا).
. JMModal ( ... autoDismiss : Bool ) - > some View مررًا true أو false لتحديد ما إذا كان سيتم رفض العرض تلقائيًا.
باستخدام إمكانيات الأذونات Swiftui ، يمكن للمطورين والمصممين تخصيص جميع ألوان واجهة المستخدم بمرونة مذهلة. يمكنك تكوين كل الألوان بالكامل في جميع الحالات بألوانك المخصصة.
لتغيير لون اللكنة بسهولة:
. setAccentColor ( to : Color ( . sRGB , red : 56 / 255 , green : 173 / 255 ,
blue : 169 / 255 , opacity : 1 ) )لتغيير الألوان الأساسية (الافتراضية Apple Blue) والثالث (Apple Red):
. 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 ) ) )لمزيد من المعلومات فيما يتعلق بالطريقة أعلاه ، قم بالرجوع إلى الوثائق الرسمية.
سوف يتم تفاعل الأذونات بشكل افتراضي ، ومنع المستخدم من رفض الوسيط والتنبيه قبل التفاعل مع جميع الأذونات. هذا يعني أنه إذا لم ينكر المستخدم بشكل صريح أو سمح لكل إذن معروض ، فلن يتمكنوا من رفض عرض الأذنين. هذا يقيد سلوك الإقالة يمكن تجاوزه بواسطة var restrictModalDismissal: Bool أو var restrictAlertDismissal: Bool Properties. لتعطيل التخلف عن التخلف عن التقيد السلوك:
. 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 تتطلب من المطورين تعيين أنواع القراءة والكتابة بشكل صريح ، فإن الأذونات تبسط العملية بشكل كبير.
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 حتى تتمكن من البقاء على رأس لعبتك. تأتي جميع الأذونات في الأذونات swiftui باسم افتراضي ، وصف ، وأيقونة Apple Native SF.
دعم إذن FaceID هو العمل قيد التقدم وقريبًا! إذا لم تجد إذنًا تحتاجه ، فتح مشكلة. والأفضل من ذلك ، قم ببناءه بنفسك وفتح طلب سحب ، يمكنك متابعة هذا الدليل خطوة بخطوة على إضافة أذونات جديدة. 
المساهمات موضع ترحيب هنا للمبرمجين وغير المرئيين على حد سواء. بغض النظر عن مستوى مهاراتك ، يمكنك أن تساهم في مجتمع Open Source Open المصدر. يرجى قراءة المساهمة.
إذا واجهت أي مشكلة ، أو لديك أي مخاوف ، أو أي تعليقات ، فيرجى عدم التردد في إخباري بذلك. افتح مناقشة أو إصدارًا أو أرسل لي بريدًا إلكترونيًا. كمطور ، أشعر بك عندما لا تفهم شيئًا في قاعدة الشفرة. أحاول التعليق والتوثيق بأفضل ما أستطيع ، ولكن إذا صادفت أي مشكلات ، فسوف يسعدني المساعدة بأي طريقة ممكنة.
sppermissions هي إلى حد كبير طبعة جديدة من Swiftui لمكتبة Swift الشهيرة sppermissions من قبل everabeis. تم إنشاء SpperMissions في البداية في عام 2017 ، واليوم على Github لديه أكثر من 4000 نجمة. يهدف الأذونات Sswiftui إلى تقديم مكتبة جميلة وقوية في Swiftui. إذا قمت star ★ My Project Projectsionswiftui ، فتأكد من مراجعة المشروع الأصلي sppermissions حيث قمت باستعارة تصميم واجهة المستخدم ، وبعض أجزاء من صفحة readme.md ، ومراجع رمز المصدر الهامة على طول الطريق.
تم إنشاء الأذنين SSWIFTUI بواسطة Jingwen (Jevon) MAO ومرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا