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 میں ایک ہدف، انٹرفیس ظاہر کرنے کے لیے UIViewController (اختیاری)، ڈیٹا کے ان پٹ/آؤٹ پٹ کے لیے NSExtensionContext اور Info.plist کنفیگریشن پر مشتمل ہوتی ہے۔ فن تعمیر Share Extension سے آسان ہے: کوئی لازمی کمپوز انٹرفیس نہیں ہے اور ایکسٹینشن مکمل طور پر UI کے بغیر کام کر سکتی ہے۔
ہدف — مرکزی ایپ سے حاصل کردہ شناخت کنندہ کے ساتھ ایک علیحدہ بنڈل۔ UIViewController — پیشرفت، ترتیبات یا نتائج ظاہر کرنے کے لیے اختیاری انٹرفیس۔ NSExtensionContext — ان پٹ ڈیٹا (inputItems) اور نتائج واپس کرنے کے لیے completeRequest طریقہ کار کے ساتھ ایک کنٹینر۔ Info.plist — NSExtensionActivationRule اور معاون مواد کی اقسام کی وضاحت کے لیے صفات (NSExtensionAttributes) کے ذریعے ایکٹیویشن کنفیگریشن۔
Action Extension ان پٹ ڈیٹا extensionContext?.inputItems کے ذریعے حاصل کرتی ہے — NSExtensionItem کی ایک صف۔ ہر آئٹم میں ڈیٹا اور UTI کے ساتھ منسلکات ہوتے ہیں۔ پروسیسنگ کے بعد، ایکسٹینشن آؤٹ پٹ NSExtensionItem کی صف کے ساتھ completeRequest(returningItems:) کو کال کرتی ہے۔ ہوسٹ ایپ پروسیس شدہ ڈیٹا حاصل کرتی ہے اور اسے ظاہر کرتی ہے۔ غیر ہم وقت ساز ماڈل: ایکسٹینشن 30 سیکنڈ تک سیاق و سباق برقرار رکھتے ہوئے طویل کارروائیاں انجام دے سکتی ہے۔
آئیے منتخب متن کا ترجمہ کرنے کے لیے Swift میں Action Extension بنانے پر غور کریں۔ ایکسٹینشن ہوسٹ ایپ سے متن حاصل کرتی ہے، اسے ترجمہ سرور پر بھیجتی ہے اور نتیجہ واپس کرتی ہے۔ ActionViewController بنیادی کنٹرولر ہے جو Xcode ہدف شامل کرتے وقت بناتا ہے۔
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 کے علاوہ اضافی UTI (مثال کے طور پر، ویب مواد کے لیے public.html) کو سپورٹ کرتا ہے۔
Action Extension درجنوں حالات میں استعمال ہوتی ہے — سادہ افادیت سے لے کر پیچیدہ کاروباری ورک فلو تک۔ کلاسک مثالیں متن، گرافک اور فائل کی کارروائیوں کے ساتھ ساتھ ویب مواد کے انضمام کو احاطہ کرتی ہیں۔
متن کے لیے Action Extension: ترجمہ، ہجے کی جانچ، حروف کی گنتی، کیس تبدیل کرنا، خفیہ کاری، متن سے QR کوڈ بنانا۔ صارف کسی بھی ایپ میں ٹیکسٹ فیلڈ (Safari، Notes، Mail) والے متن کو منتخب کرتا ہے اور ایک ٹیپ سے کارروائی انجام دیتا ہے۔ کوڈ سنٹیکس ہائی لائٹنگ، مارک ڈاؤن فارمیٹنگ اور 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں