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 — 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 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 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.
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.
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.
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.
| Komponent | Təyinat | Xüsusiyyətlər |
|---|---|---|
| Target | Xcode-da genişlənmə targeti | İdentifikatoru olan ayrıca bundle |
| ViewController | İnterfeys və emal məntiqi | SLComposeServiceViewController və ya özəl |
| Info.plist | Aktivasiya və UTI konfiqurasiyası | Predikatlarla NSExtensionActivationRule |
| App Groups | Tətbiqlə ümumi anbar | Məlumat ötürmək üçün UserDefaults suite |
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.
// 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-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.
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.
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ə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.
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.
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 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.
// 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 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.
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.
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.
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.
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ə
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.
Həm də oxuyun