Action Extension: nedir, nasıl çalışır ve uzantı geliştirme

Yazar: IT Sectr Yayınlanma: 2026-06-15 Okuma süresi: 10 dk

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 uygulamada içerik dönüştürmek için iOS uzantısı.
  • NSExtensionContext — giriş ve çıkış verileriyle yürütme bağlamı.
  • UTI — işlenen içeriğin türünü belirlemek için Uniform Type Identifiers.
  • UIActivity — iOS 6–7'de eylemleri uygulamak için eski mekanizma.
  • App Groups — işlenmiş verileri uygulamaya geri aktarma.

Action Extension Nedir

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 Nerelerde Kullanılır

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 vs Share Extension

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.

ÖzellikAction ExtensionShare Extension
Amaçİçerik dönüşümüİçeriği uygulamaya aktarma
Arayüzİsteğe bağlı (özel)SLComposeServiceViewController
Veri döndürmeEvet, completeRequest ileHayır
BağlamAna uygulamada kalırUzantıya geçer
Menü konumuAction Sheet (üst kısım)Share Sheet (alt kısım)
Tipik eylemÇeviri, düzeltme, filtreKaydetme, yayınlama

Kullanıcı Bir Eylemi Nasıl Seçer

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 Mimarisi

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.

Action Extension Bileşenleri

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

NSExtensionContext ve Veri Akışları

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.

Action Extension Oluşturma

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.

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

swift
// 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
)

Veri İşleme ve Sonuç Döndürme

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.

Ekten Veri Yükleme

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.

Değiştirilmiş Verileri Döndürme

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 Kullanım Senaryoları

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 Senaryoları

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.

Grafik Senaryoları

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.

Web Senaryoları

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

Action Extension ve Share Extension arasındaki temel fark nedir?

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.

Bir Action Extension'ın arayüzü olmayabilir mi?

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.

Action Extension hangi uygulamalarda görünür?

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.

İşlenmiş içerik ana uygulamaya nasıl döndürülür?

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.

Action Extension'ın sınırlamaları nelerdir?

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

  • Action Extension — ana uygulamada doğrudan içerik dönüştürmek için iOS uzantısı.
  • Share Extension'dan farkı: NSExtensionContext aracılığıyla işlenmiş verileri döndürür.
  • UI ile veya arayüz olmadan tamamen arka planda çalışabilir.
  • Tüm içerik türlerini destekler: metin, görseller, URL'ler, dosyalar UTİ aracılığıyla.
  • Çeviri, filtreler, PDF oluşturma, OCR ve yazım denetimi için kullanılır.
  • Yürütme süresi sınırı — 30 saniye, uygulama erişimi — App Groups aracılığıyla.
  • Action Extension, “Üretkenlik” kategorisindeki uygulamaların %42'sinde kullanılır.

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.

Projeyi tartış

Ayrıca okuyun