Action Extension एक iOS एक्सटेंशन है जो संदर्भ बदले बिना अन्य ऐप्स के कंटेंट पर कस्टम क्रियाएं करता है। Share Extension के विपरीत, जो डेटा को किसी अन्य ऐप पर भेजता है, Action Extension सामग्री को वहीं पर रूपांतरित करता है: टेक्स्ट का अनुवाद करता है, इमेज फ़िल्टर बदलता है, वर्तनी जांचता है या PDF जनरेट करता है। Apple (2024) के अनुसार, Action Extension Share Extension के बाद दूसरा सबसे लोकप्रिय एक्सटेंशन प्रकार है, जो “उत्पादकता” श्रेणी के 42% ऐप्स में उपयोग किया जाता है। मुख्य ऐप लॉन्च किए बिना तत्काल कार्रवाई उपयोगकर्ता के लिए मुख्य लाभ है।
मुख्य बिंदु
Action Extension एक प्रकार का iOS ऐप एक्सटेंशन है जो होस्ट ऐप के संदर्भ में सीधे कंटेंट पर क्रियाएं करने की अनुमति देता है। उपयोगकर्ता Safari में टेक्स्ट चुनता है, “क्रियाएं” पर टैप करता है और उदाहरण के लिए, “वर्तनी जांचें” चुनता है — एक्सटेंशन टेक्स्ट को प्रोसेस करता है और ब्राउज़र छोड़े बिना परिणाम लौटाता है। एक्सटेंशन इनपुट डेटा NSExtensionContext के माध्यम से प्राप्त करता है और संशोधित कंटेंट वापस कर सकता है।
Action Extension iOS 8 में ऐप एक्सटेंशन आर्किटेक्चर के हिस्से के रूप में दिखाई दिया। इसकी मुख्य विशेषता यह है कि एक्सटेंशन का अपना कोई इंटरफ़ेस नहीं है (वैकल्पिक) और यह होस्ट ऐप के संदर्भ में चलता है। उपयोगकर्ता वर्तमान स्क्रीन नहीं छोड़ता, जो न्यूनतम संज्ञानात्मक घर्षण सुनिश्चित करता है। Apple के अनुसार, Action Extension एकमात्र एक्सटेंशन प्रकार है जो एक साथ होस्ट ऐप कंटेंट को पढ़ और संशोधित कर सकता है (परिणाम वापसी के साथ NSExtensionContext के माध्यम से)।
Action Extension विभिन्न परिदृश्यों में उपयोग किया जाता है: ब्राउज़र में टेक्स्ट अनुवाद, वेब पेज से PDF बनाना, गैलरी में फोटो पर फ़िल्टर लगाना, किसी भी टेक्स्ट फ़ील्ड में वर्तनी जांच, URL छोटा करना, टेक्स्ट एन्क्रिप्ट करना और बुकमार्क जोड़ना। बहुमुखी प्रतिभा Action Extension को “उपयोगिताएं” और “उत्पादकता” श्रेणियों के ऐप्स के लिए एक लोकप्रिय उपकरण बनाती है।
Action Extension और Share Extension को अक्सर भ्रमित किया जाता है, लेकिन उनके उद्देश्य मौलिक रूप से भिन्न हैं। Share Extension होस्ट ऐप से आपके ऐप में कंटेंट भेजता है; Action Extension कंटेंट को प्रोसेस करता है और वापस करता है। अंतर आर्किटेक्चर, उपयोगकर्ता अनुभव और Info.plist कॉन्फ़िगरेशन आवश्यकताओं को प्रभावित करता है।
| विशेषता | Action Extension | Share Extension |
|---|---|---|
| उद्देश्य | कंटेंट रूपांतरण | ऐप में कंटेंट स्थानांतरण |
| इंटरफ़ेस | वैकल्पिक (कस्टम) | SLComposeServiceViewController |
| डेटा वापसी | हाँ, completeRequest के माध्यम से | नहीं |
| संदर्भ | होस्ट ऐप में रहता है | एक्सटेंशन पर स्विच होता है |
| मेनू स्थिति | Action Sheet (ऊपरी भाग) | Share Sheet (निचला भाग) |
| सामान्य क्रिया | अनुवाद, सुधार, फ़िल्टर | सहेजना, प्रकाशन |
Action Extension “शेयर” या “...” बटन दबाने पर एक्शन मेनू (Action Sheet) में दिखाई देता है। iOS स्वचालित रूप से Action Extensions को शीट के ऊपरी भाग (क्रियाएं) और Share Extensions को निचले भाग (ऐप्स) में रखता है। उपयोगकर्ता परिदृश्य: टेक्स्ट चुना → “क्रियाएं” दबाया → आपका Action Extension चुना → ऐप स्विच किए बिना संसाधित परिणाम प्राप्त किया।
Action Extension में Xcode में एक target, इंटरफ़ेस प्रदर्शित करने के लिए UIViewController (वैकल्पिक), डेटा इनपुट/आउटपुट के लिए NSExtensionContext और Info.plist कॉन्फ़िगरेशन शामिल है। संरचना Share Extension से सरल है: कोई अनिवार्य compose इंटरफ़ेस नहीं है, और एक्सटेंशन पूरी तरह से UI के बिना काम कर सकता है।
Target — मुख्य ऐप से प्राप्त पहचानकर्ता के साथ एक अलग bundle। UIViewController — प्रगति, सेटिंग्स या परिणाम प्रदर्शित करने के लिए वैकल्पिक इंटरफ़ेस। NSExtensionContext — इनपुट डेटा (inputItems) और परिणाम वापस करने के लिए completeRequest विधि वाला कंटेनर। Info.plist — NSExtensionActivationRule और समर्थित कंटेंट प्रकार निर्दिष्ट करने के लिए गुण (NSExtensionAttributes) के माध्यम से सक्रियण कॉन्फ़िगरेशन।
Action Extension इनपुट डेटा extensionContext?.inputItems के माध्यम से प्राप्त करता है — NSExtensionItem की एक सरणी। प्रत्येक आइटम में डेटा और UTI के साथ अटैचमेंट होते हैं। प्रसंस्करण के बाद, एक्सटेंशन आउटपुट NSExtensionItem की सरणी के साथ completeRequest(returningItems:) को कॉल करता है। होस्ट ऐप संसाधित डेटा प्राप्त करता है और उसे प्रदर्शित करता है। अतुल्यकालिक मॉडल: एक्सटेंशन 30 सेकंड तक संदर्भ धारण करते हुए लंबी चलने वाली संक्रियाएं कर सकता है।
आइए चयनित टेक्स्ट का अनुवाद करने के लिए Swift में Action Extension बनाने पर विचार करें। एक्सटेंशन होस्ट ऐप से टेक्स्ट प्राप्त करता है, उसे अनुवाद सर्वर पर भेजता है, और परिणाम लौटाता है। ActionViewController मूल नियंत्रक है जो Xcode द्वारा target जोड़ने पर बनाया जाता है।
import UIKit
import MobileCoreServices
class ActionViewController: UIViewController {
@IBOutlet var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
extractTextAndTranslate()
}
func extractTextAndTranslate() {
guard let item = extensionContext?.inputItems.first
as? NSExtensionItem
else { return }
for attachment in item.attachments ?? [] {
attachment.loadItem(
forTypeIdentifier: kUTTypePlainText as String
) { [weak self] (text, error) in
guard let inputText = text as? String else { return }
TranslationService().translate(inputText, from: "en", to: "ru") {
translated in
DispatchQueue.main.async {
self?.resultLabel?.text = translated
}
}
}
}
}
}
प्रसंस्करण के बाद, एक्सटेंशन परिणाम होस्ट ऐप को लौटाता है। आउटपुट डेटा के साथ completeRequest एक वैकल्पिक परिदृश्य है जहां एक्सटेंशन UI नहीं दिखाता बल्कि तुरंत संसाधित कंटेंट लौटाता है।
// Returning processed text to host app
let resultItem = NSExtensionItem()
let resultData = translated.data(using: .utf8)!
let attachment = NSItemProvider(
item: resultData,
typeIdentifier: kUTTypePlainText as String
)
resultItem.attachments = [attachment]
extensionContext?.completeRequest(
returningItems: [resultItem], completionHandler: nil
)
Action Extension दो मोड में काम कर सकता है: UI के साथ और UI के बिना। UI रहित मोड में, एक्सटेंशन पूरी तरह से पृष्ठभूमि में क्रिया करता है और प्रसंस्करण के तुरंत बाद completeRequest को कॉल करता है। UI मोड में, एक्सटेंशन एक नियंत्रक दिखाता है, उपयोगकर्ता क्रिया की पुष्टि करता है, और उसके बाद ही completeRequest परिणाम भेजता है। मोड चयन क्रिया की जटिलता और उपयोगकर्ता इनपुट की आवश्यकता पर निर्भर करता है।
विधि loadItem(forTypeIdentifier:) अतुल्यकालिक रूप से काम करती है — डेटा बड़ा हो सकता है (चित्र, वीडियो)। NSItemProvider स्ट्रीमिंग और कैशिंग का प्रबंधन करता है। छवियों के लिए kUTTypeImage का उपयोग करें, फ़ाइलों के लिए kUTTypeFileURL का उपयोग करें। महत्वपूर्ण: loadItem को पृष्ठभूमि थ्रेड पर कॉल किया जा सकता है — UI को केवल DispatchQueue.main के माध्यम से अपडेट करें।
Action Extension NSExtensionItem की सरणी के साथ completeRequest के माध्यम से संसाधित डेटा लौटाता है। प्रत्येक आइटम आउटपुट डेटा प्रकार से मेल खाता है। होस्ट ऐप मूल कंटेंट को संसाधित कंटेंट से बदल सकता है — उदाहरण के लिए, मूल छवि को फ़िल्टर की गई छवि से बदलना। NSExtensionItem इनपुट के समान UTI का समर्थन करता है, साथ ही अतिरिक्त (जैसे, वेब कंटेंट के लिए public.html)।
Action Extension का उपयोग दर्जनों परिदृश्यों में किया जाता है — सरल उपयोगिताओं से लेकर जटिल व्यावसायिक वर्कफ़्लो तक। क्लासिक उदाहरण टेक्स्ट, ग्राफिक और फ़ाइल संचालन के साथ-साथ वेब कंटेंट एकीकरण को कवर करते हैं।
टेक्स्ट के लिए Action Extension: अनुवाद, वर्तनी जांच, वर्ण गणना, केस बदलना, एन्क्रिप्शन, टेक्स्ट से QR कोड निर्माण। उपयोगकर्ता किसी भी ऐप में टेक्स्ट फ़ील्ड (Safari, Notes, Mail) वाले टेक्स्ट का चयन करता है और एक टैप से क्रिया करता है। कोड सिंटैक्स हाइलाइटिंग, Markdown फ़ॉर्मेटिंग और URL छोटा करना उन्नत उपयोगकर्ताओं के लिए लोकप्रिय Action Extension उदाहरण हैं।
छवियों के लिए, Action Extension प्रदान करता है: फ़िल्टर लगाना, क्रॉप करना, आकार बदलना, प्रारूप रूपांतरण (HEIC से JPEG), वॉटरमार्क जोड़ना, टेक्स्ट पहचान (OCR) और संपीड़न। छवि प्रसंस्करण तेज़ होना चाहिए — उपयोगकर्ता 2–3 सेकंड में परिणाम की उम्मीद करता है। भारी संक्रियाओं के लिए GPU पर Core Image या पृष्ठभूमि कतारों का उपयोग करें।
URL के लिए Action Extension: वेब पेज से PDF बनाना, Pocket/Pinterest में सहेजना, साइट गति जांचना, पेज संग्रहित करना, Open Graph मेटाडेटा प्राप्त करना, पेज स्क्रीनशॉट जनरेट करना। PDF निर्माण सबसे अधिक मांग वाले परिदृश्यों में से एक है: उपयोगकर्ता तृतीय-पक्ष सेवाएं खोले बिना वेब पेज को PDF में बदलता है।
अक्सर पूछे जाने वाले प्रश्न
Share Extension होस्ट ऐप से आपके ऐप में कंटेंट भेजता है। Action Extension कंटेंट को वहीं प्रोसेस करता है और परिणाम वापस करता है। Share — स्थानांतरण, Action — रूपांतरण। यह मूलभूत अंतर आर्किटेक्चर और UX निर्धारित करता है।
हाँ। यदि क्रिया को उपयोगकर्ता इनपुट की आवश्यकता नहीं है (जैसे, वर्ण गणना), तो एक्सटेंशन इसे पृष्ठभूमि में कर सकता है और completeRequest के माध्यम से तुरंत परिणाम लौटा सकता है। Info.plist में आपको NSExtensionActivationSupportsWebURL या डेटा प्रकार से मेल खाने वाला कोई अन्य UTI निर्दिष्ट करना होगा।
किसी भी ऐप में जो UIActivityViewController या मानक क्रिया नियंत्रकों का समर्थन करता है। इनमें Safari, फ़ोटो, फ़ाइलें, नोट्स, मेल और हज़ारों तृतीय-पक्ष ऐप्स शामिल हैं। Action Extension उन ऐप्स में काम नहीं करता जो iOS के मानक क्रिया तंत्र का उपयोग नहीं करते।
extensionContext.completeRequest(returningItems:) के माध्यम से NSExtensionItem की सरणी के साथ। प्रत्येक आउटपुट आइटम में संसाधित डेटा के साथ NSItemProvider होता है। होस्ट ऐप UIActivityViewController डेलिगेट या समान कॉलबैक में परिणाम प्राप्त करता है।
एक्सटेंशन अधिकतम 30 सेकंड तक चलता है, जिसके बाद iOS इसे बलपूर्वक समाप्त कर देता है। मुख्य ऐप तक सीधी पहुंच नहीं है — केवल App Groups के माध्यम से। Action Extension समाप्ति के बाद पृष्ठभूमि कार्य नहीं कर सकता। लंबी संक्रियाओं के लिए, अगले लॉन्च पर सूचना के साथ पृष्ठभूमि NSURLSession का उपयोग करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें