Share Extension — nedir, nasıl çalışır ve uzantı geliştirme

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

Share Extension, uygulamanızı sistem Paylaşım sayfasına ekleyen bir iOS uzantısıdır. Kullanıcı, Safari, Fotoğraflar, Dosyalar veya herhangi bir uygulamadan içeriği kopyalamadan ve pencereler arasında geçiş yapmadan doğrudan uygulamanıza gönderebilir. Apple (2024)'a göre, Share Extension'a sahip uygulamalar, paylaşım özelliği olmayan uygulamalara kıyasla %35 daha fazla kullanıcı içeriği alır. Uzantı, birleşik NSExtensionItem arayüzü aracılığıyla metin, görsel, video, URL ve dosyaları işler.

Önemli Noktalar

  • Share Extension — diğer programlardan uygulamaya içerik göndermek için iOS uzantısı.
  • NSExtensionItem — ana uygulama ve uzantı arasında veri aktarmak için kapsayıcı.
  • Info.plist — uzantının işlediği içerik türlerinin yapılandırması.
  • SLServiceTypes — eski mod için sosyal ağlara (Twitter, Facebook) eşleme.
  • App Groups — uzantı ve uygulama arasında veri aktarmak için paylaşımlı depolama.

Share Extension Nedir

Share Extension, herhangi bir uygulamada içerik seçildiğinde sistem Paylaşım sayfasında görünen bir iOS uygulama uzantısı türüdür. Kullanıcı Safari'de metni vurgular, Paylaş'a dokunur ve uygulamanızı mevcut eylemler listesinde görür. Seçimden sonra içerik, işlenmek üzere uzantıya iletilir: kaydetme, yayınlama, gönderme veya dönüştürme.

Action Extension'ın aksine, Share Extension harici uygulamalardan içerik almada uzmanlaşmıştır. Action Extension ise uygulamanızdan dışarıya veri gönderir. Share Extension, kullanıcı içeriği için bir giriş noktası, kullanıcı ediniminin önemli bir unsurudur: kullanıcılar uygulamanızı tamamen yüklemeden Share Extension aracılığıyla dener. App Store, tek işlevi Share Extension aracılığıyla reklam göstermek olan uygulamaları yasaklar (App Store Review Guideline 4.2).

Uygulamanız İçin Share Extension Neden Önemlidir

Share Extension giriş engelini azaltır: kullanıcılar tanıdık bir bağlamdan — tarayıcı, galeri, dosya yöneticisi — uygulamanıza içerik gönderir. Branch (2024)'e göre, Share Extension'a sahip uygulamalar 7. günde %28 daha yüksek kullanıcı tutma oranı gösterir. Ek bir etki de viralliktir: bir kullanıcı Paylaşım sayfasında uygulamanızı her gördüğünde, reklam harcaması olmadan pasif markalama gerçekleşir.

Share Extension Nasıl Çalışır

Share Extension mekanizması, sistem NSExtensionItem kapsayıcıları aracılığıyla içerik aktarımına dayanır. Ana uygulama (Safari, Fotoğraflar) seçilen içeriği belirtilen bir türle (public.image, public.url, public.plain-text) NSExtensionItem'a paketler. Sistem bu kapsayıcıyı uzantıya iletir ve uzantı, verileri extensionContext.inputItems aracılığıyla çıkarır.

Uzantı Yaşam Döngüsü

Share Extension, sınırlı yürütme süresiyle (işleme için yaklaşık 30 saniye) ayrı bir işlemde çalışır. Uzantı uzun senkron işlemler gerçekleştirmemelidir. Büyük dosyaları yüklemek için arka plan yapılandırmasıyla NSURLSession kullanın. SLComposeServiceViewController, içerik önizlemesi ve gönder düğmesiyle Share Extension için temel sınıftır.

Veri Türleri ve Uniform Type Identifiers

iOS, aktarılan içeriğin türünü belirlemek için Uniform Type Identifiers (UTI) kullanır. Share Extension için ana UTI'ler: public.image (fotoğraflar, ekran görüntüleri), public.url (bağlantılar), public.plain-text (metin), public.video (video dosyaları) ve public.file-url (dosyalar). Uzantı, desteklenen UTI'leri NSExtensionActivationRule anahtarı aracılığıyla Info.plist'e kaydeder.

Uzantı Mimarisi

Share Extension üç bileşenden oluşur: Xcode'daki hedef, SLComposeServiceViewController ve Info.plist yapılandırması. Mimari, hangi içerik türlerinin işleneceğini, arayüzün nasıl görüntüleneceğini ve verilerin nereye kaydedileceğini belirler.

BileşenAmaçÖzellikler
TargetXcode'ta uzantı hedefiTanımlayıcılı ayrı paket
ViewControllerArayüz ve işleme mantığıSLComposeServiceViewController veya özel
Info.plistEtkinleştirme ve UTI yapılandırmasıPredicate'lerle NSExtensionActivationRule
App GroupsUygulamayla paylaşımlı depolamaVeri aktarımı için UserDefaults paketi

NSExtensionActivationRule

Share Extension yapılandırmasının temel öğesi etkinleştirme kuralıdır. Uzantının Paylaşım sayfasında hangi koşullarda görüneceğini belirler. Kural, Info.plist'te kısıtlamaları olan bir sözlük olarak ayarlanır: maksimum görsel sayısı, minimum metin uzunluğu, zorunlu URL varlığı. Standart kural, uzantıyı herhangi bir tek içerik türü için etkinleştirir.

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

Share Extension Oluşturma

Bir yer imi uygulaması için Swift'te Share Extension oluşturmanın pratik bir örneğine bakalım. Uzantı, Safari'den bir URL alır, bir önizleme arayüzü görüntüler ve bağlantıyı App Group'a kaydeder. SLComposeServiceViewController, bir metin alanı ve Gönder düğmesiyle hazır bir kullanıcı arayüzü sağlar.

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

İçerik gönderildikten sonra uzantı, completeRequest çağrısı yaparak sonlanır — bu zorunlu bir adımdır; aksi takdirde sistem uzantı sürecini serbest bırakmaz. Önemli: Share Extension, sınırlı ağ ve dosya sistemi erişimi olan kısıtlı bir ortamda çalışır — içerik yüklemeleri için arka plan oturumları kullanın.

İçerik Türlerini İşleme

Share Extension, farklı giriş verisi türlerini (metin, görseller, video, URL ve dosyalar) doğru şekilde işlemelidir. Her tür, kendi UTI'sini ve çıkarma yöntemini kullanır. Evrensel işleme — hasItemConformingToTypeIdentifier kontrolleriyle attachment.attachments üzerinde döngü yaparak.

Görsel İşleme

Görseller, UIImage veya Data aracılığıyla alınabilme özelliğiyle public.image olarak iletilir. Büyük görseller için kaydetmeden önce jpegData(compressionQuality:) kullanın. Share Extension, kullanıcının açık izni olmadan orijinal görseli değiştirmemelidir. Orijinali App Group'da kaydetmeniz ve arayüzde görüntülemek için bir önizleme oluşturmanız önerilir.

URL ve Metin İşleme

Safari ve diğer tarayıcılar, URL'leri public.url olarak ve seçilen metni public.plain-text olarak iletir. Tek bir NSExtensionItem, aynı anda her iki türü de içerebilir — sayfanın URL'si ve üzerinde seçilen metin. Share Extension tüm ekleri kontrol etmeli ve ilgili verileri çıkarmalıdır. Birleşik senaryo: URL'yi yer imi olarak ve metni ona ekli not olarak kaydedin.

App Groups ve Veri Aktarımı

Share Extension ve ana uygulama farklı işlemlerde çalışır ve dosya sistemine ortak erişimleri yoktur. Veri alışverişi, group.* tanımlayıcısına sahip paylaşımlı bir kapsayıcı olan App Groups mekanizmasını kullanır. App Group'a veri kaydettikten sonra uzantı, CFNotificationCenter veya Darwin Notify aracılığıyla uygulamayı bilgilendirir.

App Groups Kurulumu

App Groups, hedefin Yeteneklerinde etkinleştirilir: App Groups'u seçin ve bir tanımlayıcı ekleyin (örneğin, group.com.example.myapp). Ana uygulama ve uzantı olmak üzere her iki hedef de aynı gruba erişebilmelidir. UserDefaults paketi, minimum ek yük ile paylaşımlı depolamada veri okuma ve yazma olanağı sağlar.

swift
// Share Extension'dan App Group'a veri kaydetme
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()

Sıkça Sorulan Sorular

Share Extension, Action Extension'dan nasıl farklıdır?

Share Extension, diğer uygulamalardan sizin uygulamanıza içerik alır. Action Extension ise ana uygulama içinde içerik üzerinde işlem yapar — metin çevirme, görsel düzenleme. Share Extension almadır, Action Extension dönüşümdür.

Info.plist'te hangi UTI'leri belirtmeliyim?

Uygulamanızın işlediği içerik türüne bağlıdır. Yer imleri için — public.url. Fotoğraf düzenleyici için — public.image. Notlar için — public.plain-text. Birden çok tür için, AND/OR predicate'lerinin birleşimiyle NSExtensionActivationRule kullanın.

Share Extension neden Paylaşım sayfasında görünmüyor?

Yaygın bir neden, hatalı NSExtensionActivationRule veya UTI uyuşmazlığıdır. Info.plist'te kontrol edin: etkinleştirme kuralı test edilen içerik türüyle eşleşmelidir. Ayrıca uzantının Ayarlar → uygulamanız → Siri ve Arama'da etkinleştirildiğinden emin olun. Xcode clean build genellikle sorunu çözer.

Share Extension'a işleme için ne kadar süre verilir?

Sistem, yürütme için yaklaşık 30 saniye ayırır. Bundan sonra iOS, uzantı işlemini zorla sonlandırır. Uzun süren işlemler için arka plan NSURLSession kullanın ve sonucu bir sonraki uygulama başlatılışında işleyin.

Share Extension'da özel bir arayüz görüntüleyebilir miyim?

Evet, SLComposeServiceViewController yerine normal bir UIViewController kullanabilirsiniz. Bu durumda, arayüzü tamamen kontrol edersiniz. Ancak, gönder ve iptal düğmelerini kendiniz uygulamanız gerekir. Özel arayüz, standart olmayan içerik işleme senaryoları için önerilir.

Özet

  • Share Extension — uygulamanızı sistem Paylaşım sayfasına ekleyen iOS uzantısı.
  • İçerik, Uniform Type Identifiers ile NSExtensionItem aracılığıyla aktarılır.
  • Etkinleştirme yapılandırması Info.plist'te NSExtensionActivationRule ile ayarlanır.
  • SLComposeServiceViewController — önizleme ve yayınlama ile temel arayüz.
  • App Groups — uzantı ve uygulama arasında veri alışverişi mekanizması.
  • Share Extension sınırlı bir ortamda çalışır (30 saniye, kısıtlı erişim).
  • Share Extension'a sahip uygulamalar %35 daha fazla kullanıcı içeriği alı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