Share Extension — ce este, cum funcționează și dezvoltarea extensiei

Autor: IT Sectr Publicat: 2026-06-15 Timp de citire: 10 min

Share Extension — este o extensie iOS care adaugă aplicația ta în meniul de sistem „Partajare” (Share Sheet). Utilizatorul poate trimite conținut din Safari, Fotografii, Fișiere sau orice altă aplicație direct în a ta — fără copiere și comutare între ferestre. Conform datelor Apple (2024), aplicațiile cu Share Extension primesc cu 35% mai mult conținut de la utilizatori decât aplicațiile fără posibilitate de partajare. Extensia procesează text, imagini, video, URL-uri și fișiere printr-o interfață unificată NSExtensionItem.

Principalele puncte

  • Share Extension — extensie iOS pentru trimiterea conținutului în aplicație din alte programe.
  • NSExtensionItem — container pentru transferul datelor între aplicația gazdă și extensie.
  • Info.plist — configurarea tipurilor de conținut pe care le procesează extensia.
  • SLServiceTypes — mapare la rețele sociale (Twitter, Facebook) pentru modul legacy.
  • App Groups — stocare comună pentru transferul datelor între extensie și aplicație.

Ce este Share Extension

Share Extension — este un tip de extensie iOS app extension care apare în meniul de sistem „Partajare” la selectarea conținutului în orice aplicație. Utilizatorul selectează text în Safari, apasă „Partajare” și vede aplicația ta în lista acțiunilor disponibile. După selectare, conținutul este transmis extensiei pentru procesare: salvare, publicare, trimitere sau transformare.

Spre deosebire de Action Extension, Share Extension se specializează în primirea conținutului din aplicații externe. Action Extension, dimpotrivă, trimite date din aplicația ta în exterior. Share Extension este punctul de intrare al conținutului utilizatorului, un element cheie de achiziție a utilizatorilor: utilizatorul încearcă aplicația prin Share Extension, fără a o instala complet. App Store interzice aplicațiile a căror singură funcție este afișarea de reclame prin Share Extension (App Store Review Guideline 4.2).

De ce Share Extension este important pentru aplicație

Share Extension reduce bariera de intrare: utilizatorul trimite conținut în aplicația ta din contextul familiar — browser, galerie, manager de fișiere. Conform datelor Branch (2024), aplicațiile cu Share Extension arată o retenție cu 28% mai mare în ziua 7. Efect suplimentar — viralitatea: de fiecare dată când utilizatorul vede aplicația ta în Share Sheet, are loc un branding pasiv fără costuri de publicitate.

Cum funcționează Share Extension

Mecanismul Share Extension se bazează pe transferul conținutului prin containerele de sistem NSExtensionItem. Aplicația gazdă (Safari, Fotografii) împachetează conținutul selectat în NSExtensionItem cu specificarea tipului (public.image, public.url, public.plain-text). Sistemul transmite acest container extensiei, care extrage datele prin extensionContext.inputItems.

Ciclul de viață al extensiei

Share Extension pornește într-un proces separat cu timp limitat de execuție — aproximativ 30 de secunde pentru procesare. Extensia nu trebuie să efectueze operații lungi sincron. Pentru încărcarea fișierelor mari, utilizați NSURLSession cu configurație de fundal. SLComposeServiceViewController — clasa de bază pentru Share Extension cu previzualizare a conținutului și buton de trimitere.

Tipuri de date și Uniform Type Identifiers

iOS utilizează Uniform Type Identifiers (UTI) pentru a determina tipul conținutului transmis. Principalele UTI pentru Share Extension: public.image (fotografii, capturi de ecran), public.url (linkuri), public.plain-text (text), public.video (fișiere video) și public.file-url (fișiere). Extensia înregistrează UTI-urile suportate în Info.plist prin cheia NSExtensionActivationRule.

Arhitectura extensiei

Share Extension constă din trei componente: target-ul în Xcode, SLComposeServiceViewController și configurarea Info.plist. Arhitectura determină ce tipuri de conținut sunt procesate, cum este afișată interfața și unde sunt salvate datele.

ComponentăDestinațieCaracteristici
TargetTarget-ul extensiei în XcodeBundle separat cu identificator
ViewControllerInterfața și logica de procesareSLComposeServiceViewController sau personalizat
Info.plistConfigurarea activării și UTINSExtensionActivationRule cu predicate
App GroupsStocare comună cu aplicațiaUserDefaults suite pentru transfer de date

NSExtensionActivationRule

Elementul cheie al configurării Share Extension — regula de activare. Determină în ce condiții apare extensia în Share Sheet. Regula se definește în Info.plist ca dicționar cu restricții: numărul maxim de imagini, lungimea minimă a textului, prezența obligatorie a URL-ului. Regula standard activează extensia pentru orice tip de conținut.

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

Crearea Share Extension

Să examinăm un exemplu practic de creare a Share Extension în Swift pentru o aplicație de marcaje. Extensia primește URL-ul din Safari, afișează o interfață cu previzualizare și salvează linkul în App Group. SLComposeServiceViewController oferă o interfață gata făcută cu câmp text și buton 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)
            }
        }
    }
}

După trimiterea conținutului, extensia își încheie activitatea apelând completeRequest — acesta este un pas obligatoriu, fără el sistemul nu va elibera procesul extensiei. Important: Share Extension funcționează într-un mediu limitat cu acces restricționat la rețea și sistemul de fișiere — utilizați sesiuni de fundal pentru încărcarea conținutului.

Procesarea tipurilor de conținut

Share Extension trebuie să proceseze corect diferite tipuri de date de intrare: text, imagini, video, URL-uri și fișiere. Pentru fiecare tip se utilizează propriul UTI și propria metodă de extragere a datelor. Procesare universală — printr-o buclă pe attachment.attachments cu verificarea hasItemConformingToTypeIdentifier.

Procesarea imaginilor

Imaginile sunt transmise ca public.image cu posibilitatea de obținere prin UIImage sau Data. Pentru imagini mari, utilizați jpegData(compressionQuality:) înainte de salvare. Share Extension nu trebuie să modifice imaginea originală fără permisiunea explicită a utilizatorului. Se recomandă salvarea originalului în App Group și crearea unei previzualizări pentru afișarea în interfață.

Procesarea URL-urilor și a textului

Safari și alte browsere trimit URL-ul ca public.url, iar textul selectat ca public.plain-text. Un NSExtensionItem poate conține ambele tipuri simultan — URL-ul paginii și textul selectat pe aceasta. Share Extension trebuie să verifice toate attachment-urile și să extragă datele relevante. Scenariu combinat: salvați URL-ul ca marcaj, iar textul ca notă pentru acesta.

App Groups și transferul datelor

Share Extension și aplicația principală rulează în procese diferite și nu au acces comun la sistemul de fișiere. Pentru schimbul de date se utilizează mecanismul App Groups: un container comun cu identificatorul group.*. După salvarea datelor în App Group, extensia notifică aplicația prin CFNotificationCenter sau Darwin Notify.

Configurarea App Groups

App Groups se activează în Capabilities target-ului: selectați „App Groups” și adăugați un identificator (de exemplu, group.com.example.myapp). Ambele target-uri — aplicația principală și extensia — trebuie să aibă acces la același grup. UserDefaults suite permite citirea și scrierea datelor în stocarea comună cu cheltuieli generale minime.

swift
// Salvarea datelor în App Group din 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()

Întrebări frecvente

Cu ce se deosebește Share Extension de Action Extension?

Share Extension primește conținut din alte aplicații în a ta. Action Extension, dimpotrivă, execută o acțiune asupra conținutului în interiorul aplicației gazdă — traducerea textului, modificarea imaginii. Share Extension — primirea, Action Extension — transformarea.

Ce UTI trebuie specificate în Info.plist?

Depinde de tipul de conținut al aplicației tale. Pentru marcaje — public.url. Pentru editor foto — public.image. Pentru note — public.plain-text. Pentru mai multe tipuri, utilizați NSExtensionActivationRule cu o combinație de predicate AND/OR.

De ce nu apare Share Extension în Share Sheet?

Cauza frecventă — un NSExtensionActivationRule incorect sau nepotrivirea UTI. Verificați în Info.plist: regula de activare trebuie să corespundă tipului de conținut testat. De asemenea, asigurați-vă că extensia este activată în Settings → aplicația ta → Siri & Search. Xcode clean build rezolvă adesea problema.

Cât timp are Share Extension pentru procesare?

Sistemul alocă aproximativ 30 de secunde pentru execuție. După aceasta, iOS încheie forțat procesul extensiei. Pentru operații lungi, utilizați NSURLSession de fundal cu procesarea rezultatului la următoarea pornire a aplicației.

Se poate afișa o interfață personalizată în Share Extension?

Da, în loc de SLComposeServiceViewController se poate utiliza un UIViewController obișnuit. În acest caz, controlați complet interfața. Cu toate acestea, butoanele de trimitere și anulare trebuie implementate manual. Interfața personalizată este recomandată pentru scenarii nestandard de procesare a conținutului.

Concluzii

  • Share Extension — extensie iOS care adaugă aplicația în meniul de sistem „Partajare”.
  • Conținutul este transmis prin NSExtensionItem cu Uniform Type Identifiers.
  • Configurarea activării se definește în Info.plist prin NSExtensionActivationRule.
  • SLComposeServiceViewController — interfață de bază cu previzualizare și trimitere.
  • App Groups — mecanism de schimb de date între extensie și aplicație.
  • Share Extension funcționează în mediu limitat (30 s, acces restricționat).
  • Aplicațiile cu Share Extension primesc cu 35% mai mult conținut de la utilizatori.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și