Action Extension, bağlam değiştirmeden diğer uygulamalardaki içerik üzerinde özel eylemler gerçekleştiren bir iOS uzantısıdır. Verileri başka bir uygulamaya gönderen Share Extension'ın aksine, Action Extension içeriği olduğu yerde dönüştürür: metni çevirir, görsel filtrelerini değiştirir, yazım denetimi yapar veya PDF oluşturur. Apple (2024)'a göre Action Extension, Share Extension'dan sonra en popüler ikinci uzantı türüdür ve “Üretkenlik” kategorisindeki uygulamaların %42'sinde kullanılır. Ana uygulamayı başlatmadan anında eylem gerçekleştirmek, kullanıcı için temel avantajdır.
Anahtar Noktalar
Action Extension, ana uygulamanın bağlamında doğrudan içerik üzerinde eylemler gerçekleştirmeye olanak tanıyan bir iOS uygulama uzantısı türüdür. Kullanıcı Safari'de metin seçer, “Eylemler” öğesine dokunur ve örneğin “Yazım Denetimi” seçeneğini seçer — uzantı metni işler ve tarayıcıdan ayrılmadan sonucu döndürür. Uzantı, giriş verilerini NSExtensionContext aracılığıyla alır ve değiştirilmiş içeriği geri döndürebilir.
Action Extension, iOS 8'de uygulama uzantıları mimarisinin bir parçası olarak ortaya çıktı. Temel özelliği, uzantının kendi arayüzüne sahip olmaması (isteğe bağlı) ve ana uygulamanın bağlamında çalışmasıdır. Kullanıcı mevcut ekrandan ayrılmaz, bu da minimum bilişsel sürtünme sağlar. Apple'a göre Action Extension, ana uygulama içeriğini aynı anda okuyup değiştirebilen tek uzantı türüdür (sonuç döndürmeli NSExtensionContext aracılığıyla).
Action Extension çeşitli senaryolarda kullanılır: tarayıcıda metin çevirme, web sayfasından PDF oluşturma, galerideki fotoğrafa filtre uygulama, herhangi bir metin alanında yazım denetimi, URL kısaltma, metin şifreleme ve yer imi ekleme. Çok yönlülük, Action Extension'ı “Araçlar” ve “Üretkenlik” kategorilerindeki uygulamalar için popüler bir araç haline getirir.
Action Extension ve Share Extension sıklıkla karıştırılır, ancak amaçları temelde farklıdır. Share Extension, içeriği ana uygulamadan sizin uygulamanıza gönderir; Action Extension içeriği işler ve geri döndürür. Fark, mimariyi, kullanıcı deneyimini ve Info.plist yapılandırma gereksinimlerini etkiler.
| Özellik | Action Extension | Share Extension |
|---|---|---|
| Amaç | İçerik dönüşümü | İçeriği uygulamaya aktarma |
| Arayüz | İsteğe bağlı (özel) | SLComposeServiceViewController |
| Veri döndürme | Evet, completeRequest ile | Hayır |
| Bağlam | Ana uygulamada kalır | Uzantıya geçer |
| Menü konumu | Action Sheet (üst kısım) | Share Sheet (alt kısım) |
| Tipik eylem | Çeviri, düzeltme, filtre | Kaydetme, yayınlama |
Action Extension, “Paylaş” veya “...” düğmesine dokunulduğunda eylem menüsünde (Action Sheet) görünür. iOS, Action Extensions'ları otomatik olarak sayfanın üst kısmına (eylemler) ve Share Extensions'ları alt kısmına (uygulamalar) yerleştirir. Kullanıcı senaryosu: metin seçti → “Eylemler” öğesine dokundu → sizin Action Extension'ınızı seçti → uygulama değiştirmeden işlenmiş sonucu aldı.
Action Extension, Xcode'da bir hedef, arayüzü görüntülemek için UIViewController (isteğe bağlı), veri giriş/çıkışı için NSExtensionContext ve Info.plist yapılandırmasından oluşur. Mimari, Share Extension'dan daha basittir: zorunlu bir oluşturma arayüzü yoktur ve uzantı tamamen UI olmadan çalışabilir.
Hedef — ana uygulamadan devralınan bir tanımlayıcıya sahip ayrı bir paket. UIViewController — ilerleme, ayarlar veya sonuçları görüntülemek için isteğe bağlı arayüz. NSExtensionContext — giriş verileri (inputItems) ve sonuç döndürmek için completeRequest yöntemiyle bir kapsayıcı. Info.plist — NSExtensionActivationRule ve desteklenen içerik türlerini belirtmek için öznitelikler (NSExtensionAttributes) aracılığıyla etkinleştirme yapılandırması.
Action Extension, giriş verilerini extensionContext?.inputItems aracılığıyla alır — bir NSExtensionItem dizisi. Her öğe, veri ve UTİ içeren ekler içerir. İşlemeden sonra uzantı, çıktı NSExtensionItem dizisiyle completeRequest(returningItems:) öğesini çağırır. Ana uygulama, işlenmiş verileri alır ve görüntüler. Zaman uyumsuz model: uzantı, bağlamı 30 saniyeye kadar tutarak uzun süreli işlemler gerçekleştirebilir.
Seçili metni çevirmek için Swift'te bir Action Extension oluşturmayı inceleyelim. Uzantı, ana uygulamadan metin alır, bir çeviri sunucusuna gönderir ve sonucu döndürür. ActionViewController, Xcode'un bir hedef eklerken oluşturduğu temel denetleyicidir.
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
}
}
}
}
}
}
İşlemeden sonra uzantı, sonucu ana uygulamaya döndürür. Çıktı verileriyle completeRequest, uzantının bir kullanıcı arayüzü göstermeyip işlenmiş içeriği hemen döndürdüğü alternatif bir senaryodur.
// Returning processed text to host app
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 modda çalışabilir: UI'lı ve UI'sız. UI'sız modda uzantı, eylemi tamamen arka planda gerçekleştirir ve işlemeden hemen sonra completeRequest'i çağırır. UI'lı modda uzantı bir denetleyici gösterir, kullanıcı eylemi onaylar ve ancak bundan sonra completeRequest sonucu gönderir. Mod seçimi, eylemin karmaşıklığına ve kullanıcı girişi ihtiyacına bağlıdır.
loadItem(forTypeIdentifier:) yöntemi zaman uyumsuz çalışır — veriler büyük olabilir (görseller, videolar). NSItemProvider akış ve önbellekleme yönetir. Görseller için kUTTypeImage, dosyalar için kUTTypeFileURL kullanın. Önemli: loadItem arka plan iş parçacığında çağrılabilir — UI'yı yalnızca DispatchQueue.main aracılığıyla güncelleyin.
Action Extension, işlenmiş verileri bir NSExtensionItem dizisiyle completeRequest aracılığıyla döndürür. Her öğe, çıktı veri türüne karşılık gelir. Ana uygulama, orijinal içeriği işlenmiş içerikle değiştirebilir — örneğin, orijinal görseli filtrelenmiş bir görselle değiştirebilir. NSExtensionItem, girişle aynı UTİ'leri ve ek UTİ'leri (örneğin, web içeriği için public.html) destekler.
Action Extension, basit araçlardan karmaşık iş akışlarına kadar düzinelerce senaryoda kullanılır. Klasik örnekler metin, grafik ve dosya işlemlerinin yanı sıra web içeriği entegrasyonunu kapsar.
Metin için Action Extension: çeviri, yazım denetimi, karakter sayımı, büyük/küçük harf değiştirme, şifreleme, metinden QR kodu oluşturma. Kullanıcı, metin alanı olan herhangi bir uygulamada (Safari, Notlar, Posta) metin seçer ve tek dokunuşla eylemi gerçekleştirir. Kod sözdizimi vurgulama, Markdown biçimlendirme ve URL kısaltma, ileri düzey kullanıcılar için popüler Action Extension örnekleridir.
Görseller için Action Extension şunları sunar: filtre uygulama, kırpma, yeniden boyutlandırma, biçim dönüştürme (HEIC'den JPEG'e), filigran ekleme, metin tanıma (OCR) ve sıkıştırma. Görsel işleme hızlı olmalıdır — kullanıcı 2–3 saniye içinde sonuç bekler. Ağır işlemler için GPU'da Core Image veya arka plan kuyrukları kullanın.
URL'ler için Action Extension: web sayfasından PDF oluşturma, Pocket/Pinterest'e kaydetme, site hızını kontrol etme, sayfayı arşivleme, Open Graph meta verilerini alma, sayfa ekran görüntüsü oluşturma. PDF oluşturma en çok talep edilen senaryolardan biridir: kullanıcı, üçüncü taraf hizmetleri açmadan web sayfasını PDF'ye dönüştürür.
Sıkça Sorulan Sorular
Share Extension, içeriği ana uygulamadan sizin uygulamanıza gönderir. Action Extension içeriği olduğu yerde işler ve sonucu geri döndürür. Share — aktarım, Action — dönüşüm. Bu temel fark, mimariyi ve UX'i belirler.
Evet. Eylem kullanıcı girişi gerektirmiyorsa (örneğin, karakter sayımı), uzantı bunu arka planda gerçekleştirebilir ve completeRequest aracılığıyla sonucu hemen döndürebilir. Info.plist'te NSExtensionActivationSupportsWebURL veya veri türüyle eşleşen başka bir UTİ belirtmeniz gerekir.
UIActivityViewController veya standart eylem denetleyicilerini destekleyen herhangi bir uygulamada görünür. Bunlara Safari, Fotoğraflar, Dosyalar, Notlar, Posta ve binlerce üçüncü taraf uygulama dahildir. Action Extension, iOS standart eylem mekanizmalarını kullanmayan uygulamalarda çalışmaz.
extensionContext.completeRequest(returningItems:) aracılığıyla bir NSExtensionItem dizisiyle. Her çıktı öğesi, işlenmiş verilerle birlikte bir NSItemProvider içerir. Ana uygulama, sonucu UIActivityViewController temsilcisinde veya benzer bir geri aramada alır.
Uzantı en fazla 30 saniye çalışır, ardından iOS onu zorla sonlandırır. Ana uygulamaya doğrudan erişim yoktur — yalnızca App Groups aracılığıyla. Action Extension, tamamlandıktan sonra arka plan görevleri gerçekleştiremez. Uzun işlemler için, bir sonraki başlatmada bildirim içeren arka plan NSURLSession kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun