Maxfiylik va ruxsatlar


ULASHISH

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.openSettingsURLString
  • UIApplication.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, NSMicrophoneUsageDescription
  • NSPhotoLibraryUsageDescription, NSPhotoLibraryAddUsageDescription
  • NSLocationWhenInUseUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescription
  • NSContactsUsageDescription, NSCalendarsUsageDescription, NSRemindersUsageDescription
  • NSBluetoothAlwaysUsageDescription, 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!