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 — 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).
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.
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 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.
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 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.
| Komponens | Rendeltetés | Jellemzők |
|---|---|---|
| Target | A bővítmény targetje Xcode-ban | Külön bundle azonosítóval |
| ViewController | Felület és feldolgozási logika | SLComposeServiceViewController vagy egyéni |
| Info.plist | Aktiválás és UTI konfiguráció | NSExtensionActivationRule predikátumokkal |
| App Groups | Közös tárhely az alkalmazással | UserDefaults suite adatátvitelhez |
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.
// 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>
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.
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.
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.
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.
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á.
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.
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.
// 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
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.
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.
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.
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.
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
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.
Olvassa el is