Share Extension — co to je, jak funguje a vývoj rozšíření

Autor: IT Sectr Publikováno: 2026-06-15 Doba čtení: 10 min

Share Extension — je rozšíření iOS, které přidá vaši aplikaci do systémové nabídky „Sdílet” (Share Sheet). Uživatel může odeslat obsah ze Safari, Fotografií, Souborů nebo jakékoli jiné aplikace přímo do vaší — bez kopírování a přepínání mezi okny. Podle údajů Apple (2024) získávají aplikace s Share Extension o 35% více uživatelského obsahu než aplikace bez možnosti sdílení. Rozšíření zpracovává text, obrázky, video, URL a soubory prostřednictvím jednotného rozhraní NSExtensionItem.

Hlavní body

  • Share Extension — rozšíření iOS pro odesílání obsahu do aplikace z jiných programů.
  • NSExtensionItem — kontejner pro přenos dat mezi hostitelskou aplikací a rozšířením.
  • Info.plist — konfigurace typů obsahu, které rozšíření zpracovává.
  • SLServiceTypes — mapování na sociální sítě (Twitter, Facebook) pro starší režim.
  • App Groups — sdílené úložiště pro přenos dat mezi rozšířením a aplikací.

Co je Share Extension

Share Extension — je typ rozšíření iOS app extension, které se zobrazí v systémové nabídce „Sdílet” při výběru obsahu v jakékoli aplikaci. Uživatel vybere text v Safari, stiskne „Sdílet” a uvidí vaši aplikaci v seznamu dostupných akcí. Po výběru je obsah předán rozšíření ke zpracování: uložení, publikování, odeslání nebo transformaci.

Na rozdíl od Action Extension se Share Extension specializuje na příjem obsahu z externích aplikací. Action Extension naopak odesílá data z vaší aplikace ven. Share Extension je vstupním bodem uživatelského obsahu, klíčovým prvkem získávání uživatelů: uživatel vyzkouší aplikaci prostřednictvím Share Extension, aniž by ji plně instaloval. App Store zakazuje aplikace, jejichž jedinou funkcí je zobrazování reklam prostřednictvím Share Extension (App Store Review Guideline 4.2).

Proč je Share Extension důležitý pro aplikaci

Share Extension snižuje bariéru vstupu: uživatel odesílá obsah do vaší aplikace ze známého kontextu — prohlížeče, galerie, správce souborů. Podle údajů Branch (2024) vykazují aplikace s Share Extension o 28% vyšší retenci 7. den. Další efekt — viralita: pokaždé, když uživatel vidí vaši aplikaci v Share Sheet, dochází k pasivnímu brandingu bez nákladů na reklamu.

Jak Share Extension funguje

Mechanismus Share Extension je založen na přenosu obsahu prostřednictvím systémových kontejnerů NSExtensionItem. Hostitelská aplikace (Safari, Fotografie) zabalí vybraný obsah do NSExtensionItem s uvedením typu (public.image, public.url, public.plain-text). Systém předá tento kontejner rozšíření, které extrahuje data prostřednictvím extensionContext.inputItems.

Životní cyklus rozšíření

Share Extension se spouští v samostatném procesu s omezenou dobou provádění — přibližně 30 sekund na zpracování. Rozšíření by nemělo provádět dlouhé operace synchronně. Pro nahrávání velkých souborů používejte NSURLSession s konfigurací na pozadí. SLComposeServiceViewController — základní třída pro Share Extension s náhledem obsahu a tlačítkem odeslání.

Typy dat a Uniform Type Identifiers

iOS používá Uniform Type Identifiers (UTI) k určení typu přenášeného obsahu. Hlavní UTI pro Share Extension: public.image (fotografie, snímky obrazovky), public.url (odkazy), public.plain-text (text), public.video (video soubory) a public.file-url (soubory). Rozšíření registruje podporované UTI v Info.plist prostřednictvím klíče NSExtensionActivationRule.

Architektura rozšíření

Share Extension se skládá ze tří komponent: cílového targetu v Xcode, SLComposeServiceViewController a konfigurace Info.plist. Architektura určuje, jaké typy obsahu jsou zpracovávány, jak se zobrazuje rozhraní a kde jsou data ukládána.

KomponentaÚčelVlastnosti
TargetTarget rozšíření v XcodeSamostatný bundle s identifikátorem
ViewControllerRozhraní a logika zpracováníSLComposeServiceViewController nebo vlastní
Info.plistKonfigurace aktivace a UTINSExtensionActivationRule s predikáty
App GroupsSdílené úložiště s aplikacíUserDefaults suite pro přenos dat

NSExtensionActivationRule

Klíčový prvek konfigurace Share Extension — pravidlo aktivace. Určuje, za jakých podmínek se rozšíření zobrazí v Share Sheet. Pravidlo je definováno v Info.plist jako slovník s omezeními: maximální počet obrázků, minimální délka textu, povinná přítomnost URL. Standardní pravidlo aktivuje rozšíření pro jeden libovolný typ obsahu.

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

Vytvoření Share Extension

Podívejme se na praktický příklad vytvoření Share Extension v Swift pro aplikaci záložek. Rozšíření obdrží URL ze Safari, zobrazí rozhraní s náhledem a uloží odkaz do App Group. SLComposeServiceViewController poskytuje hotové uživatelské rozhraní s textovým polem a tlačítkem Post.

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

Po odeslání obsahu rozšíření ukončí svou činnost voláním completeRequest — to je povinný krok, bez něj systém neuvolní proces rozšíření. Důležité: Share Extension pracuje v omezeném prostředí s omezeným přístupem k síti a souborovému systému — používejte relace na pozadí pro nahrávání obsahu.

Zpracování typů obsahu

Share Extension musí správně zpracovávat různé typy vstupních dat: text, obrázky, video, URL a soubory. Pro každý typ se používá vlastní UTI a vlastní metoda extrakce dat. Univerzální zpracování — prostřednictvím cyklu přes attachment.attachments s kontrolou hasItemConformingToTypeIdentifier.

Zpracování obrázků

Obrázky jsou přenášeny jako public.image s možností získání prostřednictvím UIImage nebo Data. U velkých obrázků použijte jpegData(compressionQuality:) před uložením. Share Extension by neměl upravovat původní obrázek bez výslovného souhlasu uživatele. Doporučuje se uložit originál do App Group a vytvořit náhled pro zobrazení v rozhraní.

Zpracování URL a textu

Safari a další prohlížeče odesílají URL jako public.url a vybraný text jako public.plain-text. Jeden NSExtensionItem může obsahovat oba typy současně — URL stránky a na ní vybraný text. Share Extension by měl zkontrolovat všechny attachmenty a extrahovat relevantní data. Kombinovaný scénář: uložit URL jako záložku a text jako poznámku k ní.

App Groups a přenos dat

Share Extension a hlavní aplikace běží v různých procesech a nemají společný přístup k souborovému systému. Pro výměnu dat se používá mechanismus App Groups: sdílený kontejner s identifikátorem group.*. Po uložení dat do App Group rozšíření upozorní aplikaci prostřednictvím CFNotificationCenter nebo Darwin Notify.

Nastavení App Groups

App Groups se zapínají v Capabilities targetu: vyberte „App Groups” a přidejte identifikátor (např. group.com.example.myapp). Oba targety — hlavní aplikace i rozšíření — musí mít přístup ke stejné skupině. UserDefaults suite umožňuje číst a zapisovat data do sdíleného úložiště s minimální režií.

swift
// Ukládání dat do App Group z Share Extension
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()

Často kladené otázky

Čím se Share Extension liší od Action Extension?

Share Extension přijímá obsah z jiných aplikací do vaší. Action Extension naopak provádí akci s obsahem uvnitř hostitelské aplikace — překlad textu, úpravu obrázku. Share Extension — příjem, Action Extension — transformace.

Jaké UTI je třeba uvést v Info.plist?

Záleží na typu obsahu vaší aplikace. Pro záložky — public.url. Pro fotoeditor — public.image. Pro poznámky — public.plain-text. Pro více typů použijte NSExtensionActivationRule s kombinací predikátů AND/OR.

Proč se Share Extension nezobrazuje v Share Sheet?

Častou příčinou je nesprávný NSExtensionActivationRule nebo neshoda UTI. Zkontrolujte v Info.plist: pravidlo aktivace musí odpovídat testovanému typu obsahu. Ujistěte se také, že je rozšíření povoleno v Nastavení → vaše aplikace → Siri a hledání. Xcode clean build problém často vyřeší.

Kolik času má Share Extension na zpracování?

Systém přiděluje přibližně 30 sekund na provedení. Poté iOS násilně ukončí proces rozšíření. Pro dlouhé operace použijte NSURLSession na pozadí se zpracováním výsledku při příštím spuštění aplikace.

Lze zobrazit vlastní rozhraní v Share Extension?

Ano, místo SLComposeServiceViewController lze použít běžný UIViewController. V tomto případě máte plnou kontrolu nad rozhraním. Tlačítka odeslání a zrušení však musíte implementovat sami. Vlastní rozhraní se doporučuje pro nestandardní scénáře zpracování obsahu.

Shrnutí

  • Share Extension — rozšíření iOS, které přidá aplikaci do systémové nabídky „Sdílet”.
  • Obsah je přenášen prostřednictvím NSExtensionItem s Uniform Type Identifiers.
  • Konfigurace aktivace je definována v Info.plist pomocí NSExtensionActivationRule.
  • SLComposeServiceViewController — základní rozhraní s náhledem a odesláním.
  • App Groups — mechanismus výměny dat mezi rozšířením a aplikací.
  • Share Extension pracuje v omezeném prostředí (30 s, omezený přístup).
  • Aplikace s Share Extension získávají o 35% více uživatelského obsahu.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také