Action Extension — bu boshqa ilovalardan kontent bilan foydalanuvchi amallarini kontekstni almashtirmasdan bajaradigan iOS kengaytmasi. Share Extension ma’lumotlarni boshqa ilovaga yuborishdan farqli o‘laroq, Action Extension kontentni joyida o‘zgartiradi: matnni tarjima qiladi, rasm filtrlarni o‘zgartirardi, imloni tekshiradi yoki PDF yaratadi. Apple (2024) ma’lumotlariga ko‘ra, Action Extension Share Extension-dan keyin ikkinchi eng ommabop kengaytma turi bo‘lib, 42% ilovalarda „Samaradorlik” toifasida qo‘llaniladi. Asosiy ilovani ishga tushirmasdan bir zumda amal bajarish — foydalanuvchi uchun asosiy afzallik.
Asosiy ma’lumotlar
Action Extension — iOS app extension turi bo‘lib, host ilovasi kontekstida kontent ustida to‘g‘ridan-to‘g‘ri amal bajarish imkonini beradi. Foydalanuvchi Safari-da matnni tanlaydi, „Amallar” tugmasini bosadi va masalan „Imloni tekshir” ni tanlaydi — kengaytma matnni qayta ishlaydi va brauzerdan chiqmasdan natijani qaytaradi. Kengaytma kirish ma’lumotlarini NSExtensionContext orqali oladi va o‘zgartirilgan kontentni qaytarishi mumkin.
Action Extension iOS 8 da app extensions arxitekturasining bir qismi sifatida paydo bo‘ldi. Uning asosiy xususiyati — kengaytmaning o‘z interfeysi yo‘q (ixtiyoriy) va u host ilovasi kontekstida ishlaydi. Foydalanuvchi joriy ekranni tark etmaydi, bu minimal kognitiv uzilishni ta’minlaydi. Apple ma’lumotlariga ko‘ra, Action Extension bir vaqtning o‘zida host ilovasi kontentini o‘qiy oladigan va o‘zgartira oladigan yagona kengaytma turidir (NSExtensionContext orqali natijani qaytarish bilan).
Action Extension turli stsenariylarda qo‘llaniladi: brauzerda matn tarjimasi, veb sahifadan PDF yaratish, galereyadagi rasmga filtr qo‘llash, istalgan matn maydonida imloni tekshirish, URL ni qisqartirish, matnni shifrlash va xatcho‘plarga qo‘shish. Action Extension ning universalligi uni „Yordamchi dasturlar” va „Samaradorlik” toifasidagi ilovalar uchun mashhur vositaga aylantiradi.
Action Extension va Share Extension ko‘pincha chalkashtiriladi, ammo ularning maqsadi tubdan farq qiladi. Share Extension kontentni host ilovasidan sizning ilovangizga yuboradi; Action Extension kontentni qayta ishlaydi va uni qaytaradi. Farq arxitekturaga, foydalanuvchi tajribasiga va Info.plist konfiguratsiya talablariga ta’sir qiladi.
| Xususiyat | Action Extension | Share Extension |
|---|---|---|
| Maqsad | Kontentni o‘zgartirish | Kontentni ilovaga uzatish |
| Interfeys | Ixtiyoriy (maxsus) | SLComposeServiceViewController |
| Ma’lumotni qaytarish | Ha, completeRequest orqali | Yo‘q |
| Kontekst | Host ilovasida qoladi | Kengaytmaga o‘tadi |
| Menyudagi o‘rni | Action Sheet (yuqori qism) | Share Sheet (pastki qism) |
| Oddiy amal | Tarjima, tuzatish, filtr | Saqlash, nashr qilish |
Action Extension „Ulashish” yoki „...” tugmasi bosilganda amallar menyusida (Action Sheet) paydo bo‘ladi. iOS avtomatik ravishda Action Extensions-ni varaqning yuqori qismiga (amallar), Share Extensions-ni esa pastki qismiga (ilovalar) joylashtiradi. Foydalanuvchi stsenariysi: matnni tanladi → „Amallar” ni bosdi → sizning Action Extension ni tanladi → ilovalarni almashtirmasdan qayta ishlangan natijani oldi.
Action Extension Xcode-dagi target, interfeysni ko‘rsatish uchun UIViewController (ixtiyoriy), ma’lumot kiritish-chiqarish uchun NSExtensionContext va Info.plist konfiguratsiyasidan iborat. Arxitektura Share Extension-ga qaraganda soddaroq: majburiy compose interfeysi yo‘q va kengaytma butunlay UI siz ishlashi mumkin.
Target — asosiy ilovadan meros olingan identifikator bilan alohida bundle. UIViewController — taraqqiyot, sozlamalar yoki natijani ko‘rsatish uchun ixtiyoriy interfeys. NSExtensionContext — kirish ma’lumotlari (inputItems) va natijani qaytarish uchun completeRequest metodi bilan konteyner. Info.plist — NSExtensionActivationRule orqali faollashtirish konfiguratsiyasi va qo‘llab-quvvatlanadigan kontent turlarini belgilash uchun atributlar (NSExtensionAttributes).
Action Extension kirish ma’lumotlarini extensionContext?.inputItems orqali oladi — NSExtensionItem massivi. Har bir element ma’lumotlar va UTI bilan ilovalarni o‘z ichiga oladi. Qayta ishlashdan so‘ng kengaytma completeRequest(returningItems:) ni chiqish NSExtensionItem massivi bilan chaqiradi. Host ilovasi qayta ishlangan ma’lumotlarni oladi va ko‘rsatadi. Asinxron model: kengaytma uzoq muddatli operatsiyalarni bajarishi mumkin, kontekstni 30 soniyagacha ushlab turadi.
Swift-da tanlangan matnni tarjima qilish uchun Action Extension yaratishni ko‘rib chiqamiz. Kengaytma host ilovasidan matn oladi, uni tarjima serveriga yuboradi va natijani qaytaradi. ActionViewController — Xcode target qo‘shganda yaratadigan asosiy kontroller.
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
}
}
}
}
}
}
Qayta ishlashdan so‘ng kengaytma natijani host ilovasiga qaytaradi. completeRequest chiqish ma’lumotlari bilan — muqobil stsenariy, kengaytma UI ko‘rsatmaydi va darhol qayta ishlangan kontentni qaytaradi.
// Qayta ishlangan matnni host ilovasiga qaytarish
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 ikki rejimda ishlashi mumkin: UI bilan va UI siz. UI siz rejimda kengaytma amalni butunlay fonda bajaradi va qayta ishlashdan so‘ng darhol completeRequest ni chaqiradi. UI bilan rejimda kengaytma kontrollerni ko‘rsatadi, foydalanuvchi amalni tasdiqlaydi va shundan keyin completeRequest natijani yuboradi. Rejim tanlovi amalning murakkabligi va foydalanuvchi kiritishi zarurligiga bog‘liq.
loadItem(forTypeIdentifier:) metodi asinxron ishlaydi — ma’lumotlar katta bo‘lishi mumkin (rasmlar, video). NSItemProvider oqimli yuklash va keshlashni boshqaradi. Rasmlar uchun kUTTypeImage, fayllar uchun kUTTypeFileURL dan foydalaning. Muhim: loadItem fon ipida chaqirilishi mumkin — UI ni faqat DispatchQueue.main orqali yangilang.
Action Extension qayta ishlangan ma’lumotlarni NSExtensionItem massivi bilan completeRequest orqali qaytaradi. Har bir element chiqish ma’lumot turiga mos keladi. Host ilovasi original kontentni qayta ishlangani bilan almashtirishi mumkin — masalan, original rasmni filtrlanganiga almashtirishi mumkin. NSExtensionItem kirishdagi kabi UTI larni va qo‘shimchalarini (masalan, veb kontent uchun public.html) qo‘llab-quvvatlaydi.
Action Extension o‘nlab stsenariylarda qo‘llaniladi — oddiy yordamchi dasturlardan murakkab biznes jarayonlarigacha. Klassik misollar matn, grafik va fayl operatsiyalarini, shuningdek veb kontent bilan integratsiyani o‘z ichiga oladi.
Matn uchun Action Extension: tarjima, imlo tekshiruvi, belgilar sonini hisoblash, registrni o‘zgartirish, shifrlash, matndan QR kod yaratish. Foydalanuvchi matn maydoni bo‘lgan istalgan ilovada (Safari, Eslatmalar, Pochta) matnni tanlaydi va bir bosish bilan amalni bajaradi. Kod sintaksisini ajratib ko‘rsatish, Markdown formatlash va URL qisqartirish — ilg‘or foydalanuvchilar uchun mashhur Action Extension misollari.
Rasmlar uchun Action Extension taklif qiladi: filtrlarni qo‘llash, kesish, o‘lchamni o‘zgartirish, formatlarni konvertatsiya qilish (HEIC dan JPEG ga), suv belgisi qo‘shish, matnni aniqlash (OCR) va siqish. Rasmlarni qayta ishlash tez bo‘lishi kerak — foydalanuvchi 2–3 soniya ichida natijani kutadi. Og‘ir operatsiyalar uchun GPU-da Core Image yoki fon navbatlaridan foydalaning.
URL uchun Action Extension: veb sahifadan PDF yaratish, Pocket/Pinterest ga saqlash, sayt tezligini tekshirish, sahifani arxivlash, Open Graph metama’lumotlarini olish, sahifa ekran tasvirini yaratish. PDF generatsiyasi — eng ko‘p talab qilinadigan stsenariylardan biri: foydalanuvchi uchinchi tomon xizmatlarini ochmasdan veb sahifani PDF ga konvertatsiya qiladi.
Tez-tez beriladigan savollar
Share Extension kontentni host ilovasidan sizning ilovangizga yuboradi. Action Extension kontentni joyida qayta ishlaydi va natijani qaytaradi. Share — uzatish, Action — o‘zgartirish. Bu fundamental farq arxitektura va UX ni belgilaydi.
Ha. Agar amal foydalanuvchidan ma’lumot kiritishni talab qilmasa (masalan, belgi sonini hisoblash), kengaytma uni fonda bajarishi va darhol completeRequest orqali natijani qaytarishi mumkin. Info.plist da NSExtensionActivationSupportsWebURL yoki ma’lumot turiga mos boshqa UTI ko‘rsatilishi kerak.
UIActivityViewController yoki standart amal kontrollerlarini qo‘llab-quvvatlaydigan barcha ilovalarda. Bular Safari, Rasmlar, Fayllar, Eslatmalar, Pochta va minglab uchinchi tomon ilovalari. Action Extension iOS ning standart amal mexanizmlaridan foydalanmaydigan ilovalarda ishlamaydi.
extensionContext.completeRequest(returningItems:) orqali NSExtensionItem massivi bilan. Har bir chiqish elementi qayta ishlangan ma’lumotlar bilan NSItemProvider ni o‘z ichiga oladi. Host ilovasi natijani UIActivityViewController delegatida yoki shunga o‘xshash callback da oladi.
Kengaytma 30 soniya davomida ishlaydi, shundan so‘ng iOS uni majburan tugatadi. Asosiy ilovaga to‘g‘ridan-to‘g‘ri kirish yo‘q — faqat App Groups orqali. Action Extension tugagandan so‘ng fon vazifalarini bajara olmaydi. Uzoq muddatli operatsiyalar uchun keyingi ishga tushirishda bildirishnoma bilan fon NSURLSession dan foydalaning.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.