Info.plist Usage Description — यह क्या है, NS*UsageDescription कुंजियाँ और सेटअप

लेखक: IT Sectr प्रकाशित: 2026-05-21 पढ़ने का समय: 10 मिनट

Info.plist Usage Description iOS ऐप के Info.plist फ़ाइल में अनिवार्य कुंजियाँ हैं जिनमें सिस्टम सुविधाओं: कैमरा, माइक्रोफ़ोन, जियोलोकेशन, फ़ोटो एल्बम और अन्य तक पहुँच का अनुरोध करते समय उपयोगकर्ता को दिखाया जाने वाला टेक्स्ट होता है। प्रत्येक ऐसी कुंजी में NS*UsageDescription उपसर्ग होता है और पहुँच अनुरोध का कारण बताने वाली एक स्ट्रिंग प्रदान करती है। Apple Information Property List Guide के अनुसार, अनुरोधित संसाधन के लिए कुंजी की अनुपस्थिति ऐप को तुरंत क्रैश कर देती है।

मुख्य बातें

  • NS*UsageDescription — iOS सिस्टम सुविधाओं तक पहुँच के कारण के टेक्स्ट वाली Info.plist कुंजियाँ
  • अनिवार्यता — प्रत्येक पहुँच अनुरोध के लिए संबंधित कुंजी आवश्यक है, अन्यथा ऐप क्रैश हो जाता है
  • 14+ कुंजियाँ — कैमरा, माइक्रोफ़ोन, जियोलोकेशन, फ़ोटो, संपर्क, कैलेंडर और अन्य
  • टेक्स्ट — विवरण विशिष्ट होना चाहिए और वास्तविक उपयोग से मेल खाना चाहिए
  • App Store — समीक्षक वास्तविक कार्यक्षमता से टेक्स्ट की संगति की जाँच करते हैं

Info.plist Usage Description क्या है?

Info.plist Usage Description NS*UsageDescription उपसर्ग वाली कुंजियों के स्ट्रिंग मान हैं जो iOS के संरक्षित संसाधनों तक पहुँच का अनुरोध करते समय सिस्टम डायलॉग का टेक्स्ट परिभाषित करते हैं। जब कोई ऐप पहली बार किसी API को कॉल करता है जिसके लिए उपयोगकर्ता की अनुमति आवश्यक होती है (उदाहरण के लिए, कैमरे के लिए AVCaptureDevice), iOS इस टेक्स्ट और अनुमति/अस्वीकार बटन के साथ एक डायलॉग दिखाता है।

विवरण टेक्स्ट एकमात्र ऐसी चीज़ है जिसे डेवलपर सिस्टम डायलॉग में नियंत्रित कर सकता है। डायलॉग का शीर्षक “<ऐप नाम> [संसाधन] तक पहुँच चाहता है” iOS द्वारा अनुरोधित संसाधन प्रकार के आधार पर स्वचालित रूप से उत्पन्न होता है। डेवलपर शीर्षक, बटन या स्वरूप नहीं बदल सकता — केवल व्याख्यात्मक टेक्स्ट।

Usage Description iOS में रनटाइम अनुमतियों मॉडल से निकटता से जुड़ा है। उपयोगकर्ता एक अनुरोध के लिए अनुमति देता है, जिसे बाद में सेटिंग्स के माध्यम से रद्द किया जा सकता है। बाद के अनुरोध पर, डायलॉग फिर से नहीं दिखाया जाता — ऐप को अनुमति की स्थिति जाँचनी चाहिए और तदनुसार प्रतिक्रिया देनी चाहिए।

Apple दृढ़ता से अनुशंसा करता है कि विवरण में पहुँच अनुरोध का एक विशिष्ट कारण निर्दिष्ट किया जाए। उदाहरण के लिए, “प्रोफ़ाइल फ़ोटो लेने के लिए” “कैमरे तक पहुँचने के लिए” से बेहतर है। विशिष्ट टेक्स्ट उपयोगकर्ता का विश्वास और अनुदान दर बढ़ाते हैं। Localytics (2023) के अनुसार, कस्टम विवरण सामान्य शब्दों की तुलना में सहमति 15-25% बढ़ाते हैं।

Usage Description और ATT में अंतर

NS*UsageDescription को ATT (App Tracking Transparency) के साथ भ्रमित न करें। Usage Description सिस्टम संसाधनों (कैमरा, जियोलोकेशन, फ़ोटो) तक पहुँच का अनुरोध है, जबकि ATT ट्रैकिंग (IDFA तक पहुँच) का अनुरोध है। ATT एक अलग फ्रेमवर्क AppTrackingTransparency और NSUserTrackingUsageDescription कुंजी का उपयोग करता है, जो NS*UsageDescription का हिस्सा नहीं है।

दोनों में समानता यह है कि दोनों सिस्टम डायलॉग का उपयोग करते हैं जिसमें टेक्स्ट होता है जिसे ऐप संशोधित नहीं कर सकता। अंतर यह है कि Usage Description संसाधन स्तर पर काम करता है, जबकि ATT डिवाइस पहचानकर्ता स्तर पर काम करता है। NS*UsageDescription कुंजियाँ iOS 6 में शुरू की गईं, ATT — iOS 14.5 में।

विभिन्न iOS संस्करणों में कुंजियों का विकास

प्रत्येक iOS रिलीज़ के साथ, Apple ने नए संरक्षित संसाधन और संबंधित कुंजियाँ जोड़ीं। iOS 6: संपर्क, कैलेंडर, रिमाइंडर, फ़ोटो। iOS 7: माइक्रोफ़ोन। iOS 8: HomeKit, स्वास्थ्य। iOS 10: मीडिया लाइब्रेरी, Siri। iOS 11: NFC। iOS 14: ट्रैकिंग (ATT)। iOS 17: क्लिपबोर्ड एक्सेस (अतिरिक्त पुष्टि आवश्यक)।

महत्वपूर्ण: यदि ऐप किसी विशिष्ट iOS संस्करण में शुरू की गई API का उपयोग करता है लेकिन न्यूनतम समर्थित संस्करण कम है, तो कुंजी अभी भी अनिवार्य है। iOS पहले API कॉल से पहले कुंजी की उपस्थिति की जाँच करता है, भले ही ऐप किस संस्करण पर चल रहा हो।

कौन सी NS*UsageDescription कुंजियाँ अनिवार्य हैं

कुंजियों की पूरी सूची इस बात पर निर्भर करती है कि ऐप किन सुविधाओं का उपयोग करता है। आइए मोबाइल ऐप्स में सबसे अधिक आवश्यक 14 मुख्य कुंजियों की समीक्षा करें।

मीडिया एक्सेस

NSCameraUsageDescription कुंजी AVCaptureDevice या .camera स्रोत के साथ UIImagePickerController के माध्यम से कैमरे तक पहुँचने पर अनिवार्य है। NSMicrophoneUsageDescription कुंजी AVAudioRecorder के माध्यम से ऑडियो रिकॉर्ड करने या ध्वनि के साथ वीडियो शूट करने पर आवश्यक है। यदि ऐप वीडियो रिकॉर्ड करता है तो अक्सर दोनों कुंजियाँ एक साथ आवश्यक होती हैं।

NSPhotoLibraryUsageDescription कुंजी PHPicker या UIImagePickerController के माध्यम से उपयोगकर्ता की मीडिया लाइब्रेरी से फ़ोटो और वीडियो पढ़ने पर उपयोग की जाती है। NSPhotoLibraryAddUsageDescription कुंजी का उपयोग तब किया जाता है जब ऐप केवल फ़ोटो सहेजता है लेकिन उन्हें पढ़ता नहीं है। पहली पढ़ने की अनुमति माँगती है, दूसरी — केवल लिखने की।

जियोलोकेशन और नेविगेशन

NSLocationWhenInUseUsageDescription कुंजी ऐप के सक्रिय होने पर (स्क्रीन पर) जियोलोकेशन एक्सेस प्रदान करती है। NSLocationAlwaysAndWhenInUseUsageDescription हमेशा एक्सेस प्रदान करती है (बैकग्राउंड मोड सहित)। यदि हमेशा एक्सेस आवश्यक है तो iOS को दोनों कुंजियों की आवश्यकता होती है: पहले WhenInUse, फिर Always।

NSLocationTemporaryUsageDescription और NSLocationPreciseUsageDescription कुंजियाँ अस्थायी पहुँच या सटीक जियोलोकेशन का अनुरोध करने के लिए अतिरिक्त कुंजियाँ हैं। सटीक स्थान के लिए अलग अनुमति आवश्यक है, और उपयोगकर्ता केवल अनुमानित स्थान सक्षम कर सकता है।

कुंजीसंसाधनiOS से उपलब्ध
NSCameraUsageDescriptionकैमरा6.0
NSMicrophoneUsageDescriptionमाइक्रोफ़ोन7.0
NSPhotoLibraryUsageDescriptionमीडिया लाइब्रेरी (पढ़ना)6.0
NSPhotoLibraryAddUsageDescriptionमीडिया लाइब्रेरी (लिखना)11.0
NFCReaderUsageDescriptionNFC11.0

संपर्क, कैलेंडर और अन्य डेटा

NSContactsUsageDescription कुंजी CNContactStore के माध्यम से उपयोगकर्ता के संपर्कों तक पहुँच प्रदान करती है। NSCalendarsUsageDescription ईवेंट पढ़ने और बनाने के लिए कैलेंडर एक्सेस प्रदान करती है। NSRemindersUsageDescription रिमाइंडर तक पहुँच प्रदान करती है। NSBluetoothAlwaysUsageDescription बैकग्राउंड में Bluetooth एक्सेस प्रदान करती है (उदाहरण के लिए, BLE डिवाइस के लिए)।

NSHealthShareUsageDescription कुंजी HealthKit डेटा पढ़ने का एक्सेस प्रदान करती है। NSHealthUpdateUsageDescription HealthKit में डेटा लिखने का एक्सेस प्रदान करती है। यदि ऐप स्वास्थ्य डेटा के साथ काम करता है तो दोनों आवश्यक हैं। Apple HealthKit का उपयोग करने वाले ऐप्स की सावधानीपूर्वक समीक्षा करता है और यदि उपयोग विवरण कार्यक्षमता से मेल नहीं खाता है तो ऐप को अस्वीकार कर सकता है।

विवरण सही ढंग से कैसे लिखें

Usage Description में टेक्स्ट विशिष्ट, सत्य और संक्षिप्त होना चाहिए। Apple शब्दों पर सिफारिशें प्रदान करता है, और समीक्षक जाँचते हैं कि वे कार्यक्षमता से मेल खाते हैं।

अच्छे विवरण की संरचना

एक अच्छे विवरण में तीन भाग होते हैं: ऐप संसाधन के साथ वास्तव में क्या करता है, उपयोगकर्ता को इसकी आवश्यकता क्यों है, और पहुँच प्रदान करने से उपयोगकर्ता को क्या लाभ मिलता है। उदाहरण: “प्रोफ़ाइल फ़ोटो लेने और उन्हें आपकी प्रोफ़ाइल पर अपलोड करने के लिए।” सामान्य वाक्यांशों से बचें: “ऐप प्रदर्शन सुधारने के लिए” यह नहीं बताता कि कैमरे की आवश्यकता क्यों है।

Apple भ्रामक विवरणों को प्रतिबंधित करता है। यदि यह “फ़ोटो लेने के लिए” लिखा है लेकिन ऐप वीडियो भी रिकॉर्ड करता है, तो इसे भ्रामक माना जा सकता है। समीक्षक ऐप को अस्वीकार कर सकता है या स्पष्टीकरण का अनुरोध कर सकता है। iOS 17 में, Apple ने स्वचालित सत्यापन जोड़ा: विवरण में अनुरोधित संसाधन से संबंधित कीवर्ड होने चाहिए।

स्थानीयकरण: विवरण का ऐप द्वारा समर्थित सभी भाषाओं में अनुवाद होना चाहिए। यदि ऐप 10 भाषाओं में उपलब्ध है, तो प्रत्येक Usage Description कुंजी के Localizable.strings या InfoPlist.strings फ़ाइलों में अनुवाद होने चाहिए। Apple Info.plist कुंजियों के स्थानीयकरण के लिए InfoPlist.strings का उपयोग करने की अनुशंसा करता है।

खराब और अच्छे उदाहरण

  • खराब: “कैमरा एक्सेस चाहिए” — कारण नहीं बताता
  • अच्छा: “भुगतान करते समय QR कोड स्कैन करने के लिए” — विशिष्ट और स्पष्ट
  • खराब: “स्थान निर्धारित करने के लिए” — अस्पष्ट
  • अच्छा: “मानचित्र पर निकटतम रेस्तराँ खोजने के लिए” — मूल्य दिखाता है
  • खराब: “सेवा सुधारने के लिए” — जानकारीहीन
  • अच्छा: “उत्पाद समीक्षा में फ़ोटो अपलोड करने के लिए” — विशिष्ट क्रिया

InfoPlist.strings के माध्यम से स्थानीयकरण

Usage Description को स्थानीयकृत करने के लिए, आपको प्रत्येक भाषा के लिए Info.plist को डुप्लिकेट करने की आवश्यकता नहीं है। प्रत्येक भाषा निर्देशिका में InfoPlist.strings फ़ाइल बनाएँ और कुंजी मान निर्दिष्ट करें। iOS डायलॉग दिखाते समय स्वचालित रूप से सही भाषा का उपयोग करेगा। Xcode संस्करण 14 से Info.plist के लिए बेस स्थानीयकरण का समर्थन करता है।

xml
<!-- InfoPlist.strings (Russian) -->
"NSCameraUsageDescription" =
    "QR कोड स्कैन करने के लिए";
"NSPhotoLibraryUsageDescription" =
    "प्रोफ़ाइल में इमेज अपलोड करने के लिए";
"NSLocationWhenInUseUsageDescription" =
    "मानचित्र पर निकटतम स्टोर दिखाने के लिए";

कार्यान्वयन: कोड और सेटिंग्स

Usage Description के सही कार्यान्वयन में Info.plist में कुंजियाँ जोड़ना, कोड में अनुमति की स्थिति जाँचना और अस्वीकार को संभालना शामिल है।

Xcode के माध्यम से कुंजियाँ जोड़ना

Xcode में, Info.plist खोलें, एक पंक्ति पर होवर करें और “+” पर क्लिक करें। कुंजी का नाम दर्ज करें (उदाहरण के लिए, NSCameraUsageDescription) और विवरण स्ट्रिंग निर्दिष्ट करें। Xcode कुंजी नामों को ऑटो-कम्पलीट करता है, जिससे टाइपो का जोखिम कम होता है। जोड़ने के बाद, प्रोजेक्ट को पुनर्निर्माण करें और सत्यापित करें कि कुंजी अंतिम बाइनरी में दिखाई देती है।

महत्वपूर्ण: कुंजियाँ केस-सेंसिटिव हैं। NSCameraUsageDescription सही है, NSCamerausagedescription गलती है। गलत कुंजी को अनदेखा किया जाता है, और API कॉल करने पर ऐप क्रैश हो जाएगा। Apple दस्तावेज़ीकरण से कॉपी करें या टाइपो से बचने के लिए Xcode ऑटो-कम्पलीट का उपयोग करें।

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)")
        }
    }
}

पहुँच अस्वीकार को संभालना

यदि उपयोगकर्ता पहुँच अस्वीकार करता है, तो ऐप को सिस्टम डायलॉग फिर से कॉल नहीं करना चाहिए — यह संभव नहीं है। इसके बजाय, यह समझाने वाली एक सूचना स्क्रीन दिखाएँ कि सेटिंग्स के माध्यम से एक्सेस कैसे सक्षम करें, “सेटिंग्स खोलें” बटन (UIApplicationOpenSettingsURLString) के साथ। यह अभ्यास उपयोगकर्ता अनुभव और उपयोगकर्ता द्वारा एक्सेस सक्षम करने की संभावना में सुधार करता है।

अस्वीकार के तुरंत बाद एक्सेस सक्षम करने के लिए कहने वाला अलर्ट न दिखाएँ — उपयोगकर्ता को यह समझने का समय दें कि उन्हें इस सुविधा की आवश्यकता क्यों हो सकती है। इस कार्यक्षमता का उपयोग करने का प्रयास करते समय स्पष्टीकरण दिखाना बेहतर है जिसके लिए इस अनुमति की आवश्यकता है। UX Movement (2023) अस्वीकार के 2-3 सत्रों के बाद स्पष्टीकरण स्क्रीन दिखाने की अनुशंसा करता है।

swift
func showSettingsAlert(for feature: String) {
    let alert = UIAlertController(
        title: "तक पहुंच \(feature)",
        message: "Allow access in Settings, "
            + "to use this feature",
        preferredStyle: .alert
    )
    alert.addAction(UIAlertAction(
        title: "Open Settings",
        style: .default
    ) { _ in
        if let url = URL(string: UIApplication.openSettingsURLString) {
            UIApplication.shared.open(url)
        }
    })
    alert.addAction(UIAlertAction(
        title: "Not now", style: .cancel
    ))
    UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true)
}

यदि Usage Description निर्दिष्ट नहीं किया गया तो क्या होगा

अनिवार्य Usage Description कुंजी की अनुपस्थिति संबंधित API की पहली कॉल पर ऐप को तुरंत क्रैश कर देती है। यह Xcode की चेतावनी नहीं है, बल्कि NSInvalidArgumentException और कंसोल में संदेश के साथ एक रनटाइम क्रैश है: “यह ऐप क्रैश हो गया क्योंकि इसने उपयोग विवरण के बिना गोपनीयता-संवेदनशील डेटा तक पहुँचने का प्रयास किया।”

कुंजी के बिना रनटाइम व्यवहार

iOS एक संरक्षित संसाधन के लिए पहली API कॉल पर Info.plist में NS*UsageDescription कुंजी की जाँच करता है। यदि कुंजी गायब है, तो OS SIGABRT सिग्नल के साथ ऐप को तुरंत समाप्त कर देता है। यह डिबग डिवाइस पर भी होता है — Xcode लॉग में अपवाद दिखाता है, लेकिन डिबगर इसे ब्रेकपॉइंट के रूप में नहीं पकड़ता।

क्रैश वास्तविक डिवाइस और सिम्युलेटर पर होता है। इसे टालने का एकमात्र तरीका API कॉल करने से पहले कुंजी जोड़ना है। Xcode का स्थैतिक विश्लेषक हमेशा गायब कुंजी के बारे में चेतावनी नहीं देता, खासकर यदि API तीसरे पक्ष के SDK के माध्यम से कॉल की जाती है। TestFlight परीक्षक भी क्रैश देखेंगे, जिससे नकारात्मक समीक्षाएँ हो सकती हैं।

iOS 17+ के साथ विशेष स्थिति: Apple ने क्लिपबोर्ड एक्सेस (UIPasteboard) के लिए अतिरिक्त जाँच शुरू की। यदि ऐप उपयोगकर्ता की स्पष्ट कार्रवाई के बिना क्लिपबोर्ड पढ़ता है, तो iOS एक चेतावनी बैनर दिखाता है, भले ही Usage Description कुंजी मौजूद हो। क्लिपबोर्ड के लिए अलग कुंजी की आवश्यकता नहीं है, लेकिन Apple स्वचालित पढ़ने को कम करने की अनुशंसा करता है।

App Store समीक्षा त्रुटियाँ

रनटाइम क्रैश के अलावा, कुंजी की अनुपस्थिति समीक्षा के दौरान ऐप अस्वीकार का कारण बन सकती है। Apple समीक्षा चरण में Info.plist की जाँच करता है और यदि संबंधित कुंजियों के बिना API कॉल का पता लगाता है तो बिल्ड को अस्वीकार कर सकता है। Xcode आर्काइविंग को ब्लॉक नहीं करता, लेकिन App Store Connect बाइनरी प्रोसेस करते समय त्रुटि लौटा सकता है।

यदि ऐप संसाधन का सीधे उपयोग नहीं करता लेकिन कोई तीसरे पक्ष का SDK करता है (उदाहरण के लिए, एक एनालिटिक्स SDK IDFA का अनुरोध करता है), तो डेवलपर को अभी भी संबंधित कुंजी जोड़नी होगी। Apple बाइनरी में सभी API कॉल की जाँच करता है, जिसमें स्थैतिक और गतिशील लाइब्रेरी का कोड शामिल है। त्रुटि “Info.plist कुंजी गायब” अपडेट अस्वीकार के सबसे सामान्य कारणों में से एक है।

अक्सर पूछे जाने वाले प्रश्न

क्या कुंजी आवश्यक है यदि ऐप API का सीधे उपयोग नहीं करता?

हाँ, यदि कोई तीसरे पक्ष का SDK संसाधन एक्सेस API (कैमरा, जियोलोकेशन, फ़ोटो) को कॉल करता है, तो कुंजी अनिवार्य है। iOS पूरे बाइनरी की जाँच करता है, जिसमें निर्भरताएँ शामिल हैं, और यदि कुंजी गायब है तो ऐप क्रैश हो जाता है।

क्या एक कुंजी का उपयोग कई APIs के लिए किया जा सकता है?

नहीं, प्रत्येक संरक्षित संसाधन के लिए अलग कुंजी आवश्यक है। उदाहरण के लिए, NSCameraUsageDescription NSMicrophoneUsageDescription को प्रतिस्थापित नहीं करता है। सिस्टम प्रत्येक API को कॉल करते समय नाम से विशिष्ट कुंजी खोजता है।

यदि उपयोगकर्ता ने पहुँच अस्वीकार कर दी तो क्या करें?

एक स्क्रीन दिखाएँ जो बताती है कि सेटिंग्स → ऐप के माध्यम से एक्सेस कैसे सक्षम करें, और ऐप सेटिंग्स खोलने के लिए एक बटन प्रदान करें। सिस्टम डायलॉग को प्रोग्रामेटिक रूप से फिर से ट्रिगर नहीं किया जा सकता।

Usage Description को कैसे स्थानीयकृत करें?

प्रत्येक भाषा के लिए InfoPlist.strings फ़ाइल बनाएँ और अनुवाद निर्दिष्ट करें। iOS डायलॉग दिखाते समय स्वचालित रूप से डिवाइस की भाषा का उपयोग करता है। Xcode Info.plist के लिए बेस स्थानीयकरण का भी समर्थन करता है।

सिम्युलेटर पर कुंजी के बिना ऐप क्यों क्रैश होता है?

iOS सिम्युलेटर Usage Description जाँच सहित डिवाइस के व्यवहार को पूरी तरह से दोहराता है। यदि कुंजी गायब है, तो सिम्युलेटर भी अपवाद के साथ ऐप को समाप्त कर देगा। यह अपेक्षित डिबगिंग व्यवहार है।

सारांश

  • NS*UsageDescription — कैमरा, जियोलोकेशन, संपर्क और अन्य संसाधनों तक पहुँच के लिए अनिवार्य Info.plist कुंजियाँ
  • रनटाइम क्रैश — गायब कुंजी API कॉल पर ऐप को तुरंत समाप्त कर देती है
  • 14+ कुंजियाँ — प्रत्येक संरक्षित संसाधन के लिए अद्वितीय नाम वाली अलग कुंजी आवश्यक है
  • स्थानीयकरण — ऐप की सभी भाषाओं में विवरण का अनुवाद करने के लिए InfoPlist.strings का उपयोग करें
  • विशिष्टता — टेक्स्ट को पहुँच का सटीक कारण बताना चाहिए, सामान्य उद्देश्य नहीं
  • SDK — तीसरे पक्ष के SDK द्वारा कॉल की गई APIs को ध्यान में रखें और उनके लिए कुंजियाँ जोड़ें
  • आर्काइव करने से पहले सभी कुंजियों की जाँच करें और विभिन्न एक्सेस परिदृश्यों के साथ सिम्युलेटर पर परीक्षण करें

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें