Share Extension ایک iOS ایکسٹینشن ہے جو آپ کی ایپ کو سسٹم شیر شیٹ میں شامل کرتی ہے۔ صارف Safari، تصاویر، فائلوں یا کسی دوسری ایپ سے مواد کاپی کیے اور ونڈوز کے درمیان سوئچ کیے بغیر براہ راست آپ کی ایپ میں بھیج سکتا ہے۔ Apple (2024) کے مطابق، Share Extension والی ایپس ان ایپس کے مقابلے میں 35% زیادہ صارفی مواد حاصل کرتی ہیں جن میں شیئرنگ کی صلاحیت نہیں ہے۔ ایکسٹینشن ایک متحد NSExtensionItem انٹرفیس کے ذریعے متن، تصاویر، ویڈیو، URLs اور فائلوں پر کارروائی کرتی ہے۔
اہم نکات
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 ایک متن کے خانے اور پوسٹ بٹن کے ساتھ تیار یوزر انٹرفیس فراہم کرتا ہے۔
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 کو مختلف اقسام کے ان پٹ ڈیٹا: متن، تصاویر، ویڈیو، URLs اور فائلوں کو صحیح طریقے سے سنبھالنا چاہیے۔ ہر قسم اپنا UTI اور نکالنے کا طریقہ استعمال کرتی ہے۔ عالمی ہینڈلنگ — hasItemConformingToTypeIdentifier جانچ کے ساتھ attachment.attachments پر لوپ کرکے۔
تصاویر public.image کے طور پر UIImage یا Data کے ذریعے حاصل کرنے کی صلاحیت کے ساتھ بھیجی جاتی ہیں۔ بڑی تصاویر کے لیے، محفوظ کرنے سے پہلے jpegData(compressionQuality:) استعمال کریں۔ Share Extension کو صارف کی واضح اجازت کے بغیر اصل تصویر میں ترمیم نہیں کرنی چاہیے۔ سفارش کی جاتی ہے کہ اصل کو App Group میں محفوظ کریں اور انٹرفیس میں دکھانے کے لیے پیش منظر بنائیں۔
Safari اور دوسرے براؤزر URLs کو 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 استعمال کر سکتے ہیں۔ اس صورت میں، آپ انٹرفیس پر مکمل کنٹرول رکھتے ہیں۔ تاہم، آپ کو بھیجنے اور منسوخ کرنے کے بٹن خود لاگو کرنے ہوں گے۔ حسب ضرورت انٹرفیس غیر معیاری مواد پر کارروائی کے منظرناموں کے لیے تجویز کیا جاتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں