Swift के लिए Contacts: पूरी गाइड उदाहरणों के साथ
1. यह क्या है और इसकी आवश्यकता क्यों है
Contacts लाइब्रेरी (फ्रेमवर्क Contacts.framework) iOS, macOS, watchOS और tvOS पर एड्रेस बुक (कॉन्टैक्ट्स) के साथ काम करने के लिए Apple का आधिकारिक API है। यह पुराने AddressBook की जगह लेता है और यूज़र के कॉन्टैक्ट्स तक पहुँचने के लिए एक आधुनिक, ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस प्रदान करता है। इस लाइब्रेरी का मुख्य काम कॉन्टैक्ट्स को पढ़ना, बनाना, अपडेट करना और डिलीट करना है, साथ ही कॉन्टैक्ट ग्रुप्स को मैनेज करना है।
इसकी आवश्यकता क्यों है? कोई भी ऐप जिसे फ़ोन बुक से इंटरैक्ट करना है (मैसेंजर, CRM सिस्टम, कॉलिंग ऐप, सोशल नेटवर्क), उसे Contacts का उपयोग करना चाहिए। यह लाइब्रेरी यूज़र से सुरक्षित रूप से अनुमति माँगने, बड़े डेटा को कुशलतापूर्वक लोड करने (पेजिनेशन और प्रेडिकेट्स के ज़रिए), और यूनिफाइड कॉन्टैक्ट्स (जब एक व्यक्ति कई स्रोतों जैसे iCloud और Google से मर्ज हो) के साथ काम करने की सुविधा देती है।
पुराने समाधानों के विपरीत, Contacts Swift को पूरी तरह से सपोर्ट करता है (जिसमें async/await शामिल है), CNContactStore को एक ही एंट्री पॉइंट के रूप में उपयोग करता है, और पढ़ने के लिए इम्यूटेबल (अपरिवर्तनीय) और लिखने के लिए म्यूटेबल (परिवर्तनीय) ऑब्जेक्ट प्रदान करता है, जिससे कोड अधिक सुरक्षित और अनुमानित हो जाता है।
2. इंस्टॉलेशन
Contacts लाइब्रेरी Apple के सिस्टम फ्रेमवर्क का हिस्सा है। इसे CocoaPods, SPM या Carthage जैसे पैकेज मैनेजर से इंस्टॉल करने की ज़रूरत नहीं है — यह डिवाइस पर पहले से उपलब्ध है। इसका उपयोग करने के लिए बस कोड में मॉड्यूल को इम्पोर्ट करना होता है।
महत्वपूर्ण: कॉन्टैक्ट्स के साथ काम करने के लिए, अपने प्रोजेक्ट की Info.plist फ़ाइल में NSContactsUsageDescription की key जोड़ना ज़रूरी है। इसके बिना, स्टोरेज तक पहुँचने की कोशिश करने पर ऐप क्रैश हो जाएगा।
कमांड (आवश्यक नहीं, लेकिन स्पष्टता के लिए):
चूँकि यह एक सिस्टम फ्रेमवर्क है, इसलिए pip, npm या cargo जैसी कोई कमांड नहीं है। बस Swift फ़ाइल में इम्पोर्ट जोड़ें:
import Contacts
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
यह उदाहरण कॉन्टैक्ट्स तक पहुँचने की अनुमति माँगता है और एड्रेस बुक से सभी कॉन्टैक्ट्स के नाम कंसोल में प्रिंट करता है।
import Contacts
import UIKit
// 1. स्टोरेज का इंस्टेंस बनाएँ
let store = CNContactStore()
// 2. अनुमति माँगें
store.requestAccess(for: .contacts) { granted, error in
guard granted else {
print("एक्सेस अस्वीकृत: \(error?.localizedDescription ?? "अज्ञात त्रुटि")")
return
}
// 3. फ़ेच करने का अनुरोध बनाएँ
let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey]
let request = CNContactFetchRequest(keysToFetch: keysToFetch)
// 4. फ़ेचिंग करें
do {
try store.enumerateContacts(with: request) { contact, stopPointer in
print("कॉन्टैक्ट मिला: \(contact.givenName) \(contact.familyName)")
}
} catch {
print("कॉन्टैक्ट प्राप्त करने में त्रुटि: \(error.localizedDescription)")
}
}
4. मुख्य तरीके/फ़ंक्शन/क्लास
4.1. CNContactStore
सिग्नेचर: class CNContactStore : NSObject
यह क्या करता है: कॉन्टैक्ट डेटाबेस तक पहुँचने के लिए केंद्रीय क्लास। इसके ज़रिए सभी ऑपरेशन किए जाते हैं: अनुरोध, सेव, डिलीट।
उदाहरण:
let store = CNContactStore()
// अब store का उपयोग सभी ऑपरेशनों के लिए करें
4.2. requestAccess(for:completionHandler:)
सिग्नेचर: func requestAccess(for entityType: CNEntityType, completionHandler: @escaping (Bool, Error?) -> Void)
यह क्या करता है: यूज़र से कॉन्टैक्ट्स तक पहुँचने की अनुमति माँगता है। पहली बार कॉल करने पर एक सिस्टम डायलॉग दिखाता है। बाद की कॉल्स पर, यह तुरंत मौजूदा अनुमति स्थिति लौटाता है।