Action Extension iOS genişlənməsidir, digər proqramlardan məzmun ilə istifadəçi əməliyyatlarını kontekst dəyişmədən yerinə yetirir. Share Extension-dən fərqli olaraq, məlumatları başqa proqrama göndərir, Action Extension məzmunu yerində çevirir: mətni tərcümə edir, şəkil filtrlərini dəyişdirir, orfoqrafiyanı yoxlayır və ya PDF yaradır. Apple (2024) məlumatlarına görə, Action Extension Share Extension-dan sonra ikinci ən populyar genişlənmə növüdür və 42% proqramda „Məhsuldarlıq” kateqoriyasında istifadə olunur. Əsas proqramı işə salmadan ani hərəkət — istifadəçi üçün əsas üstünlükdür.
Əsas məqamlar
Action Extension — iOS app extension növüdür, host proqramın kontekstində birbaşa məzmun üzərində əməliyyat yerinı yetirməyə imkan verir. İstifadəçi Safari-də mətni seçir, „Hərəkətlər” düyməsini basır və məsələn „Orfoqrafiyanı yoxla” seçir — genişlənmə mətni emal edir və brauzerdən çıxmadan nəticəni qaytarır. Genişlənmə giriş məlumatlarını NSExtensionContext vasitəsilə alır və dəyişdirilmiş məzmunu geri qaytara bilər.
Action Extension iOS 8-də app extensions arxitekturasının bir hissəsi kimi ortaya çıxdı. Onun əsas xüsusiyyəti genişlənmənin öz interfeysinin olmaması (istəyə bağlı) və host proqramı kontekstində işləməsidir. İstifadəçi cari ekranı tərk etmir, bu da minimal koqnitiv fasilə təmin edir. Apple-a görə, Action Extension eyni anda host proqramının məzmununu oxuya və dəyişdirə bilən yeganə genişlənmə növüdür (NSExtensionContext vasitəsilə nəticənin qaytarılması ilə).
Action Extension müxtəlif ssenarilərdə istifadə olunur: brauzerdə mətnin tərcüməsi, veb səhifədən PDF yaradılması, qalereyada şəklə filtr tətbiqi, istənilən mətn sahəsində orfoqrafiyanın yoxlanması, URL-nin qısaltılması, mətnin şifrələnməsi və əlamətlərə əlavə edilməsi. Action Extension-in universallığı onu „Köməkçi proqramlar” və „Məhsuldarlıq” kateqoriyaları üçün məşhur alət edir.
Action Extension və Share Extension tez-tez qarışdırılır, lakin onların təyinatı prinsipial olaraq fərqlidir. Share Extension host proqramından məzmunu sizin proqrama göndərir; Action Extension məzmunu emal edir və geri qaytarır. Fərq arxitekturaya, istifadəçi təcrübəsinə və Info.plist konfiqurasiya tələblərinə təsir edir.
| Xarakteristika | Action Extension | Share Extension |
|---|---|---|
| Təyinat | Məzmunun çevrilməsi | Məzmunun proqrama ötürülməsi |
| Interfeys | İstəyə bağlı (özəl) | SLComposeServiceViewController |
| Məlumatın qaytarılması | Bəli, completeRequest vasitəsilə | Xeyr |
| Kontekst | Host proqramında qalır | Genişlənməyə keçir |
| Menyuda mövqe | Action Sheet (yuxarı hissə) | Share Sheet (aşağı hissə) |
| Tipik hərəkət | Tərcümə, korreksiya, filtr | Saxlama, dərc etmə |
Action Extension „Paylaş” və ya „...” düyməsi basıldıqda hərəkət menyusunda (Action Sheet) görünür. iOS avtomatik olaraq Action Extensions-i vərəqin yuxarı hissəsinə (hərəkətlər), Share Extensions-i isə aşağı hissəyə (proqramlar) yerləşdirir. İstifadəçi ssenarisi: mətni seçdi → „Hərəkətlər” basdı → Action Extension seçdi → proqramları dəyişmədən işlənmiş nəticə aldı.
Action Extension Xcode-da target, interfeysin göstərilməsi üçün UIViewController (istəyə bağlı), məlumat giriş-çıxışı üçün NSExtensionContext və Info.plist konfiqurasiyasından ibarətdir. Arxitektura Share Extension-dən daha sadədir: məcburi compose interfeysi yoxdur və genişlənmə tamamilə UI olmadan işləyə bilər.
Target — əsas proqramdan miras alınan identifikatorla ayrı bundle. UIViewController — tərəqqi, parametrlər və ya nəticəni göstərmək üçün isteğə bağlı interfeys. NSExtensionContext — giriş məlumatları (inputItems) və nəticəni qaytarmaq üçün completeRequest metodu olan konteyner. Info.plist — NSExtensionActivationRule vasitəsilə aktivasiya konfiqurasiyası və dəstəklənən məzmun növlərini göstərmək üçün atributlar (NSExtensionAttributes).
Action Extension giriş məlumatlarını extensionContext?.inputItems vasitəsilə alır — NSExtensionItem massivi. Hər bir element məlumatları və UTI ilə əlavələr ehtiva edir. Emaldan sonra genişlənmə completeRequest(returningItems:) çağırır çıxış NSExtensionItem massivi ilə. Host proqramı işlənmiş məlumatları alır və göstərir. Asinxron model: genişlənmə uzun müddətli əməliyyatları yerinə yetirə bilər, konteksti 30 saniyəyə qədər saxlaya bilər.
Swift-də seçilmiş mətni tərcümə etmək üçün Action Extension yaradılmasını nəzərdən keçirək. Genişlənmə host proqramından mətn alır, tərcümə serverinə göndərir və nəticəni qaytarır. ActionViewController — Xcode target əlavə edərkən yaratdığı əsas 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
}
}
}
}
}
}
Emaldan sonra genişlənmə nəticəni host proqramına qaytarır. completeRequest çıxış məlumatları ilə — alternativ ssenari, genişlənmə UI göstərmir və dərhal işlənmiş məzmunu qaytarır.
// Emal edilmiş mətnin host proqramına qaytarılması
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 iki rejimdə işləyə bilər: UI ilə və UI olmadan. UI olmadan rejimdə genişlənmə əməliyyatı tamamilə fonda yerinə yetirir və emaldan dərhal sonra completeRequest çağırır. UI ilə rejimdə genişlənmə kontroller göstərir, istifadəçi əməliyyatı təsdiqləyir və yalnız bundan sonra completeRequest nəticəni göndərir. Rejim seçimi əməliyyatın mürəkkəbliyindən və istifadəçi girişinin zəruriliyindən asılıdır.
loadItem(forTypeIdentifier:) metodu asinxron işləyir — məlumatlar böyük ola bilər (şəkillər, videolar). NSItemProvider axın yükləmə və keşləməni idarə edir. Şəkillər üçün kUTTypeImage, fayllar üçün kUTTypeFileURL istifadə edin. Əhəmiyyətli: loadItem fon sapında çağırıla bilər — UI-ni yalnız DispatchQueue.main vasitəsilə yeniləyin.
Action Extension işlənmiş məlumatları NSExtensionItem massivi ilə completeRequest vasitəsilə qaytarır. Hər bir element çıxış məlumat növünə uyğundur. Host proqramı orijinal məzmunu işlənmişlə əvəz edə bilər — məsələn, orijinal şəkli filtrlənmişlə əvəz edə bilər. NSExtensionItem girişdəki UTI-ləri və əlavələri (məsələn, veb məzmun üçün public.html) dəstəkləyir.
Action Extension onlarla ssenaridə tətbiq olunur — sadə köməkçi proqramlardan mürəkkəb biznes proseslərinə qədər. Klassik nümunələr mətn, qrafik və fayl əməliyyatlarını, həmçinin veb məzmun ilə inteqrasiyanı əhatə edir.
Mətn üçün Action Extension: tərcümə, orfoqrafiya yoxlaması, simvol sayı, registrin dəyişdirilməsi, şifrələmə, mətndən QR kodu yaradılması. İstifadəçi mətn sahəsi olan istənilən proqramda (Safari, Qeydlər, Poçt) mətni seçir və bir klik lə əməliyyatı yerinə yetirir. Kodun sintaksis vurğulanması, Markdown formatlaşdırılması və URL-nin qısaltılması — təcrübəli istifadəçilər üçün məşhur Action Extension nümunələri.
Şəkillər üçün Action Extension təklif edir: filtrlərin tətbiqi, kəsmə, ölçünün dəyişdirilməsi, formatların konvertasiyası (HEIC-dən JPEG-ə), su nişanı əlavə edilməsi, mətnin tanınması (OCR) və sıxışdırma. Şəkillərin emalı sürətli olmalıdır — istifadəçi 2–3 saniyə ərzində nəticə gözləyir. Ağır əməliyyatlar üçün GPU-da Core Image və ya fon növbələri istifadə edin.
URL üçün Action Extension: veb səhifədən PDF yaradılması, Pocket/Pinterest-ə yadda saxlanması, sayt sürətinin yoxlanması, səhifənin arxivlənməsi, Open Graph metadatanın alınması, səhifənin ekran görüntüsünün yaradılması. PDF generasiyası — ən çox tələb olunan ssenarilərdən biri: istifadəçi üçüncü tərəf xidmətlərə müraciət etmədən veb səhifəni PDF-ə çevirir.
Tez-tez verilən suallar
Share Extension host proqramından məzmunu sizin proqrama göndərir. Action Extension məzmunu yerində emal edir və nəticəni geri qaytarır. Share — ötürmə, Action — çevirmə. Bu əsas fərq arxitekturanı və UX-i müyyənləşdirir.
Bəli. Əgər əməliyyat istifadəçidən məlumat daxil etməyi tələb etmirsə (məsələn, simvol sayı), genişlənmə onu fonda yerinə yetirə və dərhal completeRequest vasitəsilə nəticəni qaytara bilər. Info.plist-də NSExtensionActivationSupportsWebURL və ya məlumat növünə uyğun başqa UTI göstərilməlidir.
UIActivityViewController və ya standart hərəkət kontrollerlərini dəstəkləyən bütün proqramlarda. Bunlar Safari, Fotoşəkillər, Fayllar, Qeydlər, Poçt və minlərlə üçüncü tərəf proqramlardır. Action Extension iOS üçün standart hərəkət mexanizmlərindən istifadə etməyən proqramlarda işləmir.
extensionContext.completeRequest(returningItems:) vasitəsilə NSExtensionItem massivi ilə. Hər bir çıxış elementi emal edilmiş məlumatlarla NSItemProvider ehtiva edir. Host proqramı nəticəni UIActivityViewController delegatında və ya oxşar callback-də alır.
Genişlənmə 30 saniyə ərzində işləyir, bundan sonra iOS onu məcburi bağlayır. Əsas proqrama birbaşa çıxış yoxdur — yalnız App Groups vasitəsilə. Action Extension tamamlandıqdan sonra fon tapşırıqlarını yerinə yetirə bilməz. Uzun müddətli əməliyyatlar üçün növbəti başlatmada bildirişlə fon NSURLSession istifadə edin.
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