Share Extension — bu nima, qanday ishlaydi va kengaytmani ishlab chiqish

Muallif: IT Sectr Nashr etilgan: 2026-06-15 O'qish vaqti: 10 daq

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 — kontentni boshqa dasturlardan ilovaga yuborish uchun iOS kengaytmasi.
  • NSExtensionItem — xost-ilova va kengaytma o’rtasida ma’lumot uzatish uchun konteyner.
  • Info.plist — kengaytma qayta ishlaydigan kontent turlarining konfiguratsiyasi.
  • SLServiceTypes — eski rejim uchun ijtimoiy tarmoqlarga (Twitter, Facebook) xaritalash.
  • App Groups — kengaytma va ilova o’rtasida ma’lumot uzatish uchun umumiy ombor.

Share Extension nima

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).

Nima uchun Share Extension ilova uchun muhim

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 qanday ishlaydi

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.

Kengaytmaning hayot aylanishi

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.

Ma’lumot turlari va Uniform Type Identifiers

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.

Kengaytma arxitekturasi

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.

KomponentVazifasiXususiyatlari
TargetXcode-dagi kengaytma targetiIdentifikatorli alohida bundle
ViewControllerInterfeys va qayta ishlash mantig‘iSLComposeServiceViewController yoki shaxsiy
Info.plistAktivlashtirish va UTI konfiguratsiyasiPredikatlar bilan NSExtensionActivationRule
App GroupsIlova bilan umumiy omborMa’lumot uzatish uchun UserDefaults suite

NSExtensionActivationRule

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.

objective-c
// 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 yaratish

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.

swift
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.

Kontent turlarini qayta ishlash

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.

Tasvirlarni qayta ishlash

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.

URL va matnni qayta ishlash

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.

App Groups va ma’lumot uzatish

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-ni sozlash

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.

swift
// 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 Action Extension-dan nima bilan farq qiladi?

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.

Info.plist da qanday UTI-larni ko‘rsatish kerak?

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.

Nima uchun Share Extension Share Sheet-da ko‘rinmaydi?

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.

Share Extension-ga qayta ishlash uchun qancha vaqt beriladi?

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.

Share Extension-da shaxsiy interfeysni ko‘rsatish mumkinmi?

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

  • Share Extension — ilovani tizimning “Ulashish” menyusiga qo‘shadigan iOS kengaytmasi.
  • Kontent NSExtensionItem orqali Uniform Type Identifiers bilan uzatiladi.
  • Aktivlashtirish konfiguratsiyasi Info.plist da NSExtensionActivationRule orqali beriladi.
  • SLComposeServiceViewController — oldindan ko‘rish va yuborish bilan asosiy interfeys.
  • App Groups — kengaytma va ilova o‘rtasida ma’lumot almashish mexanizmi.
  • Share Extension cheklangan muhitda ishlaydi (30 s, cheklangan kirish).
  • Share Extension-ga ega ilovalar 35% ko‘proq foydalanuvchi kontentini oladi.

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.

Loyihani muhokama qilish

Shuningdek o'qing