Share Extension एक iOS एक्सटेंशन है जो आपके ऐप को सिस्टम शेयर शीट में जोड़ता है। उपयोगकर्ता Safari, फ़ोटो, फ़ाइलों या किसी अन्य ऐप से सीधे आपके ऐप में सामग्री भेज सकता है — बिना कॉपी किए और विंडो के बीच स्विच किए। Apple (2024) के अनुसार, Share Extension वाले ऐप्स को बिना शेयरिंग क्षमता वाले ऐप्स की तुलना में 35% अधिक उपयोगकर्ता सामग्री प्राप्त होती है। एक्सटेंशन टेक्स्ट, इमेज, वीडियो, URL और फ़ाइलों को एकीकृत NSExtensionItem इंटरफ़ेस के माध्यम से संसाधित करता है।
मुख्य बिंदु
Share Extension एक प्रकार का iOS ऐप एक्सटेंशन है जो किसी भी ऐप में सामग्री चुनने पर सिस्टम शेयर शीट में दिखाई देता है। उपयोगकर्ता Safari में टेक्स्ट हाइलाइट करता है, शेयर दबाता है और आपका ऐप उपलब्ध क्रियाओं की सूची में देखता है। चयन के बाद, सामग्री प्रसंस्करण के लिए एक्सटेंशन को भेजी जाती है: सहेजना, प्रकाशित करना, भेजना या रूपांतरित करना।
Action Extension के विपरीत, Share Extension बाहरी ऐप्स से सामग्री प्राप्त करने में विशेषज्ञता रखता है। Action Extension, इसके विपरीत, आपके ऐप से डेटा बाहर भेजता है। Share Extension उपयोगकर्ता सामग्री का प्रवेश बिंदु है, उपयोगकर्ता अधिग्रहण का एक महत्वपूर्ण तत्व: उपयोगकर्ता Share Extension के माध्यम से आपके ऐप को पूरी तरह से स्थापित किए बिना आज़माते हैं। App Store उन ऐप्स को प्रतिबंधित करता है जिनका एकमात्र कार्य Share Extension के माध्यम से विज्ञापन दिखाना है (App Store Review Guideline 4.2)।
Share Extension प्रवेश की बाधा को कम करता है: उपयोगकर्ता परिचित संदर्भ — ब्राउज़र, गैलरी, फ़ाइल मैनेजर — से आपके ऐप में सामग्री भेजते हैं। Branch (2024) के अनुसार, Share Extension वाले ऐप्स 7वें दिन 28% अधिक रिटेंशन दिखाते हैं। एक अतिरिक्त प्रभाव वायरलिटी है: हर बार जब उपयोगकर्ता शेयर शीट में आपका ऐप देखता है, विज्ञापन खर्च के बिना निष्क्रिय ब्रांडिंग होती है।
Share Extension तंत्र सिस्टम NSExtensionItem कंटेनरों के माध्यम से सामग्री स्थानांतरण पर आधारित है। होस्ट ऐप (Safari, फ़ोटो) चयनित सामग्री को निर्दिष्ट प्रकार (public.image, public.url, public.plain-text) के साथ NSExtensionItem में पैकेज करता है। सिस्टम इस कंटेनर को एक्सटेंशन को भेजता है, जो extensionContext.inputItems के माध्यम से डेटा निकालता है।
Share Extension एक अलग प्रक्रिया में सीमित निष्पादन समय के साथ चलता है — प्रसंस्करण के लिए लगभग 30 सेकंड। एक्सटेंशन को लंबी सिंक्रोनस संचालन नहीं करनी चाहिए। बड़ी फ़ाइलें अपलोड करने के लिए, बैकग्राउंड कॉन्फ़िगरेशन के साथ NSURLSession का उपयोग करें। SLComposeServiceViewController सामग्री पूर्वावलोकन और पोस्ट बटन के साथ Share Extension के लिए आधार वर्ग है।
iOS स्थानांतरित की जा रही सामग्री के प्रकार को निर्धारित करने के लिए Uniform Type Identifiers (UTI) का उपयोग करता है। Share Extension के लिए मुख्य UTI: public.image (फ़ोटो, स्क्रीनशॉट), public.url (लिंक), public.plain-text (टेक्स्ट), public.video (वीडियो फ़ाइलें) और public.file-url (फ़ाइलें)। एक्सटेंशन NSExtensionActivationRule कुंजी के माध्यम से Info.plist में समर्थित UTI पंजीकृत करता है।
Share Extension तीन घटकों से बना है: Xcode में टार्गेट, SLComposeServiceViewController और Info.plist कॉन्फ़िगरेशन। आर्किटेक्चर निर्धारित करता है कि किस प्रकार की सामग्री संसाधित की जाती है, इंटरफ़ेस कैसे प्रदर्शित होता है और डेटा कहाँ सहेजा जाता है।
| घटक | उद्देश्य | विशेषताएँ |
|---|---|---|
| Target | Xcode में एक्सटेंशन टार्गेट | पहचानकर्ता के साथ अलग बंडल |
| ViewController | इंटरफ़ेस और प्रसंस्करण तर्क | SLComposeServiceViewController या कस्टम |
| Info.plist | सक्रियण और UTI कॉन्फ़िगरेशन | प्रेडिकेट के साथ NSExtensionActivationRule |
| App Groups | ऐप के साथ साझा स्टोरेज | डेटा स्थानांतरण के लिए UserDefaults सूट |
Share Extension कॉन्फ़िगरेशन का मुख्य तत्व सक्रियण नियम है। यह निर्धारित करता है कि किन शर्तों पर एक्सटेंशन शेयर शीट में दिखाई देता है। नियम Info.plist में बाधाओं वाले शब्दकोश के रूप में सेट किया जाता है: छवियों की अधिकतम संख्या, न्यूनतम टेक्स्ट लंबाई, अनिवार्य URL उपस्थिति। स्टैंडर्ड नियम किसी एक सामग्री प्रकार के लिए एक्सटेंशन को सक्रिय करता है।
// Info.plist — Share Extension के लिए NSExtensionActivationRule
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>5</integer>
<key>NSExtensionActivationSupportsText</key>
<true/>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
</dict>
आइए बुकमार्किंग ऐप के लिए Swift में Share Extension बनाने का एक व्यावहारिक उदाहरण देखें। एक्सटेंशन Safari से URL प्राप्त करता है, पूर्वावलोकन इंटरफ़ेस प्रदर्शित करता है और लिंक को App Group में सहेजता है। SLComposeServiceViewController टेक्स्ट फ़ील्ड और पोस्ट बटन के साथ तैयार UI प्रदान करता है।
import Social
import MobileCoreServices
class ShareViewController: SLComposeServiceViewController {
override func isContentValid() -> Bool {
return !(contentText?.isEmpty() ?? true)
}
override func didSelectPost() {
guard let item = extensionContext?.inputItems.first as? NSExtensionItem
else { return }
for attachment in item.attachments ?? [] {
attachment.loadItem(forTypeIdentifier: kUTTypeURL as String) {
[weak self] (item, error) in
if let url = item as? URL {
BookmarkService().save(url, title: self?.contentText)
}
self?.extensionContext?.completeRequest(
returningItems: [], completionHandler: nil)
}
}
}
}
सामग्री भेजने के बाद, एक्सटेंशन completeRequest कॉल करके समाप्त होता है — यह एक अनिवार्य कदम है; इसके बिना सिस्टम एक्सटेंशन प्रक्रिया जारी नहीं करेगा। महत्वपूर्ण: Share Extension सीमित वातावरण में प्रतिबंधित नेटवर्क और फ़ाइल सिस्टम पहुँच के साथ चलता है — सामग्री अपलोड के लिए बैकग्राउंड सत्र का उपयोग करें।
Share Extension को विभिन्न प्रकार के इनपुट डेटा: टेक्स्ट, इमेज, वीडियो, URL और फ़ाइलों को सही ढंग से संभालना चाहिए। प्रत्येक प्रकार अपने स्वयं के UTI और निष्कर्षण विधि का उपयोग करता है। सार्वभौमिक हैंडलिंग — hasItemConformingToTypeIdentifier जाँच के साथ attachment.attachments पर लूप करके।
इमेज को public.image के रूप में UIImage या Data के माध्यम से प्राप्त करने की क्षमता के साथ पास किया जाता है। बड़ी इमेज के लिए, सहेजने से पहले jpegData(compressionQuality:) का उपयोग करें। Share Extension को उपयोगकर्ता की स्पष्ट अनुमति के बिना मूल इमेज को संशोधित नहीं करना चाहिए। मूल को App Group में सहेजने और इंटरफ़ेस में प्रदर्शन के लिए पूर्वावलोकन बनाने की अनुशंसा की जाती है।
Safari और अन्य ब्राउज़र URL को public.url और चयनित टेक्स्ट को public.plain-text के रूप में पास करते हैं। एकल NSExtensionItem में एक साथ दोनों प्रकार हो सकते हैं — पृष्ठ URL और उस पर चयनित टेक्स्ट। Share Extension को सभी अटैचमेंट की जाँच करनी चाहिए और प्रासंगिक डेटा निकालना चाहिए। संयुक्त परिदृश्य: URL को बुकमार्क के रूप में और टेक्स्ट को उससे जुड़े नोट के रूप में सहेजें।
Share Extension और मुख्य ऐप अलग-अलग प्रक्रियाओं में चलते हैं और फ़ाइल सिस्टम तक साझा पहुँच नहीं रखते हैं। डेटा आदान-प्रदान App Groups तंत्र का उपयोग करता है: group.* पहचानकर्ता के साथ एक साझा कंटेनर। App Group में डेटा सहेजने के बाद, एक्सटेंशन CFNotificationCenter या Darwin Notify के माध्यम से ऐप को सूचित करता है।
App Groups टार्गेट की क्षमताओं में सक्षम की जाती हैं: App Groups चुनें और एक पहचानकर्ता जोड़ें (उदाहरण के लिए, group.com.example.myapp)। दोनों टार्गेट — मुख्य ऐप और एक्सटेंशन — का एक ही समूह तक पहुँच होनी चाहिए। UserDefaults सूट न्यूनतम ओवरहेड के साथ साझा स्टोरेज में डेटा पढ़ने और लिखने की अनुमति देता है।
// Share Extension से App Group में डेटा सहेजना
let sharedDefaults = UserDefaults(suiteName: "group.com.example.myapp")
let bookmark: [String: Any] = [
"url": url.absoluteString,
"title": contentText ?? "",
"date": Date().timeIntervalSince1970
]
sharedDefaults?.set(bookmark, forKey: "bookmark_\(Date().timeIntervalSince1970)")
sharedDefaults?.synchronize()
अक्सर पूछे जाने वाले प्रश्न
Share Extension अन्य ऐप्स से आपके ऐप में सामग्री प्राप्त करता है। Action Extension, इसके विपरीत, होस्ट ऐप के भीतर सामग्री पर कार्रवाई करता है — टेक्स्ट का अनुवाद, इमेज में बदलाव। Share Extension प्राप्त करना है, Action Extension रूपांतरण है।
यह आपके ऐप द्वारा संसाधित सामग्री के प्रकार पर निर्भर करता है। बुकमार्क के लिए — public.url। फ़ोटो एडिटर के लिए — public.image। नोट्स के लिए — public.plain-text। कई प्रकारों के लिए, AND/OR प्रेडिकेट के संयोजन के साथ NSExtensionActivationRule का उपयोग करें।
एक सामान्य कारण गलत NSExtensionActivationRule या UTI बेमेल है। Info.plist में जाँच करें: सक्रियण नियम परीक्षण किए गए सामग्री प्रकार से मेल खाना चाहिए। यह भी सुनिश्चित करें कि सेटिंग्स → आपका ऐप → Siri और खोज में एक्सटेंशन सक्षम है। Xcode क्लीन बिल्ड अक्सर समस्या हल करता है।
सिस्टम निष्पादन के लिए लगभग 30 सेकंड आवंटित करता है। उसके बाद, iOS जबरन एक्सटेंशन प्रक्रिया समाप्त कर देता है। लंबे संचालन के लिए, बैकग्राउंड NSURLSession का उपयोग करें और अगले ऐप लॉन्च पर परिणाम संभालें।
हाँ, SLComposeServiceViewController के बजाय आप सामान्य UIViewController का उपयोग कर सकते हैं। इस मामले में, आप इंटरफ़ेस पर पूर्ण नियंत्रण रखते हैं। हालाँकि, आपको भेजें और रद्द करें बटन स्वयं लागू करने होंगे। कस्टम UI गैर-मानक सामग्री प्रसंस्करण परिदृश्यों के लिए अनुशंसित है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें