Share Extension — vad det är, hur det fungerar och utveckling av tillägget

Författare: IT Sectr Publicerad: 2026-06-15 Lästid: 10 min

Share Extension — är ett iOS-tillägg som lägger till din app i systemets meny “Dela” (Share Sheet). Användaren kan skicka innehåll från Safari, Foton, Filer eller någon annan app direkt till din — utan att kopiera och växla mellan fönster. Enligt data från Apple (2024) får appar med Share Extension 35% mer användarinnehåll än appar utan delningsmöjlighet. Tillägget bearbetar text, bilder, video, URL:er och filer via ett enhetligt NSExtensionItem-gränssnitt.

Huvudpunkter

  • Share Extension — iOS-tillägg för att skicka innehåll till appen från andra program.
  • NSExtensionItem — behållare för dataöverföring mellan värdappen och tillägget.
  • Info.plist — konfiguration av innehållstyper som tillägget bearbetar.
  • SLServiceTypes — mappning till sociala nätverk (Twitter, Facebook) för äldre läge.
  • App Groups — gemensam lagring för dataöverföring mellan tillägget och appen.

Vad är Share Extension

Share Extension — är en typ av iOS app extension som visas i systemets meny “Dela” när man väljer innehåll i någon app. Användaren markerar text i Safari, trycker på “Dela” och ser din app i listan över tillgängliga åtgärder. Efter val skickas innehållet till tillägget för bearbetning: spara, publicera, skicka eller omvandla.

Till skillnad från Action Extension är Share Extension specialiserad på att ta emot innehåll från externa appar. Action Extension skickar tvärtom data från din app utåt. Share Extension är en ingångspunkt för användarinnehåll, ett nyckelelement för användarförvärv: användaren provar appen via Share Extension utan att installera den helt. App Store förbjuder appar vars enda funktion är att visa annonser via Share Extension (App Store Review Guideline 4.2).

Varför Share Extension är viktigt för appen

Share Extension sänker inträdesbarriären: användaren skickar innehåll till din app från ett bekant sammanhang — webbläsare, galleri, filhanterare. Enligt data från Branch (2024) visar appar med Share Extension 28% högre retention dag 7. En ytterligare effekt — viralitet: varje gång användaren ser din app i Share Sheet sker passiv varumärkesexponering utan annonskostnader.

Hur Share Extension fungerar

Mekanismen för Share Extension bygger på överföring av innehåll via systemets NSExtensionItem-behållare. Värdappen (Safari, Foton) paketerar det valda innehållet i NSExtensionItem med angivelse av typ (public.image, public.url, public.plain-text). Systemet skickar denna behållare till tillägget, som extraherar data via extensionContext.inputItems.

Tilläggets livscykel

Share Extension startas i en separat process med begränsad exekveringstid — cirka 30 sekunder för bearbetning. Tillägget bör inte utföra långa operationer synkront. För uppladdning av stora filer, använd NSURLSession med bakgrundskonfiguration. SLComposeServiceViewController — basklass för Share Extension med förhandsgranskning av innehåll och skicka-knapp.

Datatyper och Uniform Type Identifiers

iOS använder Uniform Type Identifiers (UTI) för att bestämma typen av överfört innehåll. De viktigaste UTI:erna för Share Extension: public.image (foton, skärmbilder), public.url (länkar), public.plain-text (text), public.video (videofiler) och public.file-url (filer). Tillägget registrerar stödda UTI:er i Info.plist via nyckeln NSExtensionActivationRule.

Tilläggets arkitektur

Share Extension består av tre komponenter: måltargeten i Xcode, SLComposeServiceViewController och Info.plist-konfigurationen. Arkitekturen bestämmer vilka innehållstyper som bearbetas, hur gränssnittet visas och var data lagras.

KomponentSyfteFunktioner
TargetTarget för tillägget i XcodeSeparat bundle med identifierare
ViewControllerGränssnitt och bearbetningslogikSLComposeServiceViewController eller anpassad
Info.plistKonfiguration av aktivering och UTINSExtensionActivationRule med predikat
App GroupsGemensam lagring med appenUserDefaults suite för dataöverföring

NSExtensionActivationRule

Nyckelelementet i Share Extension-konfigurationen — aktiveringsregeln. Den bestämmer under vilka förhållanden tillägget visas i Share Sheet. Regeln definieras i Info.plist som en ordbok med begränsningar: maximalt antal bilder, minsta textlängd, obligatorisk förekomst av URL. Standardregeln aktiverar tillägget för en valfri innehållstyp.

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

Skapa Share Extension

Låt oss titta på ett praktiskt exempel på att skapa Share Extension i Swift för en bokmärkesapp. Tillägget tar emot URL från Safari, visar ett gränssnitt med förhandsgranskning och sparar länken i App Group. SLComposeServiceViewController tillhandahåller ett färdigt gränssnitt med textfält och Post-knapp.

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

Efter att ha skickat innehåll avslutar tillägget sitt arbete genom att anropa completeRequest — detta är ett obligatoriskt steg, utan det kommer systemet inte att frigöra tilläggets process. Viktigt: Share Extension fungerar i en begränsad miljö med begränsad åtkomst till nätverk och filsystem — använd bakgrundssessioner för att ladda upp innehåll.

Bearbeta innehållstyper

Share Extension måste korrekt bearbeta olika typer av indata: text, bilder, video, URL:er och filer. För varje typ används en egen UTI och en egen metod för dataextraktion. Universal bearbetning — via en slinga över attachment.attachments med kontroll av hasItemConformingToTypeIdentifier.

Bearbeta bilder

Bilder överförs som public.image med möjlighet att hämtas via UIImage eller Data. För stora bilder, använd jpegData(compressionQuality:) före lagring. Share Extension bör inte ändra originalbilden utan uttryckligt tillstånd från användaren. Det rekommenderas att spara originalet i App Group och skapa en förhandsgranskning för visning i gränssnittet.

Bearbeta URL och text

Safari och andra webbläsare skickar URL:en som public.url och den markerade texten som public.plain-text. En NSExtensionItem kan innehålla båda typerna samtidigt — sidans URL och den markerade texten på den. Share Extension bör kontrollera alla attachments och extrahera relevant data. Kombinerat scenario: spara URL:en som bokmärke och texten som en anteckning till den.

App Groups och dataöverföring

Share Extension och huvudappen körs i olika processer och har inte gemensam åtkomst till filsystemet. För datautbyte används mekanismen App Groups: en gemensam behållare med identifierare group.*. Efter att data sparats i App Group meddelar tillägget appen via CFNotificationCenter eller Darwin Notify.

Konfigurera App Groups

App Groups aktiveras i targetens Capabilities: välj “App Groups” och lägg till en identifierare (t.ex. group.com.example.myapp). Båda targeten — huvudappen och tillägget — måste ha åtkomst till samma grupp. UserDefaults suite gör det möjligt att läsa och skriva data i den gemensamma lagringen med minimal overhead.

swift
// Spara data i App Group från 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()

Vanliga frågor

Vad är skillnaden mellan Share Extension och Action Extension?

Share Extension tar emot innehåll från andra appar till din app. Action Extension utför däremot en åtgärd på innehållet inuti värdappen — textöversättning, bildändring. Share Extension — mottagning, Action Extension — transformation.

Vilka UTI:er måste anges i Info.plist?

Beror på din apps innehållstyp. För bokmärken — public.url. För fotoredigerare — public.image. För anteckningar — public.plain-text. För flera typer, använd NSExtensionActivationRule med en kombination av AND/OR-predikat.

Varför visas inte Share Extension i Share Sheet?

Vanlig orsak — felaktig NSExtensionActivationRule eller UTI-mismatch. Kontrollera i Info.plist: aktiveringsregeln måste matcha den testade innehållstypen. Se också till att tillägget är aktiverat i Inställningar → din app → Siri och sökning. Xcode clean build löser ofta problemet.

Hur mycket tid har Share Extension på sig för bearbetning?

Systemet tilldelar cirka 30 sekunder för exekvering. Efter det avslutar iOS tvångsmässigt tilläggets process. För långa operationer, använd bakgrunds-NSURLSession med bearbetning av resultatet vid nästa start av appen.

Kan jag visa ett anpassat gränssnitt i Share Extension?

Ja, istället för SLComposeServiceViewController kan en vanlig UIViewController användas. I så fall har du full kontroll över gränssnittet. Skicka- och avbryt-knapparna måste du dock implementera själv. Anpassat gränssnitt rekommenderas för icke-standardiserade scenarier för innehållsbearbetning.

Sammanfattning

  • Share Extension — iOS-tillägg som lägger till appen i systemets meny “Dela”.
  • Innehåll överförs via NSExtensionItem med Uniform Type Identifiers.
  • Aktiveringskonfiguration definieras i Info.plist via NSExtensionActivationRule.
  • SLComposeServiceViewController — grundgränssnitt med förhandsgranskning och sändning.
  • App Groups — mekanism för datautbyte mellan tillägget och appen.
  • Share Extension fungerar i begränsad miljö (30 s, begränsad åtkomst).
  • Appar med Share Extension får 35% mer användarinnehåll.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också