Share Extension — bu ilovangizni tizimning “Ulashish” menyusiga (Share Sheet) qo’shadigan iOS kengaytmasi. Foydalanuvchi Safari, Rasmlar, Fayllar yoki boshqa har qanday ilovadan kontentni to’g’ridan-to’g’ri sizning ilovangizga yuborishi mumkin — nusxalash va oynalar o’rtasida almashmasdan. Apple (2024) ma’lumotlariga ko’ra, Share Extension-ga ega ilovalar ulashish imkoniyati bo’lmagan ilovalarga qaraganda 35% ko’proq foydalanuvchi kontentini oladi. Kengaytma matn, tasvirlar, video, URL va fayllarni yagona NSExtensionItem interfeysi orqali qayta ishlaydi.
Asosiy fikrlar
Share Extension — bu har qanday ilovada kontentni tanlashda tizimning “Ulashish” menyusida paydo bo’ladigan iOS app extension turi. Foydalanuvchi Safari-da matnni belgilaydi, “Ulashish” tugmasini bosadi va ilovangizni mavjud harakatlar ro’yxatida ko’radi. Tanlovdan so’ng kontent qayta ishlash uchun kengaytmaga uzatiladi: saqlash, nashr qilish, yuborish yoki o‘zgartirish.
Action Extension-dan farqli o‘laroq, Share Extension tashqi ilovalardan kontent qabul qilishga ixtisoslashgan. Action Extension esa aksincha, ma’lumotlarni ilovangizdan tashqariga yuboradi. Share Extension foydalanuvchi kontenti uchun kirish nuqtasi, foydalanuvchilarni jalb qilishning asosiy elementi: foydalanuvchi ilovani Share Extension orqali sinab ko‘radi, to‘liq o‘rnatmasdan. App Store yagona funktsiyasi Share Extension orqali reklama ko‘rsatish bo‘lgan ilovalarni taqiqlaydi (App Store Review Guideline 4.2).
Share Extension kirish to‘sig‘ini kamaytiradi: foydalanuvchi kontentni ilovangizga tanish kontekstdan — brauzerdan, galereyadan, fayl menejeridan yuboradi. Branch (2024) ma’lumotlariga ko‘ra, Share Extension-ga ega ilovalar 7-kunda 28% yuqori retention ko‘rsatadi. Qo‘shimcha effekt — viruslik: foydalanuvchi har safar ilovangizni Share Sheet-da ko‘rganda, reklama xarajatlarisiz passiv brending sodir bo‘ladi.
Share Extension mexanizmi kontentni tizim NSExtensionItem konteynerlari orqali uzatishga asoslangan. Xost-ilova (Safari, Rasmlar) tanlangan kontentni turini ko‘rsatgan holda (public.image, public.url, public.plain-text) NSExtensionItem-ga joylaydi. Tizim ushbu konteynerni kengaytmaga uzatadi, u esa ma’lumotlarni extensionContext.inputItems orqali chiqaradi.
Share Extension cheklangan bajarilish vaqti bilan alohida jarayonda ishga tushadi — qayta ishlash uchun taxminan 30 soniya. Kengaytma uzoq muddatli operatsiyalarni sinxron bajarmasligi kerak. Katta fayllarni yuklash uchun fon konfiguratsiyasi bilan NSURLSession dan foydalaning. SLComposeServiceViewController — kontentni oldindan ko‘rish va yuborish tugmasi bilan Share Extension uchun asosiy sinf.
iOS uzatiladigan kontent turini aniqlash uchun Uniform Type Identifiers (UTI) dan foydalanadi. Share Extension uchun asosiy UTI-lar: public.image (fotosuratlar, ekran tasvirlari), public.url (havolalar), public.plain-text (matn), public.video (video fayllar) va public.file-url (fayllar). Kengaytma qo‘llab-quvvatlanadigan UTI-larni Info.plist da NSExtensionActivationRule kaliti orqali ro‘yxatdan o‘tkazadi.
Share Extension uchta komponentdan iborat: Xcode-dagi maqsadli target, SLComposeServiceViewController va Info.plist konfiguratsiyasi. Arxitektura qaysi kontent turlari qayta ishlanishini, interfeys qanday ko‘rsatilishini va ma’lumotlar qayerda saqlanishini aniqlaydi.
| Komponent | Vazifasi | Xususiyatlari |
|---|---|---|
| Target | Xcode-dagi kengaytma targeti | Identifikatorli alohida bundle |
| ViewController | Interfeys va qayta ishlash mantig‘i | SLComposeServiceViewController yoki shaxsiy |
| Info.plist | Aktivlashtirish va UTI konfiguratsiyasi | Predikatlar bilan NSExtensionActivationRule |
| App Groups | Ilova bilan umumiy ombor | Ma’lumot uzatish uchun UserDefaults suite |
Share Extension konfiguratsiyasining asosiy elementi — aktivlashtirish qoidasi. U kengaytmaning Share Sheet-da qanday sharoitlarda paydo bo‘lishini aniqlaydi. Qoida Info.plist da cheklovlar bilan lug‘at sifatida beriladi: maksimal rasm soni, minimal matn uzunligi, URL ning majburiy mavjudligi. Standart qoida kengaytmani har qanday bitta kontent turi uchun faollashtiradi.
// Info.plist — Share Extension uchun NSExtensionActivationRule
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>5</integer>
<key>NSExtensionActivationSupportsText</key>
<true/>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
</dict>
Share Extension-ni xatcho‘plar ilovasi uchun Swift-da yaratishning amaliy misolini ko‘rib chiqaylik. Kengaytma Safari-dan URL oladi, oldindan ko‘rish bilan interfeysni ko‘rsatadi va havolani App Group-da saqlaydi. SLComposeServiceViewController matn maydoni va Post tugmasi bilan tayyor UI ni ta’minlaydi.
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)
}
}
}
}
Kontent yuborilgandan so‘ng, kengaytma completeRequest chaqiruvi bilan ishini tugatadi — bu majburiy qadamdir, usiz tizim kengaytma jarayonini bo‘shatmaydi. Muhim: Share Extension cheklangan muhitda ishlaydi, tarmoqqa va fayl tizimiga cheklangan kirish bilan — kontentni yuklash uchun fon seanslaridan foydalaning.
Share Extension turli xil kirish ma’lumot turlarini to‘g‘ri qayta ishlashi kerak: matn, tasvirlar, video, URL va fayllar. Har bir tur uchun o‘z UTI va o‘z ma’lumot olish metodi ishlatiladi. Universal qayta ishlash — hasItemConformingToTypeIdentifier tekshiruvi bilan attachment.attachments bo‘ylab sikl orqali.
Tasvirlar public.image sifatida uzatiladi, UIImage yoki Data orqali olinishi mumkin. Katta tasvirlar uchun saqlashdan oldin jpegData(compressionQuality:) dan foydalaning. Share Extension foydalanuvchining aniq ruxsatisiz original tasvirni o‘zgartirmasligi kerak. Originalni App Group-da saqlash va interfeysda ko‘rsatish uchun oldindan ko‘rish yaratish tavsiya etiladi.
Safari va boshqa brauzerlar URL-ni public.url, tanlangan matnni esa public.plain-text sifatida uzatadi. Bitta NSExtensionItem ikkala turni bir vaqtda o‘z ichiga olishi mumkin — sahifa URL-i va unda tanlangan matn. Share Extension barcha attachment-larni tekshirishi va tegishli ma’lumotlarni olishi kerak. Kombinatsiyalangan ssenariy: URL-ni xatcho‘p sifatida, matnni esa unga eslatma sifatida saqlash.
Share Extension va asosiy ilova turli jarayonlarda ishlaydi va fayl tizimiga umumiy kirishga ega emas. Ma’lumot almashish uchun App Groups mexanizmi ishlatiladi: group.* identifikatori bilan umumiy konteyner. Ma’lumotlar App Group-da saqlangandan so‘ng, kengaytma ilovani CFNotificationCenter yoki Darwin Notify orqali xabardor qiladi.
App Groups target-ning Capabilities bo‘limida yoqiladi: “App Groups” ni tanlang va identifikator qo‘shing (masalan, group.com.example.myapp). Ikkala target — asosiy ilova va kengaytma — bir xil guruhga kirishga ega bo‘lishi kerak. UserDefaults suite minimal yuk bilan umumiy omborda ma’lumotlarni o‘qish va yozish imkonini beradi.
// App Group-dan Share Extension orqali ma'lumotlarni saqlash
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()
Tez-tez so’raladigan savollar
Share Extension boshqa ilovalardan kontentni sizning ilovangizga qabul qiladi. Action Extension esa aksincha, kontent ustida xost-ilova ichida harakat qiladi — matn tarjimasi, rasmni o‘zgartirish. Share Extension — qabul, Action Extension — transformatsiya.
Ilovangizning kontent turiga bog‘liq. Xatcho‘plar uchun — public.url. Foto muharriri uchun — public.image. Eslatmalar uchun — public.plain-text. Bir necha tur uchun AND/OR predikatlari kombinatsiyasi bilan NSExtensionActivationRule dan foydalaning.
Tez-tez uchraydigan sabab — noto‘g‘ri NSExtensionActivationRule yoki UTI mos kelmasligi. Info.plist da tekshiring: aktivlashtirish qoidasi sinovdan o‘tayotgan kontent turiga mos kelishi kerak. Shuningdek, kengaytmaning Settings → ilovangiz → Siri & Search bo‘limida yoqilganligiga ishonch hosil qiling. Xcode clean build ko‘pincha muammoni hal qiladi.
Tizim taxminan 30 soniya ajratadi. Shundan so‘ng iOS kengaytma jarayonini majburiy tugatadi. Uzoq muddatli operatsiyalar uchun fon NSURLSession dan foydalaning, natija ilovaning keyingi ishga tushirilishida qayta ishlanadi.
Ha, SLComposeServiceViewController o‘rniga oddiy UIViewController ishlatilishi mumkin. Bunday holda interfeysni to‘liq boshqarasiz. Biroq yuborish va bekor qilish tugmalarini o‘zingiz amalga oshirishingiz kerak. Shaxsiy interfeys nostandart kontentni qayta ishlash ssenariylari uchun tavsiya etiladi.
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.