Maxfiylik va ruxsatlar
Maxfiylik va ruxsatlar
Foydalanish tavsiflarini (usage descriptions) Info.plist da e’lon qiling va himoyalangan resurslarga murojaat qilishdan oldin ruxsat so‘rang.
Kameraga kirish ruxsatini so‘rash
Ilovangizda kameraga kirish ruxsatini so‘rang.
Sintaksis:
AVCaptureDevice.authorizationStatus(for:)AVCaptureDevice.requestAccess(for:)
Misol
import SwiftUI
import AVFoundation
struct CameraPermissionDemo: View {
@State private var status = AVCaptureDevice.authorizationStatus(for: .video)
var body: some View {
VStack(spacing: 12) {
Text("Status: \(label(for: status))")
Button("Request Access") {
AVCaptureDevice.requestAccess(for: .video) { _ in
DispatchQueue.main.async {
status = AVCaptureDevice.authorizationStatus(for: .video)
}
}
}
}
.padding()
}
private func label(for s: AVAuthorizationStatus) -> String {
switch s { case .notDetermined: return "notDetermined"
case .denied: return "denied"
case .restricted: return "restricted"
case .authorized: return "authorized"
@unknown default: return "unknown" }
}
}
import SwiftUI
struct ContentView: View { var body: some View { CameraPermissionDemo() } }
import SwiftUI
@main
struct MyApp: App { var body: some Scene { WindowGroup { ContentView() } } }
Yuqoridagi misolda ruxsat so‘rash tugmasi va joriy holatni ko‘rsatuvchi yorliqqa ega oddiy kamera ruxsati so‘rovi ko‘rsatilgan.
Sozlamalarni ochish
Ilovaning sozlamalar sahifasini ilova ichidan oching.
Sintaksis:
UIApplication.openSettingsURLStringUIApplication.shared.canOpenURL(url)UIApplication.shared.open(url)
Misol
import SwiftUI
import UIKit
struct OpenSettingsDemo: View {
var body: some View {
VStack(spacing: 12) {
Text("Permission denied? Open Settings.")
Button("Open Settings") {
if let url = URL(string: UIApplication.openSettingsURLString),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}
}
}
.padding()
}
}
import SwiftUI
struct ContentView: View { var body: some View { OpenSettingsDemo() } }
import SwiftUI
@main
struct MyApp: App { var body: some Scene { WindowGroup { ContentView() } } }
Yuqoridagi misolda ilovaning sozlamalar sahifasini ilova ichidan ochadigan tugmaga ega oddiy sozlamalar sahifasi ko‘rsatilgan.
Info.plist’dagi foydalanish tavsiflari
Himoyalangan resurslarga (kamera, fotosuratlar, joylashuv, mikrofon va h.k.) murojaat qilganda Info.plist ga foydalanish tavsifini kiritishingiz shart (masalan, NSCameraUsageDescription).
Sintaksis:
NSCameraUsageDescription,NSMicrophoneUsageDescriptionNSPhotoLibraryUsageDescription,NSPhotoLibraryAddUsageDescriptionNSLocationWhenInUseUsageDescription,NSLocationAlwaysAndWhenInUseUsageDescriptionNSContactsUsageDescription,NSCalendarsUsageDescription,NSRemindersUsageDescriptionNSBluetoothAlwaysUsageDescription,NSMotionUsageDescription,NSFaceIDUsageDescription
Misol
NSCameraUsageDescription = "This app uses the camera to scan QR codes"
NSPhotoLibraryUsageDescription = "Select a profile picture"
NSLocationWhenInUseUsageDescription = "Find nearby stores"
Bu foydalanish tavsiflari ilovaning Settings (Sozlamalar) sahifasida ko‘rsatiladi.
Ruxsat so‘rash
Ma’lumotlarga murojaat qilishdan oldin bajarilish vaqtida ruxsat so‘rash uchun tegishli freymvorklardan foydalaning.
Sintaksis:
AVCaptureDevice.authorizationStatus(for:)AVCaptureDevice.requestAccess(for:)
Misol
import AVFoundation
let status = AVCaptureDevice.authorizationStatus(for: .video)
switch status {
case .notDetermined:
AVCaptureDevice.requestAccess(for: .video) { granted in /* handle */ }
case .denied, .restricted:
// Show instructions to enable in Settings
break
case .authorized:
// Proceed to use camera
break
@unknown default: break
}
Ushbu misol kameraga joriy ruxsat holatini tekshiradi, kerak bo‘lsa ruxsat so‘raydi va rad etilgan (denied) yoki cheklangan (restricted) holatlarni qayta ishlash yo‘lini ko‘rsatadi.
Maslahat: Har doim ruxsat nima uchun kerakligini tushuntiring va rad etilgan holatni muqobil yo‘llarni taklif qilish orqali muloyimlik bilan qayta ishlang.
Rad etilgan holatni qayta ishlash: sozlamalarga havola
Misol
import UIKit
if let url = URL(string: UIApplication.openSettingsURLString),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}
Boshqa keng tarqalgan ruxsatlar
Misol
import Photos
PHPhotoLibrary.requestAuthorization { status in /* handle */ }
import CoreLocation
class L: NSObject, CLLocationManagerDelegate {
let manager = CLLocationManager()
func ask() {
manager.requestWhenInUseAuthorization()
}
}
import AVFoundation
AVAudioSession.sharedInstance().requestRecordPermission { granted in /* handle */ }
import Contacts
let store = CNContactStore()
store.requestAccess(for: .contacts) { granted, error in /* handle */ }
Testlash bo‘yicha maslahatlar: Simulator’da maxfiylik ruxsatlarini qayta tiklang (Device → Erase All Content and Settings) yoki test qurilmalaridan foydalaning. Jarayoningiz har bir holatni qayta ishlashiga ishonch hosil qiling: .notDetermined, .denied, .authorized va freymvorkka xos holatlar.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
