Info.plist Usage Description — bu nima, NS*UsageDescription kalitlari va sozlamalari

Muallif: IT Sectr Nashr etilgan: 2026-05-21 O'qish vaqti: 10 daq

Info.plist Usage Description — iOS ilovasining Info.plist faylidagi majburiy kalitlar bo'lib, ular tizim funksiyalariga: kameraga, mikrofonga, geolokatsiyaga, foto albomiga va boshqalarga kirish so'ralganda foydalanuvchiga ko'rsatiladigan matnni o'z ichiga oladi. Har bir bunday kalit NS*UsageDescription prefiksiga ega va kirish so'rovi sababini tushuntiruvchi qatorni taqdim etadi. Apple Information Property List Guide ga ko'ra, so'ralgan resurs uchun kalitning yo'qligi dasturning darhol ishdan chiqishiga olib keladi.

Asosiy ma'lumotlar

  • NS*UsageDescription — iOS tizim funksiyalariga kirish sababi matni bilan Info.plist kalitlari
  • Majburiylik — har bir kirish so'rovi tegishli kalitni talab qiladi, aks holda dastur ishdan chiqadi
  • 14+ kalit — kamera, mikrofon, geolokatsiya, foto, kontaktlar, taqvim va boshqalar
  • Matn — tavsif aniq bo'lishi, haqiqiy foydalanishga mos kelishi kerak
  • App Store — moderatorlar matnlarning haqiqiy funksionallikka muvofiqligini tekshiradi

Info.plist Usage Description nima?

Info.plist Usage Description — NS*UsageDescription prefiksli kalitlarning qator qiymatlari bo'lib, ular iOS ning himoyalangan resurslariga kirish so'ralganda tizim dialog oynasining matnini belgilaydi. Dastur birinchi marta foydalanuvchi ruxsatini talab qiladigan API-ni chaqirganda (masalan, kamera uchun AVCaptureDevice), iOS ushbu matn va ruxsat berish yoki rad etish tugmalari bilan dialog oynasini ko'rsatadi.

Tavsif matni dasturchining tizim dialog oynasida boshqarishi mumkin bo'lgan yagona narsadir. Dialog oynasining sarlavhasi “Dastur [resurs] ga kirishni xohlaydi” iOS tomonidan so'ralgan resurs turiga qarab avtomatik yaratiladi. Dasturchi sarlavhani, tugmalarni yoki tashqi ko'rinishni o'zgartira olmaydi — faqat tushuntirish matnini.

Usage Description iOS-da runtime permissions modeli bilan chambarchas bog'liq. Foydalanuvchi bir so'rov uchun ruxsat beradi, keyinchalik Sozlamalar orqali bekor qilinishi mumkin. Qayta so'ralganda dialog oynasi ko'rsatilmaydi — dastur ruxsat holatini tekshirishi va mos ravishda javob berishi kerak.

Apple tavsifda kirish so'rovining aniq sababini ko'rsatishni qat'iy tavsiya qiladi. Masalan, “Profil rasmlarini olish uchun” “Kameraga kirish uchun” dan yaxshiroq. Aniq matnlar foydalanuvchi ishonchini va berilgan ruxsatlar foizini oshiradi. Localytics (2023) ma'lumotlariga ko'ra, shaxsiy tavsiflar umumiy iboralar bilan solishtirganda rozilikni 15-25% ga oshiradi.

Usage Description va ATT o'rtasidagi farq

NS*UsageDescription ni ATT (App Tracking Transparency) bilan aralashtirmang. Usage Description tizim resurslariga (kamera, geolokatsiya, foto) kirish so'rovi, ATT esa kuzatish so'rovi (IDFA ga kirish). ATT alohida AppTrackingTransparency tizimidan va NS*UsageDescription ga tegishli bo'lmagan NSUserTrackingUsageDescription kalitidan foydalanadi.

Ularni birlashtirgan narsa — ikkalasi ham dastur o'zgartira olmaydigan matn bilan tizim dialog oynasidan foydalanadi. Farq shundaki, Usage Description resurslar darajasida, ATT esa qurilma identifikatori darajasida ishlaydi. NS*UsageDescription kalitlari iOS 6 da, ATT esa iOS 14.5 da joriy qilingan.

Turli iOS versiyalarida kalitlarning evolyutsiyasi

Har bir iOS relizi bilan Apple yangi himoyalangan resurslar va tegishli kalitlarni qo'shdi. iOS 6: kontaktlar, taqvim, eslatmalar, foto. iOS 7: mikrofon. iOS 8: HomeKit, Health. iOS 10: media kutubxona, Siri. iOS 11: NFC. iOS 14: kuzatish (ATT). iOS 17: buferga kirish (qo'shimcha tasdiqlash talab qiladi).

Muhim: agar dastur ma'lum bir iOS versiyasida joriy qilingan API-dan foydalansa, lekin minimal qo'llab-quvvatlanadigan versiya pastroq bo'lsa, kalit baribir majburiy. iOS kalit mavjudligini API-ning birinchi chaqiruvidan oldin tekshiradi, dastur ishlayotgan versiyadan qat'iy nazar.

Qaysi NS*UsageDescription kalitlari majburiy

Kalitlarning to'liq ro'yxati dastur qaysi funksiyalardan foydalanishiga bog'liq. Mobil ilovalarda eng ko'p talab qilinadigan 14 ta asosiy kalitni ko'rib chiqamiz.

Multimedia kirishi

NSCameraUsageDescription kaliti — AVCaptureDevice yoki .camera manbai bilan UIImagePickerController orqali kameraga kirishda majburiy. NSMicrophoneUsageDescription kaliti — AVAudioRecorder orqali ovoz yozishda yoki ovoz bilan video yozishda. Ikkala kalit ko'pincha birgalikda talab qilinadi, agar dastur video yozsa.

NSPhotoLibraryUsageDescription kaliti — PHPicker yoki UIImagePickerController orqali foydalanuvchining media kutubxonasidan foto va videolarni o'qishda. NSPhotoLibraryAddUsageDescription kaliti — agar dastur faqat foto saqlasa, lekin ularni o'qimasa. Birinchisi o'qish uchun kirishni, ikkinchisi faqat yozish uchun talab qiladi.

Geolokatsiya va navigatsiya

NSLocationWhenInUseUsageDescription kaliti — dastur faol bo'lganda (ekranda) geolokatsiyaga kirish. NSLocationAlwaysAndWhenInUseUsageDescription — har doim kirish (fon rejimi bilan). Agar doimiy kirish kerak bo'lsa, iOS ikkala kalitni talab qiladi: avval WhenInUse, keyin Always.

NSLocationTemporaryUsageDescription va NSLocationPreciseUsageDescription kalitlari — vaqtinchalik kirish yoki aniq geolokatsiya so'rovi uchun qo'shimcha kalitlar. Aniq joylashuv alohida ruxsat talab qiladi va foydalanuvchi faqat taxminiyni yoqishi mumkin.

KalitResursiOS dan boshlab mavjud
NSCameraUsageDescriptionKamera6.0
NSMicrophoneUsageDescriptionMikrofon7.0
NSPhotoLibraryUsageDescriptionMedia kutubxona (o'qish)6.0
NSPhotoLibraryAddUsageDescriptionMedia kutubxona (yozish)11.0
NFCReaderUsageDescriptionNFC11.0

Kontaktlar, taqvim va boshqa ma'lumotlar

NSContactsUsageDescription kaliti — CNContactStore orqali foydalanuvchi kontaktlariga kirish. NSCalendarsUsageDescription — taqvimga kirish, voqealarni o'qish va yaratish uchun. NSRemindersUsageDescription — eslatmalarga kirish. NSBluetoothAlwaysUsageDescription — fonda Bluetooth ga kirish (masalan, BLE qurilmalari uchun).

NSHealthShareUsageDescription kaliti — HealthKit ma'lumotlarini o'qish kirishi. NSHealthUpdateUsageDescription — HealthKit ga ma'lumot yozish kirishi. Agar dastur sog'liq sohasida ishlasa, ikkalasi majburiy. Apple HealthKit dan foydalanadigan dasturlarni diqqat bilan tekshiradi va foydalanish tavsifi funksionallikka mos kelmasa, rad etishi mumkin.

Tavsifni qanday to'g'ri shakllantirish

Usage Description dagi matn aniq, haqiqiy va qisqa bo'lishi kerak. Apple iboralar bo'yicha tavsiyalar beradi, moderatorlar esa ularning funksionallikka muvofiqligini tekshiradi.

Yaxshi tavsifning tuzilishi

Yaxshi tavsif uch qismdan iborat: dastur resurs bilan aniq nima qiladi, bu foydalanuvchiga nima uchun kerak va kirish berishdan foydalanuvchi qanday foyda oladi. Misol: “Profil rasmlarini olish va anketaga yuklash uchun”. Umumiy iboralardan qoching: “Dastur ishini yaxshilash uchun” kamera nima uchun kerakligini tushuntirmaydi.

Apple chalg'ituvchi tavsiflarni taqiqlaydi. Agar “Rasm olish uchun” deb yozilgan bo'lsa, lekin dastur shuningdek video yozsa, bu aldash deb hisoblanishi mumkin. Moderator dasturni rad etishi yoki tushuntirish talab qilishi mumkin. iOS 17 da Apple avtomatik tekshirishni qo'shdi: tavsif so'ralgan resursga mos kalit so'zlarni o'z ichiga olishi kerak.

Mahalliylashtirish: tavsif dastur qo'llab-quvvatlaydigan barcha tillarga tarjima qilinishi kerak. Agar dastur 10 tilda mavjud bo'lsa, har bir Usage Description kaliti Localizable.strings yoki InfoPlist.strings fayllarida tarjimalarga ega bo'lishi kerak. Apple Info.plist kalitlarini mahalliylashtirish uchun InfoPlist.strings dan foydalanishni tavsiya qiladi.

Yomon va yaxshi misollar

  • Yomon: “Kameraga kirish talab qilinadi” — nima uchunligini tushuntirmaydi
  • Yaxshi: “To'lov paytida QR kodlarni skanerlash uchun” — aniq va tushunarli
  • Yomon: “Joylashuvni aniqlash uchun” — noaniq
  • Yaxshi: “Xaritada eng yaqin restoranlarni topish uchun” — qiymatni ko'rsatadi
  • Yomon: “Xizmatni yaxshilash uchun” — ma'lumotli emas
  • Yaxshi: “Mahsulot haqidagi sharhda rasm yuklash uchun” — aniq harakat

InfoPlist.strings orqali mahalliylashtirish

Usage Description ni mahalliylashtirish uchun Info.plist ni har bir til uchun takrorlash shart emas. Har bir til katalogida InfoPlist.strings faylini yarating va kalit qiymatlarini belgilang. iOS dialog oynasini ko'rsatishda avtomatik ravishda tegishli tildan foydalanadi. Xcode 14 versiyasidan boshlab Info.plist uchun asosiy mahalliylashtirishni qo'llab-quvvatlaydi.

xml
<!-- InfoPlist.strings (Russian) -->
"NSCameraUsageDescription" =
    "QR kodlarni skanerlash uchun";
"NSPhotoLibraryUsageDescription" =
    "Profilga rasmlarni yuklash uchun";
"NSLocationWhenInUseUsageDescription" =
    "Xaritada eng yaqin do'konlarni ko'rsatish uchun";

Amalga oshirish: kod va sozlamalar

Usage Description ni to'g'ri amalga oshirish Info.plist ga kalitlarni qo'shish, kodda ruxsat holatini tekshirish va rad etishni qayta ishlashni o'z ichiga oladi.

Xcode orqali kalitlarni qo'shish

Xcode da Info.plist ni oching, qator ustiga keltiring va “+” tugmasini bosing. Kalit nomini kiriting (masalan, NSCameraUsageDescription) va tavsif qatorini belgilang. Xcode kalit nomlarini avtomatik to'ldiradi, bu xato riskini kamaytiradi. Qo'shgandan so'ng loyihani qayta quring va kalitning yakuniy binar faylda ko'rinishini tekshiring.

Muhim: kalitlar katta-kichik harfga sezgir. NSCameraUsageDescription — to'g'ri, NSCamerausagedescription — xato. Noto'g'ri kalit e'tiborga olinmaydi va API chaqiruvida dastur ishdan chiqadi. Xatolarni oldini olish uchun Apple hujjatlaridan nusxa ko'chirish yoki Xcode ning avtomatik to'ldirishidan foydalaning.

swift
import AVFoundation
import Photos

final class PermissionManager {
    static func checkCameraPermission() {
        let status = AVCaptureDevice.authorizationStatus(for: .video)
        switch status {
        case .notDetermined:
            AVCaptureDevice.requestAccess(for: .video) { granted in
                print("Camera access: \(granted)")
            }
        case .denied:
            print("Camera access denied")
        case .authorized:
            print("Camera access authorized")
        @unknown default:
            break
        }
    }

    static func requestPhotoLibraryAccess() {
        PHPhotoLibrary.requestAuthorization { status in
            print("Photo library status: \(status.rawValue)")
        }
    }
}

Kirishni rad etishni qayta ishlash

Agar foydalanuvchi kirishni rad etsa, dastur tizim dialog oynasini qayta chaqirmasligi kerak — bu mumkin emas. Buning o'rniga Sozlamalar orqali kirishni qanday yoqishni tushuntiruvchi ma'lumot ekrani va “Sozlamalarni ochish” tugmasini (UIApplicationOpenSettingsURLString) ko'rsating. Bu amaliyot foydalanuvchi tajribasini yaxshilaydi va foydalanuvchining kirishni yoqish ehtimolini oshiradi.

Rad etishdan so'ng darhol kirishni yoqish so'rovi bilan alert ko'rsatmang — foydalanuvchiga bu funksiya nima uchun kerak bo'lishi mumkinligini tushunishga imkon bering. Ruxsat talab qiladigan funksiyadan foydalanishga urinishda tushuntirishni ko'rsatish yaxshiroq. UX Movement (2023) rad etishdan 2-3 seans o'tgach tushuntirish ekranini ko'rsatishni tavsiya qiladi.

swift
func showSettingsAlert(for feature: String) {
    let alert = UIAlertController(
        title: "Kirish: \(feature)",
        message: "Sozlamalarda ruxsat bering, "
            + "bu funksiyadan foydalanish uchun",
        preferredStyle: .alert
    )
    alert.addAction(UIAlertAction(
        title: "Sozlamalarni ochish",
        style: .default
    ) { _ in
        if let url = URL(string: UIApplication.openSettingsURLString) {
            UIApplication.shared.open(url)
        }
    })
    alert.addAction(UIAlertAction(
        title: "Hozir emas", style: .cancel
    ))
    UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true)
}

Usage Description ko'rsatilmasa nima bo'ladi

Majburiy Usage Description kalitining yo'qligi tegishli API-ning birinchi chaqiruvida dasturning darhol ishdan chiqishiga olib keladi. Bu Xcode ogohlantirishi emas, balki konsolga “This app has crashed because it attempted to access privacy-sensitive data without a usage description” xabari bilan NSInvalidArgumentException istisnosi bo'lgan runtime crash dir.

Kalitsiz ish vaqti xatti-harakati

iOS himoyalangan resurs uchun API-ning birinchi chaqiruvida Info.plist da NS*UsageDescription kalitining mavjudligini tekshiradi. Kalit bo'lmasa, tizim darhol dasturni SIGABRT signali bilan tugatadi. Bu hatto tuzatish moslamalarida ham sodir bo'ladi — Xcode jurnalda istisnoni ko'rsatadi, lekin tuzatuvchi uni to'xtash nuqtasi sifatida tutmaydi.

Ishdan chiqish haqiqiy qurilmalarda va simulyatorda takrorlanadi. Buning oldini olishning yagona usuli — API chaqiruvidan oldin kalitni qo'shish. Xcode statik analizatori har doim kalit yo'qligi haqida ogohlantirmaydi, ayniqsa API uchinchi tomon SDK lari orqali chaqirilsa. TestFlight sinovchilari ham ishdan chiqishni ko'radi, bu salbiy sharhlarga olib kelishi mumkin.

iOS 17+ bilan maxsus holat: Apple buferga (UIPasteboard) kirish uchun qo'shimcha tekshirishni joriy qildi. Agar dastur foydalanuvchining aniq harakatisiz buferni o'qisa, iOS Usage Description kaliti mavjud bo'lsa ham, ogohlantirish bannerini ko'rsatadi. Bufer uchun alohida kalit talab qilinmaydi, lekin Apple avtomatik o'qishni minimallashtirishni tavsiya qiladi.

App Store ko'rib chiqishidagi xatolar

Ish vaqti ishdan chiqishidan tashqari, kalitning yo'qligi dasturni moderatsiya paytida rad etilishiga sabab bo'lishi mumkin. Apple ko'rib chiqish bosqichida Info.plist ni tekshiradi va tegishli kalitlarsiz API chaqiruvlarini aniqlasa, build ni rad etishi mumkin. Xcode arxivlashni bloklamaydi, lekin App Store Connect binar faylni qayta ishlashda xato qaytarishi mumkin.

Agar dastur resursdan to'g'ridan-to'g'ri foydalanmasa, lekin uchinchi tomon SDK si buni qilsa (masalan, analitika SDK si IDFA ni talab qilsa), dasturchi baribir tegishli kalitni qo'shishi kerak. Apple binar fayldagi barcha API chaqiruvlarini, shu jumladan statik va dinamik kutubxonalar kodini tekshiradi. “Missing Info.plist key” xatosi yangilanishlarni rad etishning eng keng tarqalgan sabablaridan biridir.

Tez-tez beriladigan savollar

Dastur API dan bevosita foydalanmasa, kalit kerakmi?

Ha, agar uchinchi tomon SDK si resursga (kamera, geolokatsiya, foto) kirish API sini chaqirsa, kalit majburiy. iOS butun binar faylni, shu jumladan bog'liqliklarni tekshiradi va kalit bo'lmaganda dasturni ishdan chiqaradi.

Bitta kalitni bir nechta API uchun ishlatish mumkinmi?

Yo'q, har bir himoyalangan resurs alohida kalit talab qiladi. Masalan, NSCameraUsageDescription NSMicrophoneUsageDescription ni almashtirmaydi. Tizim har bir API chaqiruvida aniq kalitni nomi bo'yicha qidiradi.

Foydalanuvchi kirishni rad etsa nima qilish kerak?

Sozlamalar -> Dastur orqali kirishni qanday yoqishni tushuntiruvchi ekranni ko'rsating va dasturning sozlamalarini ochish uchun tugmani taklif qiling. Tizim dialog oynasini dasturiy ravishda qayta chaqirib bo'lmaydi.

Usage Description ni qanday mahalliylashtirish mumkin?

Har bir til uchun InfoPlist.strings faylini yarating va tarjimalarni belgilang. iOS dialog oynasini ko'rsatishda avtomatik ravishda qurilma tilidan foydalanadi. Xcode shuningdek Info.plist ning asosiy mahalliylashtirishini qo'llab-quvvatlaydi.

Nega dastur simulyatorda kalitsiz ishdan chiqadi?

iOS simulyatori Usage Description tekshirishni ham o'z ichiga olgan holda qurilma xatti-harakatini to'liq takrorlaydi. Kalit bo'lmasa, simulyator ham dasturni istisno bilan tugatadi. Bu tuzatish uchun kutilgan xatti-harakatdir.

Xulosa

  • NS*Usage Description — kameraga, geolokatsiyaga, kontaktlarga va boshqa resurslarga kirish uchun majburiy Info.plist kalitlari
  • Runtime crash — kalitning yo'qligi API chaqiruvida dasturning darhol tugatilishiga olib keladi
  • 14+ kalit — har bir himoyalangan resurs noyob nom bilan alohida kalit talab qiladi
  • Mahalliylashtirish — tavsiflarni dasturning barcha tillariga tarjima qilish uchun InfoPlist.strings dan foydalaning
  • Aniqlik — matn umumiy maqsadni emas, balki kirishning aniq sababini tushuntirishi kerak
  • SDK — uchinchi tomon SDK lari chaqiradigan API larni hisobga oling va ular uchun kalitlar qo'shing
  • Arxivlashdan oldin barcha kalitlarning mavjudligini tekshiring va simulyatorda turli kirish stsenariylari bilan sinab ko'ring

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing