PermissionsSwiftUI menampilkan dan menangani izin di SwiftUi. Ini sebagian besar terinspirasi oleh sppermissions. UI sangat dapat disesuaikan dan menyerupai gaya Apple . Jika Anda menyukai proyek ini, silakan star ★ .

IzinswiftUi terlihat sama cantiknya dengan ☀️Light dan? mode gelap.
onAppear dan onDisappear overrideAnda dapat menginstal izinSwiftUi ke proyek XCODE Anda melalui SPM. Untuk mempelajari lebih lanjut tentang SPM, klik di sini
Untuk Xcode 13, navigasikan ke file → tambahkan paket
https://github.com/jevonmao/PermissionsSwiftUI ) dan klik Next .(Anda tidak perlu menambahkan corepermisionsswiftUi atau izinswiftUi)

Anda juga dapat memasang izinswiftUi dengan cocoapods. Tambahkan pod 'PermissionsSwiftUI' di podfile Anda:
platform :ios , '14.0'
target 'test abstract' do
use_frameworks!
pod 'PermissionsSwiftUI'
end Sebelum Anda mulai, silakan
star ★Repositori ini. Bintang Anda adalah motivasi terbesar saya untuk menarik sepanjang malam dan mempertahankan proyek open-source ini.
v1.4 ada di sini! Jika Anda mengalami masalah, silakan periksa panduan migrasi yang dirancang untuk membantu pengembang menyelesaikan penyusutan dan pembaruan API.
Untuk menggunakan izinswiftUi, cukup tambahkan pengubah JMModal ke tampilan apa pun:
. JMModal ( showModal : $showModal , for : [ . locationAlways , . photo , . microphone ] ) ` Lewati Binding<Bool> untuk menunjukkan tampilan modal, dan tambahkan izin apa pun yang ingin Anda tunjukkan. Misalnya:
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 ] ) Mirip dengan JMPermissions sebelumnya, Anda harus lulus dalam Binding<Bool> untuk menunjukkan tampilan, dan menambahkan izin apa pun yang ingin Anda tunjukkan. Untuk dengan cepat melirik ke semua izin kustomisasi dan konfigurasi, lihat lembar cheat!
Untuk menyesuaikan teks izin, gunakan pengubah setPermissionComponent() misalnya, Anda dapat mengubah judul, deskripsi, dan ikon gambar:
. setPermissionComponent ( for : . camera ,
image : AnyView ( Image ( systemName : " camera.fill " ) ) ,
title : " Camcorder " ,
description : " App needs to record videos " )dan hasilnya:

setPermissionComponent ( for : . tracking , title : " Trackers " ) setPermissionComponent ( for : . tracking , description : " Tracking description " )Catatan:
setPermissionComponent pada tampilan level root Anda, setelah pengubah JMPermissions Parameter image menerima WeView , jadi jangan ragu untuk menggunakan simbol SF atau aset khusus Anda:
. setPermissionComponent ( for : . camera ,
image : AnyView ( Image ( " Your-cool-image " ) )Bahkan pandangan swiftUi penuh akan berhasil?:
. setPermissionComponent ( for : . camera ,
image : AnyView ( YourCoolView ( ) )Anda dapat menggunakan teks dan ikon khusus untuk semua izin yang didukung, dengan satu baris kode.
Untuk menyesuaikan judul header, gunakan Modifier changeHeaderTo : 
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . calendar ] )
. changeHeaderTo ( " App Permissions " ) Untuk menyesuaikan deskripsi header, gunakan Modifier changeHeaderDescriptionTo :
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeHeaderDescriptionTo ( " Instagram need certain permissions in order for all the features to work. " ) Untuk menyesuaikan deskripsi bawah, gunakan Modifier changeBottomDescriptionTo :
. JMPermissions ( showModal : $showModal , for : [ . camera , . location , . photo ] )
. changeBottomDescriptionTo ( " If not allowed, you have to enable permissions in settings " )onAppear dan onDisappear override Anda mungkin merasa sangat berguna untuk menjalankan kode Anda, atau melakukan beberapa tindakan pembaruan ketika tampilan izinsswiftUi muncul dan menghilang.
Anda dapat melakukan beberapa tindakan ketika izinswiftUi tampilan muncul atau menghilang oleh:
. JMPermissions ( showModal : $showModal , for : [ . locationAlways , . photo , . microphone ] , onAppear : { } , onDisappear : { } ) Parameter penutupan onAppear dan onDisappear akan dieksekusi setiap kali izin .
Penutupan pengubah tampilan yang sama untuk perubahan status tersedia untuk pengubah JMAlert :
. JMAlert ( showModal : $showModal ,
for : [ . locationAlways , . photo ] ,
onAppear : { print ( " Appeared " ) } ,
onDisappear : { print ( " Disappeared " ) } ) IzinswiftUi secara default akan secara otomatis memeriksa status otorisasi. Ini hanya akan menunjukkan izin yang saat ini notDetermined . (Sistem iOS mencegah pengembang dari meminta izin yang ditolak. Izin yang diizinkan juga akan diabaikan dengan izinSwiftUi). Jika semua izin diizinkan atau ditolak, izinswiftUi tidak akan menunjukkan modal atau peringatan sama sekali. Untuk mengatur otorisasi pemeriksaan otomatis, gunakan parameter autoCheckAuthorization :
. JMModal ( showModal : $showModal , for : [ . camera ] , autoCheckAuthorization : false )hal yang sama berlaku untuk jmalert
. JMAlert ( showModal : $showModal , for : [ . camera ] , autoCheckAuthorization : false )IzinswiftUi secara default tidak akan memiliki perilaku penguburan otomatis. Anda dapat mengganti perilaku ini untuk membuatnya secara otomatis mengabaikan modal atau peringatan setelah pengguna mengizinkan item izin terakhir. (Semua izin harus diizinkan, jika ada yang ditolak, itu tidak akan disingkirkan secara otomatis).
. JMModal ( ... autoDismiss : Bool ) - > some View Lewati true atau false untuk memilih apakah akan secara otomatis mengabaikan tampilan.
Menggunakan kemampuan ImisionsWiftUi, pengembang dan desainer dapat menyesuaikan semua warna UI dengan fleksibilitas yang luar biasa. Anda dapat sepenuhnya mengkonfigurasi semua warna di semua negara dengan warna khusus Anda.
Untuk dengan mudah mengubah warna aksen:
. setAccentColor ( to : Color ( . sRGB , red : 56 / 255 , green : 173 / 255 ,
blue : 169 / 255 , opacity : 1 ) )Untuk mengubah warna primer (default apple blue) dan tersier (default apple red):
. setAccentColor ( toPrimary : Color ( . sRGB , red : 56 / 255 , green : 173 / 255 ,
blue : 169 / 255 , opacity : 1 ) ,
toTertiary : Color ( . systemPink ) ) 
️ .setAccentColor()dan.setAllowButtonColor()tidak boleh digunakan pada saat yang sama.
Untuk melepaskan kustomisasi penuh semua warna tombol di bawah semua negara bagian, Anda harus lulus di AllButtonColors struct:
. setAllowButtonColor ( to : . init ( buttonIdle : ButtonColor ( foregroundColor : Color ,
backgroundColor : Color ) ,
buttonAllowed : ButtonColor ( foregroundColor : Color ,
backgroundColor : Color ) ,
buttonDenied : ButtonColor ( foregroundColor : Color ,
backgroundColor : Color ) ) )Untuk informasi lebih lanjut mengenai metode di atas, referensi dokumentasi resmi.
IzinswiftUi akan secara default, mencegah pengguna menolak modal dan peringatan sebelum semua izin telah berinteraksi dengan. Ini berarti jika pengguna belum secara eksplisit menyangkal atau mengizinkan setiap izin yang ditunjukkan, mereka tidak akan dapat mengabaikan izin -izin. Ini membatasi perilaku pemecatan dapat ditimpa oleh var restrictModalDismissal: Bool atau var restrictAlertDismissal: Bool . Untuk menonaktifkan perilaku pembatasan pembatasan default:
. JMModal ( showModal : $show , for permis sions : [ . camera ] , restrictDismissal : false )Anda juga dapat mengonfigurasi dengan model:
let model : PermissionStore = {
var model = PermissionStore ( )
model . permissions = [ . camera ]
model . restrictModalDismissal = false
model . restrictAlertDismissal = false
return model
}
......
. JMModal ( showModal : $showModal , forModel : model )Tidak seperti semua izin lainnya, konfigurasi izin kesehatan sedikit berbeda. Karena Apple mengharuskan pengembang untuk secara eksplisit mengatur jenis baca dan menulis, izinswiftUi sangat menyederhanakan proses.
HKAccessStruktur HKAccess diperlukan saat menginisialisasi nilai terkait izin kesehatan. Ini merangkum izin jenis baca dan tulis untuk izin kesehatan.
Untuk mengatur dan menulis jenis kesehatan ( activeEnergyBurned digunakan sebagai contoh di sini):
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 ) ) ] )Untuk mengatur baca atau menulis secara individual:
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 ) ) ] )Anda juga dapat mengatur hanya tipe baca atau tulis:
let readTypes = Set ( [ HKSampleType . quantityType ( forIdentifier : . activeEnergyBurned ) ! ] )
. JMModal ( showModal : $showModal , for : [ . health ( categories : . init ( read : readTypes ) ) ] ) Sesuaikan warna aksen keseluruhan:
setAccentColor ( to : )
setAccentColor ( toPrimary : toTertiary : )Kustomisasi Judul:
changeHeaderTo ( _ : )Kustomisasi Deskripsi Teratas:
changeHeaderDescriptionTo ( _ : )Kustomisasi Deskripsi Bawah:
changeBottomDescriptionTo ( _ : )Kustomisasi setiap teks & gambar yang ditampilkan izin:
setPermissionComponent ( for : image : title : description : )
setPermissionComponent ( for : title : )
setPermissionComponent ( for : description : ) Kustomisasi allow Warna Tombol:
setAllowButtonColor ( to : )Secara otomatis memberhentikan setelah yang terakhir
autoDismiss: BoolJMModal dan JMAlertPeriksa otorisasi sebelum menunjukkan modal atau peringatan
autoCheckAuthorization: BoolMencegah penolakan sebelum semua izin berinteraksi
restrictDismissal: BoolLakukan sesuatu yang tepat sebelum tampilan muncul
onAppear: ( ) -> VoidLakukan sesuatu yang tepat sebelum tampilan menghilang
onDisappear: ( ( ) - > Void Berikut adalah daftar semua izin izin dukungan. Yup, bahkan izin tracking terbaru untuk iOS 14 sehingga Anda dapat tetap di atas permainan Anda. Semua izin dalam izinswiftUi hadir dengan nama default, deskripsi, dan ikon simbol SF asli Apple yang menakjubkan.
Dukungan untuk izin FaceID sedang dalam proses dan segera hadir! Jika Anda tidak menemukan izin yang Anda butuhkan, buka masalah. Bahkan lebih baik, bangun sendiri dan buka permintaan tarik, Anda dapat mengikuti panduan langkah demi langkah ini untuk menambahkan izin baru. 
Kontribusi dipersilakan di sini untuk coders dan non-coders. Tidak peduli apa tingkat keahlian Anda, Anda dapat berkontribusi tertentu pada komunitas open source yang diizinkan. Harap baca Contributing.md sebelum memulai, dan jika Anda ingin berkontribusi jenis izin iOS baru, pastikan untuk membaca panduan langkah demi langkah ini.
Jika Anda menghadapi masalah apa pun, memiliki masalah, atau komentar apa pun, jangan ragu untuk memberi tahu saya. Buka diskusi, masalah, atau email saya. Sebagai pengembang, saya merasa Anda ketika Anda tidak memahami sesuatu di basis kode. Saya mencoba berkomentar dan mendokumentasikan sebaik mungkin, tetapi jika Anda menemukan masalah apa pun, saya akan dengan senang hati membantu dengan cara apa pun yang saya bisa.
Sppermissions dalam jumlah besar pembuatan ulang SwiftUi dari Sppermisi Perpustakaan Swift yang terkenal oleh @Verabeis. Sppermissions awalnya dibuat pada tahun 2017, dan hari ini di GitHub memiliki lebih dari 4000 bintang. IzinswiftUi bertujuan untuk memberikan perpustakaan yang sama indah dan kuatnya di SwiftUi. Jika Anda star ★ Izin Proyek Saya yang Berlaku, pastikan untuk memeriksa sppermisi proyek asli di mana saya meminjam desain UI, beberapa bagian dari halaman readme.md, dan referensi kode sumber penting di sepanjang jalan.
IzinswiftUi dibuat oleh Jingwen (Jevon) Mao dan dilisensikan di bawah lisensi MIT