Share Extension — шта је то, како ради и развој екстензије

Аутор: IT Sectr Објављено: 2026-06-15 Време читања: 10 мин

Share Extension — је iOS екстензија која додаје вашу апликацију у системски мени „Дели” (Share Sheet). Корисник може да пошаље садржај из Safari-ја, Фотографија, Датотека или било које друге апликације директно у вашу — без копирања и пребацивања између прозора. Према подацима Apple (2024), апликације са Share Extension примају 35% више корисничког садржаја него апликације без могућности дељења. Екстензија обрађује текст, слике, видео, URL-ове и датотеке кроз унификовани интерфејс NSExtensionItem.

Главне ствари

  • Share Extension — iOS екстензија за слање садржаја у апликацију из других програма.
  • NSExtensionItem — контејнер за пренос података између хост апликације и екстензије.
  • Info.plist — конфигурација типова садржаја које екстензија обрађује.
  • SLServiceTypes — мапирање на друштвене мреже (Twitter, Facebook) за легаци режим.
  • App Groups — заједничко складиште за пренос података између екстензије и апликације.

Шта је Share Extension

Share Extension — је тип iOS app extension екстензије која се појављује у системском менију „Дели” при избору садржаја у било којој апликацији. Корисник означава текст у Safari-ју, притиска „Дели” и види вашу апликацију на листи доступних радњи. Након избора, садржај се прослеђује екстензији на обраду: чување, објављивање, слање или трансформацију.

За разлику од Action Extension-а, Share Extension је специјализован за примање садржаја из спољних апликација. Action Extension, напротив, шаље податке из ваше апликације напоље. Share Extension је улазна тачка корисничког садржаја, кључни елемент за привлачење корисника: корисник испробава апликацију кроз Share Extension, без потпуног инсталирања. App Store забрањује апликације чија је једина функција приказивање реклама кроз Share Extension (App Store Review Guideline 4.2).

Зашто је Share Extension важан за апликацију

Share Extension смањује баријеру уласка: корисник шаље садржај у вашу апликацију из познатог контекста — прегледача, галерије, менаџера датотека. Према подацима Branch (2024), апликације са Share Extension показују 28% већу ретенцију 7. дана. Додатни ефекат — виралност: сваки пут када корисник види вашу апликацију у Share Sheet-у, долази до пасивног брендирања без трошкова оглашавања.

Како ради Share Extension

Механизам Share Extension-а се заснива на преносу садржаја кроз системске контејнере NSExtensionItem. Хост апликација (Safari, Фотографије) пакује изабрани садржај у NSExtensionItem са навођењем типа (public.image, public.url, public.plain-text). Систем прослеђује овај контејнер екстензији, која издваја податке кроз extensionContext.inputItems.

Животни циклус екстензије

Share Extension се покреће у засебном процесу са ограниченим временом извршавања — око 30 секунди за обраду. Екстензија не треба да обавља дуготрајне операције синхроно. За учитавање великих датотека користите NSURLSession са позадинском конфигурацијом. SLComposeServiceViewController — основна класа за Share Extension са прегледом садржаја и дугметом за слање.

Типови података и Uniform Type Identifiers

iOS користи Uniform Type Identifiers (UTI) за одређивање типа прослеђеног садржаја. Главни UTI-ји за Share Extension: public.image (фотографије, снимци екрана), public.url (линкови), public.plain-text (текст), public.video (видео датотеке) и public.file-url (датотеке). Екстензија региструје подржане UTI-је у Info.plist-у кроз кључ NSExtensionActivationRule.

Архитектура екстензије

Share Extension се састоји од три компоненте: циљног таргета у Xcode-у, SLComposeServiceViewController-а и конфигурације Info.plist. Архитектура одређује који типови садржаја се обрађују, како се приказује интерфејс и где се чувају подаци.

КомпонентаНаменаКарактеристике
TargetТаргет екстензије у Xcode-уПосебан bundle са идентификатором
ViewControllerИнтерфејс и логика обрадеSLComposeServiceViewController или прилагођени
Info.plistКонфигурација активације и UTINSExtensionActivationRule са предикатима
App GroupsЗаједничко складиште са апликацијомUserDefaults suite за пренос података

NSExtensionActivationRule

Кључни елемент конфигурације Share Extension-а — правило активације. Оно одређује под којим условима се екстензија појављује у Share Sheet-у. Правило се задаје у Info.plist-у као речник са ограничењима: максималан број слика, минимална дужина текста, обавезно присуство URL-а. Стандардно правило активира екстензију за један било који тип садржаја.

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

Креирање Share Extension-а

Размотримо практични пример креирања Share Extension-а у Swift-у за апликацију за обележиваче. Екстензија прима URL из Safari-ја, приказује интерфејс са прегледом и чува линк у App Group-у. SLComposeServiceViewController пружа готови UI са текстуалним пољем и дугметом 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)
            }
        }
    }
}

Након слања садржаја, екстензија завршава рад позивањем completeRequest — ово је обавезан корак, без њега систем неће ослободити процес екстензије. Важно: Share Extension ради у ограниченом окружењу са ограниченим приступом мрежи и систему датотека — користите позадинске сесије за учитавање садржаја.

Обрада типова садржаја

Share Extension мора правилно обрађивати различите типове улазних података: текст, слике, видео, URL-ове и датотеке. За сваки тип користи се сопствени UTI и сопствени метод издвајања података. Универзална обрада — кроз петљу по attachment.attachments са провером hasItemConformingToTypeIdentifier.

Обрада слика

Слике се преносе као public.image са могућношћу добијања кроз UIImage или Data. За велике слике користите jpegData(compressionQuality:) пре чувања. Share Extension не треба да мења оригиналну слику без експлицитне дозволе корисника. Препоручује се чување оригинала у App Group-у и креирање прегледа за приказ у интерфејсу.

Обрада URL-ова и текста

Safari и други прегледачи прослеђују URL као public.url, а означени текст као public.plain-text. Један NSExtensionItem може садржати оба типа истовремено — URL странице и означени текст на њој. Share Extension треба да провери све attachment-е и издвоји релевантне податке. Комбиновани сценарио: сачувати URL као обележивач, а текст као белешку уз њега.

App Groups и пренос података

Share Extension и главна апликација раде у различитим процесима и немају заједнички приступ систему датотека. За размену података користи се механизам App Groups: заједнички контејнер са идентификатором group.*. Након чувања података у App Group-у, екстензија обавештава апликацију преко CFNotificationCenter-а или Darwin Notify-ја.

Подешавање App Groups

App Groups се укључују у Capabilities-ма таргета: изаберите „App Groups” и додајте идентификатор (нпр. group.com.example.myapp). Оба таргета — главна апликација и екстензија — морају имати приступ истој групи. UserDefaults suite омогућава читање и уписивање података у заједничко складиште са минималним трошковима.

swift
// Чување података у App Group из 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()

Често постављана питања

Чим се Share Extension разликује од Action Extension-а?

Share Extension прима садржај из других апликација у вашу. Action Extension, напротив, извршава радњу са садржајем унутар хост апликације — превођење текста, измена слике. Share Extension — примање, Action Extension — трансформација.

Које UTI треба навести у Info.plist-у?

Зависи од типа садржаја ваше апликације. За обележиваче — public.url. За уређивач фотографија — public.image. За белешке — public.plain-text. За више типова користите NSExtensionActivationRule са комбинацијом предиката AND/OR.

Зашто се Share Extension не појављује у Share Sheet-у?

Чести узрок — нетачан NSExtensionActivationRule или неусаглашеност UTI-ја. Проверите у Info.plist-у: правило активације мора одговарати тестираном типу садржаја. Такође се уверите да је екстензија укључена у Settings → ваша апликација → Siri & Search. Xcode clean build често решава проблем.

Колико времена Share Extension има за обраду?

Систем додељује око 30 секунди за извршење. Након тога iOS присилно завршава процес екстензије. За дуготрајне операције користите позадински NSURLSession са обрадом резултата при следећем покретању апликације.

Може ли се приказати прилагођени UI у Share Extension-у?

Да, уместо SLComposeServiceViewController-а може се користити обичан UIViewController. У том случају у потпуности контролишете интерфејс. Међутим, дугмад за слање и отказивање морате сами имплементирати. Прилагођени UI се препоручује за нестандардне сценарије обраде садржаја.

Закључци

  • Share Extension — iOS екстензија која додаје апликацију у системски мени „Дели”.
  • Садржај се преноси кроз NSExtensionItem са Uniform Type Identifiers-има.
  • Конфигурација активације се задаје у Info.plist-у кроз NSExtensionActivationRule.
  • SLComposeServiceViewController — основни UI са прегледом и слањем.
  • App Groups — механизам размене података између екстензије и апликације.
  • Share Extension ради у ограниченом окружењу (30 с, ограничен приступ).
  • Апликације са Share Extension примају 35% више корисничког садржаја.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође