ایپ ایکسٹینشنز علیحدہ قابل عمل ماڈیول ہیں جو موبائل ایپ کی صلاحیتوں کو اس کے مرکزی انٹرفیس سے آگے بڑھاتے ہیں: ہوم اسکرین پر Today Widget، CallKit کے ذریعے VoIP کال ہینڈلنگ اور BroadcastReceiver کے ذریعے سسٹم ایونٹس پر ردعمل۔ سسٹم انٹیگریشنز ایپ کو آپریٹنگ سسٹم کے ساتھ گہری سطح پر تعامل کرنے کی اجازت دیتی ہیں، عام اسکرینوں کے لیے غیر دستیاب خصوصیات کو کھولتی ہیں۔ Apple ڈیولپر دستاویزات کے مطابق، ہر ایکسٹینشن ایک الگ تھلگ عمل میں چلتی ہے اور مرکزی ایپ سے آزادانہ طور پر سسٹم کے ذریعے منظم کی جاتی ہے۔ موبائل ایپ میں ایپ ایکسٹینشنز مرکزی عمل میں غیر دستیاب خصوصیات کو نافذ کرنے کی اجازت دیتی ہیں۔
اہم نکات
iOS پر ایپ ایکسٹینشنز iOS 8 میں ظاہر ہوئیں اور موبائل ڈیولپمنٹ میں سسٹم انٹیگریشنز کی بنیاد بن گئیں۔ یہ علیحدہ بائنریز ہیں جو مرکزی ایپ کے ساتھ بنڈل ہوتی ہیں لیکن الگ تھلگ عمل میں شروع ہوتی ہیں۔ ہر ایکسٹینشن کا اپنا Info.plist اور NSExtensionPrincipalClass کے ذریعے متعین داخلی نقطہ ہوتا ہے۔ سسٹم ایپ ایکسٹینشنز کے لائف سائیکل کا انتظام کرتا ہے — یہ کام مکمل کرنے کے بعد پس منظر میں نہیں رہ سکتیں۔
WidgetKit (iOS 14+) ہوم اسکرین پر ویجٹ بنانے کے لیے ایک جدید فریم ورک ہے۔ WidgetKit انٹرفیس کی وضاحت کے لیے SwiftUI اور اپ ڈیٹ شیڈول کی تعریف کے لیے TimelineProvider استعمال کرتا ہے۔ ویجٹ تین سائز میں آتے ہیں: چھوٹا (2×2 سیل)، درمیانہ (4×2) اور بڑا (4×4)۔ UICollectionViewController پر مبنی پرانا Today Widget اب بھی سپورٹ کیا جاتا ہے، لیکن Apple WidgetKit پر منتقل ہونے کی سفارش کرتا ہے۔ WidgetKit پر ایپ ایکسٹینشنز اینیمیشن، کی بورڈ ان پٹ یا جیسچرز کو سپورٹ نہیں کرتیں — یہ متواتر اپ ڈیٹس کے ساتھ جامد یا نیم متحرک عناصر ہیں۔
Share Extension سسٹم شیئر شیٹ کے ذریعے کسی بھی ایپ سے آپ کی ایپ میں مواد بھیجنے کی اجازت دیتی ہے۔ Share Extension NSExtensionItem کے ذریعے ڈیٹا وصول کرتی ہے اور UI کے لیے SLComposeServiceViewController استعمال کرتی ہے۔ Action Extension مواد کو موقع پر پروسیس کرتی ہے — مثال کے طور پر، دوسری ایپ پر سوئچ کیے بغیر براؤزر میں متن کا ترجمہ کرتی ہے۔ دونوں اقسام کو محدود وقت میں کام مکمل کرنا ہوتا ہے، ورنہ سسٹم ایکسٹینشن کو "مار" دیتا ہے۔ یہ موبائل ایپ میں ایپ ایکسٹینشنز کی ایک اہم حد ہے — پس منظر کے کام ایکسٹینشن کی سطح پر دستیاب نہیں ہیں۔
iOS پر سسٹم انٹیگریشنز ویجٹ سے کہیں آگے جاتی ہیں: CallKit، PushKit اور SiriKit موبائل ایپ کو سسٹم کی سطح پر کام کرنے کی اجازت دیتے ہیں۔ ان فریم ورکس کو خصوصی entitlements کی ضرورت ہوتی ہے لیکن صارف کو ایک ہموار تجربہ دیتے ہیں — CallKit کے ذریعے کالیں عام فون کالز کی طرح دکھائی دیتی ہیں، اور Siri ایپ کھولے بغیر درخواستوں کو پروسیس کرتا ہے۔
CallKit تیسرے فریق کی ایپ کالز کو لاک اسکرین سمیت سسٹم کال اسکرین میں ضم کرتا ہے۔ CXProvider ایپ کو VoIP سروس کے طور پر رجسٹر کرتا ہے، اور CXCallController کالز کا انتظام کرتا ہے۔ CallKit خود بخود ڈپلیکیٹ کالز کو بلاک کرتا ہے اور ناپسندیدہ نمبروں کو بلاک کرنے کے لیے Call Directory Extension کو سپورٹ کرتا ہے۔ CallKit کے ساتھ موبائل ڈیولپمنٹ میں سسٹم انٹیگریشنز آواز مواصلاتی ایپس کے لیے اہم ہیں — WhatsApp، Skype اور Zoom آنے والی کالز دکھانے کے لیے اسے استعمال کرتے ہیں۔
PushKit پش اطلاعوں کو صارف کو دکھائے بغیر براہ راست موبائل ایپ تک پہنچاتا ہے۔ PushKit ایپ کو "مارے گئے" حالت سے جگاتا ہے اور PKPushRegistryDelegate کے ذریعے ڈیٹا منتقل کرتا ہے۔ یہ VoIP ایپس کے لیے بنیادی میکانزم ہے: PushKit کال کی معلومات پہنچاتا ہے، اور CallKit اسے دکھاتا ہے۔ PushKit کی عام پش اطلاعوں سے زیادہ ترسیل ترجیح ہوتی ہے اور اسے بینر دکھانے کی ضرورت نہیں ہوتی۔ موبائل ایپس میں ایپ ایکسٹینشنز اکثر آواز مواصلات کے لیے PushKit کو CallKit کے ساتھ جوڑتی ہیں۔
SiriKit Siri اور شارٹ کٹس ایپ کے ذریعے درخواستوں کو پروسیس کرنے کی اجازت دیتا ہے۔ Intents Extension ایک علیحدہ ایپ ایکسٹینشن ہے جو معاون ارادوں کو رجسٹر کرتی ہے اور انہیں پروسیس کرتی ہے۔ SiriKit 20+ ڈومینز کو سپورٹ کرتا ہے: کالیں، پیغامات، ادائیگیاں، نوٹس، ورزشیں۔ شارٹ کٹس صارف کو آٹومیشن بنانے کی اجازت دیتے ہیں — مثال کے طور پر، "Siri کے ذریعے WhatsApp میں پیغام بھیجیں۔" SiriKit اور شارٹ کٹس کے ساتھ سسٹم انٹیگریشنز مشغولیت بڑھاتی ہیں کیونکہ صارف ایپ کھولے بغیر اعمال انجام دیتا ہے۔
BroadcastReceiver ایک Android جزو ہے جو سسٹم براڈکاسٹ پیغامات پر ردعمل ظاہر کرتا ہے۔ iOS ایپ ایکسٹینشنز کے برعکس، BroadcastReceiver کو علیحدہ بائنری کی ضرورت نہیں — مینی فیسٹ میں یا Context.registerReceiver کے ذریعے کوڈ میں ریسیور کو رجسٹر کرنا کافی ہے۔ Android پر سسٹم انٹیگریشنز اکثر BroadcastReceiver سے شروع ہوتی ہیں: ڈیوائس بوٹ پر سروس شروع کرنے سے لے کر نیٹ ورک کنکشن پر ردعمل تک۔
IntentFilter BroadcastReceiver کو ایک مخصوص سسٹم ایونٹ سے باندھتا ہے۔ عام ایونٹس: BOOT_COMPLETED (ڈیوائس بوٹ)، CONNECTIVITY_ACTION (نیٹ ورک تبدیلی)، BATTERY_LOW (کم بیٹری)، TIME_SET (وقت کی تبدیلی)۔ ریسیور AndroidManifest.xml میں یا متحرک رجسٹریشن کے لیے Context.registerReceiver کے ذریعے رجسٹر کیا جاتا ہے۔ متحرک رجسٹریشن افضل ہے — اسے مینی فیسٹ میں اجازت ناموں کی ضرورت نہیں اور یہ صرف ایپ فعال ہونے پر کام کرتا ہے۔ Android پر ایپ ایکسٹینشنز ایک تصور کے طور پر موجود نہیں ہیں، لیکن BroadcastReceiver اسی طرح کا کردار ادا کرتا ہے — یہ سسٹم انٹیگریشنز کے ذریعے ایپ کی صلاحیتوں کو بڑھاتا ہے۔
NotificationListenerService ایک سروس ہے جو تمام سسٹم اطلاعیں وصول کرتی ہے۔ NotificationListenerService کو BIND_NOTIFICATION_LISTENER_SERVICE اجازت اور قابل رسائی ترتیبات کے ذریعے رسائی درکار ہے۔ AccessibilityService سسٹم انٹیگریشن کے لیے زیادہ طاقتور ٹول ہے: یہ اسکرین کا مواد پڑھ سکتا ہے، کلکس کی نقل کر سکتا ہے اور اعمال کو خودکار کر سکتا ہے۔ دونوں سروسز کو ترتیبات میں صارف کے ذریعے واضح طور پر فعال کرنے کی ضرورت ہوتی ہے، جو سیکیورٹی کو بہتر بناتا ہے۔ AccessibilityService کے ذریعے موبائل ایپس میں سسٹم انٹیگریشنز آٹو فلرز، اسکرین ریڈرز اور قابل رسائی ٹولز کے لیے استعمال ہوتی ہیں۔
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
WorkManager.getInstance(context)
.enqueueUniqueWork("post-boot", ...)
}
}
}
مثال BOOT_COMPLETED ایونٹ کے لیے BroadcastReceiver رجسٹر کرتی ہے۔ WorkManager ڈیوائس بوٹ کے بعد موخر کام انجام دینے کے لیے استعمال ہوتا ہے — یہ Android ایپس کے لیے معیاری طریقہ ہے۔
Android پر App Widget Provider ویجٹ کے سیاق و سباق میں iOS ایپ ایکسٹینشنز کا ہم منصب ہے: یہ ایک جزو ہے جو ہوم اسکرین پر انٹرایکٹو مواد دکھاتا ہے۔ WidgetKit کے برعکس، Android ویجٹ صارف کے ان پٹ — کلکس، ٹوگلز اور جیسچرز — کو قبول کر سکتے ہیں۔ App Widget Provider سائز اور اپ ڈیٹ فریکوئنسی کی XML وضاحت کے ذریعے مینی فیسٹ میں رجسٹر ہوتا ہے۔
RemoteViews XML لے آؤٹ کے ذریعے ویجٹ انٹرفیس بیان کرتا ہے اور صرف محدود View سیٹ کو سپورٹ کرتا ہے۔ RemoteViews کسٹم View کی اجازت نہیں دیتا — صرف معیاری اجزاء: TextView، ImageView، Button، ProgressBar۔ AppWidgetProvider بنیادی کلاس ہے جو ویجٹ اپ ڈیٹس، فعال کرنے اور حذف کرنے کو سنبھالتی ہے۔ onUpdate طریقہ updatePeriodMillis کے ذریعے ٹائمر کے ذریعے یا عین مطابق کنٹرول کے لیے WorkManager کے ذریعے بلایا جاتا ہے۔ Android پر ویجٹ کے ساتھ سسٹم انٹیگریشنز میں احتیاط کی ضرورت ہے — بہت بار بار اپ ڈیٹ بیٹری ختم کرتا ہے۔
Glance API XML کی بجائے Kotlin DSL استعمال کرکے ویجٹ بنانے کے لیے Jetpack لائبریری ہے۔ Glance API RemoteViews میں کمپائل ہوتی ہے اور Compose جیسی نحو کو سپورٹ کرتی ہے: GlanceComposable، Column، Row، Text۔ لائبریری پیچیدہ XML کوڈ کے مسئلے کو حل کرتی ہے اور JUnit کے ذریعے ویجٹ کی جانچ کی اجازت دیتی ہے۔ Glance API ابھی تک تمام RemoteViews خصوصیات کو سپورٹ نہیں کرتی — پیچیدہ انٹرایکٹو ویجٹ کے لیے کلاسک طریقہ بہتر ہے۔ Android پر موبائل ڈیولپمنٹ میں ایپ ایکسٹینشنز Glance API کی طرف بڑھ رہی ہیں، ویجٹ بنانے اور دیکھ بھال کو آسان بنا رہی ہیں۔
Content Provider ایک متحد ContentResolver انٹرفیس کے ذریعے ایپس کے درمیان ساختی ڈیٹا شیئر کرنے کے لیے Android جزو ہے۔ iOS ایپ ایکسٹینشنز کے برعکس، Content Provider علیحدہ عمل نہیں بناتا — ڈیٹا کال کرنے والی ایپ کے سیاق و سباق میں مطابقت پذیر طریقے سے درخواست کیا جاتا ہے۔ Content Provider Android پر سسٹم انٹیگریشنز کی بنیاد ہے: رابطے، میڈیا فائلیں، کیلنڈر اور معیاری ایپس ڈیٹا شائع کرنے کے لیے اسے استعمال کرتی ہیں۔
FileProvider ایپس کے درمیان محفوظ فائل منتقلی کے لیے ContentProvider کا ذیلی طبقہ ہے۔ FileProvider براہ راست file:// راستوں کے بجائے عارضی content:// URI پیدا کرتا ہے، جو Android 7+ پر ممنوع ہیں۔ استعمال کے لیے، XML ترتیب میں files-path یا external-files-path بتانا ضروری ہے۔ Android پر موبائل ڈیولپمنٹ میں ایپ ایکسٹینشنز ایک علیحدہ تصور کے طور پر موجود نہیں ہیں، لیکن FileProvider ان کا کام کرتا ہے — یہ ڈیٹا شیئرنگ کی صلاحیتوں کو ایک ایپ سے آگے بڑھاتا ہے۔
iOS پر، فائل شیئرنگ کا کردار File Provider Extension ادا کرتا ہے۔ File Provider Extension NSFileProviderManager کے ذریعے ایپ کی فائلوں کو فائلز ایپ میں شائع کرتا ہے۔ FileProvider کے برعکس، iOS ایکسٹینشن کو علیحدہ بائنری کی ضرورت ہوتی ہے اور یہ الگ تھلگ عمل میں چلتی ہے۔ File Provider Extension فائل کی وضاحت کے لیے NSFileProviderItem اور فولڈر نیویگیشن کے لیے NSFileProviderEnumerator کو سپورٹ کرتا ہے۔ File Provider Extension کے ذریعے موبائل ایپس میں سسٹم انٹیگریشنز صارف کو ایپ کھولے بغیر فائلز ایپ سے ایپ فائلوں کا انتظام کرنے کی اجازت دیتی ہیں۔
class MyFileProviderExtension: NSFileProviderExtension {
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
return MyFileProviderItem(identifier: identifier)
}
}
مثال Swift میں File Provider Extension کا کم سے کم نفاذ دکھاتی ہے۔ item(for:) طریقہ شناخت کنندہ کے ذریعے NSFileProviderItem آبجیکٹ لوٹاتا ہے — سسٹم فائلز ایپ میں فائلیں دکھاتے وقت اسے کال کرتا ہے۔
اکثر پوچھے گئے سوالات
ایپ ایکسٹینشنز علیحدہ بائنریز ہیں جو ایپ کی فعالیت کو اس کے عمل سے آگے بڑھاتی ہیں: Today Widget، Share Extension، Action Extension، Keyboard Extension اور دیگر اقسام جو الگ تھلگ ماحول میں چلتی ہیں۔
CallKit VoIP کالز کو سسٹم کال انٹرفیس میں ضم کرتا ہے اور لاک اسکرین پر دکھاتا ہے۔ PushKit پس منظر پش اطلاعیں صارف کو دکھائے بغیر پہنچاتا ہے — یہ آنے والی کال کی معلومات جیسے ڈیٹا پراسیس کرنے کے لیے ایپ کو جگاتا ہے۔
BroadcastReceiver ایک Android جزو ہے جو سسٹم براڈکاسٹ پیغامات پر ردعمل ظاہر کرتا ہے: ڈیوائس بوٹ (BOOT_COMPLETED)، نیٹ ورک کنکشن (CONNECTIVITY_ACTION)، ہوائی جہاز موڈ تبدیلیاں اور دیگر OS ایونٹس۔
ویجٹ انٹرفیس بنانے کے لیے AppWidgetProvider کو RemoteViews کے ساتھ یا Kotlin DSL طریقہ کے لیے Glance API (Jetpack) استعمال کریں۔ ویجٹ سائز اور اپ ڈیٹ فریکوئنسی بتانے والی XML وضاحت کے ذریعے مینی فیسٹ میں رجسٹر ہوتا ہے۔
Content Provider ContentResolver کے ذریعے ایپس کے درمیان ڈیٹا شیئر کرنے کے لیے Android جزو ہے۔ یہ رابطوں، میڈیا فائلوں اور دوسری ایپس سے ساختی ڈیٹا تک رسائی کے لیے استعمال ہوتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔