Share Extension — bu nədir, necə işləyir və genişlənmənin hazırlanması

Müəllif: IT Sectr Dərc olunub: 2026-06-15 Oxuma vaxtı: 10 dəq

Share Extension — tətbiqinizi sistemin “Paylaş” menyusuna (Share Sheet) əlavə edən iOS genişlənməsidir. İstifadəçi Safari, Şəkillər, Fayllar və ya hər hansı digər tətbiqdən məzmunu birbaşa sizin tətbiqinizə göndərə bilər — kopyalama və pəncərələr arasında keçid etmədən. Apple (2024) məlumatlarına görə, Share Extension-a malik tətbiqlər paylaşma imkanı olmayan tətbiqlərdən 35% daha çox istifadəçi məzmunu alır. Genişlənmə mətni, şəkilləri, videoları, URL-ləri və faylları vahid NSExtensionItem interfeysi vasitəsilə emal edir.

Əsas məqamlar

  • Share Extension — məzmunu digər proqramlardan tətbiqə göndərmək üçün iOS genişlənməsi.
  • NSExtensionItem — host-tətbiq və genişlənmə arasında məlumat ötürmək üçün konteyner.
  • Info.plist — genişlənmənin emal etdiyi məzmun növlərinin konfiqurasiyası.
  • SLServiceTypes — legacy rejimi üçün sosial şəbəkələrə (Twitter, Facebook) xəritələmə.
  • App Groups — genişlənmə və tətbiq arasında məlumat ötürmək üçün ümumi anbar.

Share Extension nədir

Share Extension — hər hansı tətbiqdə məzmun seçərkən sistemin “Paylaş” menyusunda görünən iOS app extension növüdür. İstifadəçi Safari-də mətni seçir, “Paylaş” düyməsini basır və tətbiqinizi mövcud hərəkətlər siyahısında görür. Seçimdən sonra məzmun emal üçün genişlənməyə ötürülür: saxlama, dərc etmə, göndərmə və ya çevirmə.

Action Extension-dən fərqli olaraq, Share Extension xarici tətbiqlərdən məzmun qəbul etməyə ixtisaslaşmışdır. Action Extension isə əksinə, məlumatları tətbiqinizdən kənara göndərir. Share Extension istifadəçi məzmunu üçün giriş nöqtəsidir, istifadəçi cəlbinin əsas elementidir: istifadəçi tətbiqi Share Extension vasitəsilə sınayır, tam quraşdırmadan. App Store yeganə funksiyası Share Extension vasitəsilə reklam göstərmək olan tətbiqləri qadağan edir (App Store Review Guideline 4.2).

Share Extension nə üçün tətbiq üçün vacibdir

Share Extension giriş maneəsini azaldır: istifadəçi məzmunu tətbiqinizə tanış kontekstdən — brauzerdən, qalereyadan, fayl menecerindən göndərir. Branch (2024) məlumatlarına görə, Share Extension-a malik tətbiqlər 7-ci gündə 28% daha yüksək retention göstərir. Əlavə effekt — virallıq: istifadəçi hər dəfə tətbiqinizi Share Sheet-də gördükdə, reklam xərcləri olmadan passiv brendinq baş verir.

Share Extension necə işləyir

Share Extension mexanizmi məzmunun sistem NSExtensionItem konteynerləri vasitəsilə ötürülməsinə əsaslanır. Host-tətbiq (Safari, Şəkillər) seçilmiş məzmunu növü göstərilməklə (public.image, public.url, public.plain-text) NSExtensionItem-ə yığır. Sistem bu konteyneri genişlənməyə ötürür, o da məlumatları extensionContext.inputItems vasitəsilə çıxarır.

Genişlənmənin həyat dövrü

Share Extension məhdud icra müddəti olan ayrıca prosesdə işə düşür — emal üçün təxminən 30 saniyə. Genişlənmə uzunmüddətli əməliyyatları sinxron yerinə yetirməməlidir. Böyük faylları yükləmək üçün fon konfiqurasiyası ilə NSURLSession istifadə edin. SLComposeServiceViewController — məzmunun ön baxışı və göndərmə düyməsi ilə Share Extension üçün əsas sinif.

Məlumat növləri və Uniform Type Identifiers

iOS ötürülən məzmunun növünü təyin etmək üçün Uniform Type Identifiers (UTI) istifadə edir. Share Extension üçün əsas UTI-lər: public.image (şəkillər, ekran görüntüləri), public.url (linklər), public.plain-text (mətn), public.video (video fayllar) və public.file-url (fayllar). Genişlənmə dəstəklənən UTI-ləri Info.plist-də NSExtensionActivationRule açarı vasitəsilə qeydiyyatdan keçirir.

Genişlənmənin arxitekturası

Share Extension üç komponentdən ibarətdir: Xcode-da hədəf target, SLComposeServiceViewController və Info.plist konfiqurasiyası. Arxitektura hansı məzmun növlərinin emal edildiyini, interfeysin necə göstərildiyini və məlumatların harada saxlandığını müəyyən edir.

KomponentTəyinatXüsusiyyətlər
TargetXcode-da genişlənmə targetiİdentifikatoru olan ayrıca bundle
ViewControllerİnterfeys və emal məntiqiSLComposeServiceViewController və ya özəl
Info.plistAktivasiya və UTI konfiqurasiyasıPredikatlarla NSExtensionActivationRule
App GroupsTətbiqlə ümumi anbarMəlumat ötürmək üçün UserDefaults suite

NSExtensionActivationRule

Share Extension konfiqurasiyasının əsas elementi — aktivasiya qaydası. O, genişlənmənin Share Sheet-də hansı şərtlərdə görünəcəyini müəyyən edir. Qayda Info.plist-də məhdudiyyətlərlə lüğət kimi verilir: maksimum şəkil sayı, minimum mətn uzunluğu, URL-nin məcburi olması. Standart qayda genişlənməni hər hansı bir məzmun növü üçün aktivləşdirir.

objective-c
// Info.plist — Share Extension üçün NSExtensionActivationRule
<key>NSExtensionActivationRule</key>
<dict>
    <key>NSExtensionActivationSupportsImageWithMaxCount</key>
    <integer>5</integer>
    <key>NSExtensionActivationSupportsText</key>
    <true/>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
</dict>

Share Extension yaratmaq

Share Extension-in əlfəcin tətbiqi üçün Swift-də yaradılmasının praktiki nümunəsinə baxaq. Genişlənmə Safari-dən URL alır, ön baxış ilə interfeys göstərir və linki App Group-da saxlayır. SLComposeServiceViewController mətn sahəsi və Post düyməsi ilə hazır UI təmin edir.

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

Məzmun göndərildikdən sonra genişlənmə completeRequest çağırışı ilə işini bitirir — bu məcburi addımdır, onsuz sistem genişlənmə prosesini azad etməyəcək. Vacib: Share Extension məhdud mühitdə işləyir, şəbəkəyə və fayl sisteminə məhdud girişlə — məzmun yükləmək üçün fon seanslarından istifadə edin.

Məzmun növlərinin emalı

Share Extension müxtəlif giriş məlumat növlərini düzgün emal etməlidir: mətn, şəkillər, videolar, URL-lər və fayllar. Hər növ üçün öz UTI və öz məlumat çıxarma metodu istifadə olunur. Universal emal — hasItemConformingToTypeIdentifier yoxlaması ilə attachment.attachments üzrə dövr vasitəsilə.

Şəkillərin emalı

Şəkillər public.image kimi ötürülür, UIImage və ya Data vasitəsilə əldə edilə bilər. Böyük şəkillər üçün saxlamaqdan əvvəl jpegData(compressionQuality:) istifadə edin. Share Extension istifadəçinin açıq icazəsi olmadan orijinal şəkli dəyişdirməməlidir. Orijinalı App Group-da saxlamaq və interfeysdə göstərmək üçün ön baxış yaratmaq tövsiyə olunur.

URL və mətnin emalı

Safari və digər brauzerlər URL-i public.url, seçilmiş mətni isə public.plain-text kimi ötürür. Bir NSExtensionItem hər iki növü eyni anda ehtiva edə bilər — səhifənin URL-i və üzərində seçilmiş mətn. Share Extension bütün attachment-ları yoxlamalı və müvafiq məlumatları çıxarmalıdır. Kombinə edilmiş ssenari: URL-i əlfəcin kimi, mətni isə ona qeyd kimi saxlamaq.

App Groups və məlumat ötürülməsi

Share Extension və əsas tətbiq müxtəlif proseslərdə işləyir və fayl sisteminə ümumi girişə malik deyil. Məlumat mübadiləsi üçün App Groups mexanizmi istifadə olunur: group.* identifikatoru ilə ümumi konteyner. Məlumatlar App Group-da saxlandıqdan sonra genişlənmə tətbiqi CFNotificationCenter və ya Darwin Notify vasitəsilə xəbərdar edir.

App Groups-un qurulması

App Groups target-in Capabilities bölməsində aktivləşdirilir: “App Groups” seçin və identifikator əlavə edin (məsələn, group.com.example.myapp). Hər iki target — əsas tətbiq və genişlənmə — eyni qrupa girişə malik olmalıdır. UserDefaults suite minimal yüklə ümumi anbarda məlumatları oxumağa və yazmağa imkan verir.

swift
// App Group-dan Share Extension vasitəsilə məlumatların saxlanması
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 verilən suallar

Share Extension Action Extension-dən nə ilə fərqlənir?

Share Extension digər tətbiqlərdən məzmunu sizin tətbiqinizə qəbul edir. Action Extension isə əksinə, məzmun üzərində host-tətbiq daxilində hərəkət edir — mətn tərcüməsi, şəkil dəyişikliyi. Share Extension — qəbul, Action Extension — transformasiya.

Info.plist-də hansı UTI-ləri göstərmək lazımdır?

Tətbiqinizin məzmun növündən asılıdır. Əlfəcinlər üçün — public.url. Foto redaktoru üçün — public.image. Qeydlər üçün — public.plain-text. Bir neçə növ üçün AND/OR predikatları kombinasiyası ilə NSExtensionActivationRule istifadə edin.

Niyə Share Extension Share Sheet-də görünmür?

Tez-tez rast gəlinən səbəb — düzgün olmayan NSExtensionActivationRule və ya UTI uyğunsuzluğu. Info.plist-də yoxlayın: aktivasiya qaydası test edilən məzmun növünə uyğun olmalıdır. Həmçinin genişlənmənin Settings → tətbiqiniz → Siri & Search bölməsində aktiv olduğundan əmin olun. Xcode clean build çox vaxt problemi həll edir.

Share Extension-a emal üçün nə qədər vaxt verilir?

Sistem təxminən 30 saniyə ayırır. Bundan sonra iOS genişlənmə prosesini məcburi bitirir. Uzunmüddətli əməliyyatlar üçün fon NSURLSession-dan istifadə edin, nəticə tətbiqin növbəti işə salınmasında emal olunur.

Share Extension-da özəl interfeys göstərmək mümkündürmü?

Bəli, SLComposeServiceViewController əvəzinə adi UIViewController istifadə edilə bilər. Bu halda interfeysi tam idarə edirsiniz. Lakin göndərmə və ləğv düymələrini özünüz həyata keçirməlisiniz. Özəl interfeys qeyri-standart məzmun emal ssenariləri üçün tövsiyə olunur.

Nəticə

  • Share Extension — tətbiqi sistemin “Paylaş” menyusuna əlavə edən iOS genişlənməsi.
  • Məzmun NSExtensionItem vasitəsilə Uniform Type Identifiers ilə ötürülür.
  • Aktivasiya konfiqurasiyası Info.plist-də NSExtensionActivationRule ilə verilir.
  • SLComposeServiceViewController — ön baxış və göndərmə ilə əsas interfeys.
  • App Groups — genişlənmə və tətbiq arasında məlumat mübadiləsi mexanizmi.
  • Share Extension məhdud mühitdə işləyir (30 s, məhdud giriş).
  • Share Extension-a malik tətbiqlər 35% daha çox istifadəçi məzmunu alır.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun