Share Extension — mi ez, hogyan működik és a bővítmény fejlesztése

Szerző: IT Sectr Megjelenés: 2026-06-15 Olvasási idő: 10 perc

Share Extension — egy iOS-bővítmény, amely hozzáadja az alkalmazását a rendszer „Megosztás” menüjéhez (Share Sheet). A felhasználó tartalmat küldhet a Safariból, Fotók, Fájlok vagy bármely más alkalmazásból közvetlenül az Önébe — másolás és ablakok közötti váltás nélkül. A Apple (2024) adatai szerint a Share Extensionnel rendelkező alkalmazások 35%-kal több felhasználói tartalmat kapnak, mint a megosztási lehetőség nélküli alkalmazások. A bővítmény szövegeket, képeket, videókat, URL-eket és fájlokat dolgoz fel egységes NSExtensionItem interfészen keresztül.

Főbb pontok

  • Share Extension — iOS-bővítmény tartalom küldéséhez az alkalmazásba más programokból.
  • NSExtensionItem — tároló az adatátvitelhez a gazdaalkalmazás és a bővítmény között.
  • Info.plist — a bővítmény által feldolgozott tartalomtípusok konfigurációja.
  • SLServiceTypes — leképezés közösségi hálózatokra (Twitter, Facebook) örökölt módhoz.
  • App Groups — közös tárhely adatátvitelhez a bővítmény és az alkalmazás között.

Mi az a Share Extension

Share Extension — egy olyan iOS app extension típus, amely a rendszer „Megosztás” menüjében jelenik meg, amikor a felhasználó tartalmat jelöl ki bármely alkalmazásban. A felhasználó kijelöl egy szöveget a Safariban, megnyomja a „Megosztás” gombot, és látja az alkalmazását az elérhető műveletek listájában. A kiválasztás után a tartalom továbbításra kerül a bővítményhez feldolgozásra: mentés, közzététel, küldés vagy átalakítás.

Az Action Extensiontől eltérően a Share Extension a tartalom fogadására specializálódott külső alkalmazásokból. Az Action Extension ezzel szemben adatokat küld az Ön alkalmazásából kifelé. A Share Extension a felhasználói tartalom belépési pontja, a felhaszerzés kulcseleme: a felhasználó a Share Extensionen keresztül próbálja ki az alkalmazást anélkül, hogy teljesen telepítené. Az App Store tiltja azokat az alkalmazásokat, amelyek egyetlen funkciója hirdetések megjelenítése a Share Extensionen keresztül (App Store Review Guideline 4.2).

Miért fontos a Share Extension az alkalmazás számára

A Share Extension csökkenti a belépési korlátot: a felhasználó tartalmat küld az alkalmazásába ismerős kontextusból — böngészőből, galériából, fájlkezelőből. A Branch (2024) adatai szerint a Share Extensionnel rendelkező alkalmazások a 7. napon 28%-kal magasabb megtartást mutatnak. További hatás — viráliság: minden alkalommal, amikor a felhasználó látja az alkalmazását a Share Sheetben, passzív branding történik reklámköltségek nélkül.

Hogyan működik a Share Extension

A Share Extension mechanizmusa a tartalom rendszer NSExtensionItem tárolókon keresztüli továbbításán alapul. A gazdaalkalmazás (Safari, Fotók) a kiválasztott tartalmat NSExtensionItem-be csomagolja a típus megadásával (public.image, public.url, public.plain-text). A rendszer ezt a tárolót továbbítja a bővítménynek, amely az adatokat a extensionContext.inputItems segítségével nyeri ki.

A bővítmény életciklusa

A Share Extension egy külön folyamatban indul korlátozott végrehajtási idővel — körülbelül 30 másodperc a feldolgozásra. A bővítmény nem végezhet hosszú műveleteket szinkron módon. Nagy fájlok betöltéséhez használja az NSURLSession-t háttérkonfigurációval. SLComposeServiceViewController — a Share Extension alaposztálya tartalom előnézetével és küldés gombbal.

Adattípusok és Uniform Type Identifiers

Az iOS a Uniform Type Identifiers (UTI) segítségével határozza meg a továbbított tartalom típusát. A fő UTI-k a Share Extension számára: public.image (fotók, képernyőképek), public.url (linkek), public.plain-text (szöveg), public.video (videofájlok) és public.file-url (fájlok). A bővítmény regisztrálja a támogatott UTI-ket az Info.plist-ben a NSExtensionActivationRule kulcson keresztül.

A bővítmény felépítése

A Share Extension három komponensből áll: a cél targetből Xcode-ban, az SLComposeServiceViewController-ből és az Info.plist konfigurációból. A felépítés határozza meg, hogy milyen tartalomtípusok kerülnek feldolgozásra, hogyan jelenik meg a felület és hol tárolódnak az adatok.

KomponensRendeltetésJellemzők
TargetA bővítmény targetje Xcode-banKülön bundle azonosítóval
ViewControllerFelület és feldolgozási logikaSLComposeServiceViewController vagy egyéni
Info.plistAktiválás és UTI konfigurációNSExtensionActivationRule predikátumokkal
App GroupsKözös tárhely az alkalmazássalUserDefaults suite adatátvitelhez

NSExtensionActivationRule

A Share Extension konfigurációjának kulcseleme — az aktiválási szabály. Meghatározza, hogy milyen feltételek mellett jelenik meg a bővítmény a Share Sheetben. A szabály az Info.plist-ben kerül meghatározásra szótárként korlátozásokkal: maximális képszám, minimális szöveghossz, URL kötelező megléte. A standard szabály aktiválja a bővítményt bármely egy tartalomtípusra.

objective-c
// Info.plist — NSExtensionActivationRule a Share Extension számára
<key>NSExtensionActivationRule</key>
<dict>
    <key>NSExtensionActivationSupportsImageWithMaxCount</key>
    <integer>5</integer>
    <key>NSExtensionActivationSupportsText</key>
    <true/>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
</dict>

Share Extension létrehozása

Nézzünk egy gyakorlati példát a Share Extension létrehozására Swift-ben egy könyvjelző alkalmazáshoz. A bővítmény URL-t kap a Safariból, megjelenít egy felületet előnézettel, és elmenti a linket az App Groupba. SLComposeServiceViewController egy kész felhasználói felületet biztosít szövegmezővel és Post gombbal.

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

A tartalom elküldése után a bővítmény a completeRequest meghívásával fejezi be a munkáját — ez egy kötelező lépés, enélkül a rendszer nem szabadítja fel a bővítmény folyamatát. Fontos: A Share Extension korlátozott környezetben működik, korlátozott hozzáféréssel a hálózathoz és a fájlrendszerhez — használjon háttér-munkameneteket a tartalom betöltéséhez.

Tartalomtípusok feldolgozása

A Share Extensionnek helyesen kell feldolgoznia a különböző bemeneti adattípusokat: szöveget, képeket, videókat, URL-eket és fájlokat. Minden típushoz saját UTI és saját adatkinyerési módszer tartozik. Univerzális feldolgozás — az attachment.attachments bejárásával hasItemConformingToTypeIdentifier ellenőrzéssel.

Képek feldolgozása

A képek public.imageként kerülnek továbbításra, UIImage vagy Data segítségével szerezhetők be. Nagy képek esetén használja a jpegData(compressionQuality:) metódust mentés előtt. A Share Extension nem módosíthatja az eredeti képet a felhasználó kifejezett engedélye nélkül. Javasolt az eredeti mentése az App Groupba és egy előnézet létrehozása a felületen való megjelenítéshez.

URL és szöveg feldolgozása

A Safari és más böngészők az URL-t public.urlként, a kijelölt szöveget pedig public.plain-textként küldik el. Egy NSExtensionItem mindkét típust egyszerre tartalmazhatja — a lap URL-jét és a rajta kijelölt szöveget. A Share Extensionnek ellenőriznie kell az összes attachment-et és ki kell nyernie a releváns adatokat. Kombinált forgatókönyv: az URL mentése könyvjelzőként, a szöveg pedig jegyzetként hozzá.

App Groups és adatátvitel

A Share Extension és a fő alkalmazás különböző folyamatokban fut, és nincs közös hozzáférésük a fájlrendszerhez. Az adatcseréhez az App Groups mechanizmusát használják: egy közös tárolót group.* azonosítóval. Az adatok App Groupba mentése után a bővítmény értesíti az alkalmazást a CFNotificationCenter vagy a Darwin Notify segítségével.

App Groups beállítása

Az App Groups a target Capabilities részében kapcsolható be: válassza ki a „App Groups” lehetőséget, és adjon hozzá egy azonosítót (pl. group.com.example.myapp). Mindkét targetnek — a fő alkalmazásnak és a bővítménynek — hozzáféréssel kell rendelkeznie ugyanahhoz a csoporthoz. UserDefaults suite lehetővé teszi az adatok olvasását és írását a közös tárhelyen minimális többletterheléssel.

swift
// Adatok mentése az App Groupba a Share Extensionből
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()

Gyakran Ismételt Kérdések

Miben különbözik a Share Extension az Action Extensiontől?

A Share Extension tartalmat fogad más alkalmazásokból az Ön alkalmazásába. Az Action Extension ezzel szemben műveletet hajt végre a tartalmon a gazdaalkalmazáson belül — szövegfordítás, kép módosítása. Share Extension — fogadás, Action Extension — átalakítás.

Milyen UTI-ket kell megadni az Info.plist-ben?

Függ az alkalmazás tartalomtípusától. Könyvjelzőkhöz — public.url. Fotoszerkesztőhöz — public.image. Jegyzetekhez — public.plain-text. Több típushoz használja az NSExtensionActivationRule-t AND/OR predikátumok kombinációjával.

Miért nem jelenik meg a Share Extension a Share Sheet-ben?

Gyakori ok — helytelen NSExtensionActivationRule vagy UTI-eltérés. Ellenőrizze az Info.plist-ben: az aktiválási szabálynak meg kell felelnie a tesztelt tartalomtípusnak. Győződjön meg arról is, hogy a bővítmény engedélyezve van a Settings → az Ön alkalmazása → Siri & Search menüpontban. Xcode clean build gyakran megoldja a problémát.

Mennyi idő áll rendelkezésre a Share Extension számára a feldolgozáshoz?

A rendszer körülbelül 30 másodpercet biztosít a végrehajtásra. Ezután az iOS kényszerítetten befejezi a bővítmény folyamatát. Hosszú műveletekhez használjon háttér-NSURLSession-t az eredmény feldolgozásával az alkalmazás következő indításakor.

Megjeleníthető egyéni felület a Share Extensionben?

Igen, az SLComposeServiceViewController helyett használhat egy szokásos UIViewController-t. Ebben az esetben teljes mértékben Ön irányítja a felületet. Azonban a küldés és a megszakítás gombokat Önnek kell megvalósítania. Egyéni felület nem szabványos tartalomfeldolgozási forgatókönyvekhez ajánlott.

Összefoglalás

  • Share Extension — iOS-bővítmény, amely hozzáadja az alkalmazást a rendszer „Megosztás” menüjéhez.
  • A tartalom NSExtensionItem segítségével, Uniform Type Identifiers jelöléssel kerül továbbításra.
  • Az aktiválási konfiguráció az Info.plist-ben az NSExtensionActivationRule segítségével kerül meghatározásra.
  • SLComposeServiceViewController — alapfelület előnézettel és küldéssel.
  • App Groups — adatcsere mechanizmus a bővítmény és az alkalmazás között.
  • A Share Extension korlátozott környezetben működik (30 mp, korlátozott hozzáférés).
  • A Share Extensionnel rendelkező alkalmazások 35%-kal több felhasználói tartalmat kapnak.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is