Share Extension — ano ito, paano ito gumagana at pag-develop ng extension

May-akda: IT Sectr Nai-publish: 2026-06-15 Oras ng pagbabasa: 10 min

Share Extension — ay isang iOS extension na nagdaragdag ng iyong app sa system menu na “I-share” (Share Sheet). Maaaring magpadala ang user ng nilalaman mula sa Safari, Mga Larawan, Mga File o anumang iba pang app nang direkta sa iyo — nang walang pagkopya at paglipat sa pagitan ng mga window. Ayon sa datos ng Apple (2024), ang mga app na may Share Extension ay tumatanggap ng 35% na mas maraming nilalaman ng user kaysa sa mga app na walang kakayahang mag-share. Pinoproseso ng extension ang teksto, mga larawan, video, URL at mga file sa pamamagitan ng pinag-isang interface ng NSExtensionItem.

Mga Pangunahing Punto

  • Share Extension — iOS extension para sa pagpapadala ng nilalaman sa app mula sa ibang mga programa.
  • NSExtensionItem — lalagyan para sa paglilipat ng data sa pagitan ng host app at extension.
  • Info.plist — pagsasaayos ng mga uri ng nilalaman na pinoproseso ng extension.
  • SLServiceTypes — pag-map sa mga social network (Twitter, Facebook) para sa legacy mode.
  • App Groups — pinagsamang imbakan para sa paglilipat ng data sa pagitan ng extension at app.

Ano ang Share Extension

Share Extension — ay isang uri ng iOS app extension na lumalabas sa system menu na “I-share” kapag pumipili ng nilalaman sa anumang app. Pinipili ng user ang teksto sa Safari, pinipindot ang “I-share” at nakikita ang iyong app sa listahan ng mga magagamit na aksyon. Pagkatapos pumili, ang nilalaman ay ipinapadala sa extension para sa pagproseso: pag-save, pag-publish, pagpapadala o pagbabago.

Hindi tulad ng Action Extension, ang Share Extension ay dalubhasa sa pagtanggap ng nilalaman mula sa panlabas na mga app. Ang Action Extension, sa kabaligtaran, ay nagpapadala ng data mula sa iyong app palabas. Ang Share Extension ay entry point ng nilalaman ng user, isang pangunahing elemento ng pagkuha ng user: sinusubukan ng user ang app sa pamamagitan ng Share Extension nang hindi ito ganap na ini-install. Ipinagbabawal ng App Store ang mga app na ang tanging function ay magpakita ng mga ad sa pamamagitan ng Share Extension (App Store Review Guideline 4.2).

Bakit Mahalaga ang Share Extension para sa App

Ibinababa ng Share Extension ang hadlang sa pagpasok: nagpapadala ang user ng nilalaman sa iyong app mula sa pamilyar na konteksto — browser, gallery, file manager. Ayon sa datos ng Branch (2024), ang mga app na may Share Extension ay nagpapakita ng 28% na mas mataas na retention sa ika-7 araw. Karagdagang epekto — virality: sa bawat oras na makikita ng user ang iyong app sa Share Sheet, nangyayari ang passive branding nang walang gastos sa advertising.

Paano Gumagana ang Share Extension

Ang mekanismo ng Share Extension ay batay sa paglilipat ng nilalaman sa pamamagitan ng system container na NSExtensionItem. Ang host app (Safari, Mga Larawan) ay nag-iimpake ng napiling nilalaman sa NSExtensionItem na may pagtukoy ng uri (public.image, public.url, public.plain-text). Ipinapasa ng system ang container na ito sa extension, na kumukuha ng data sa pamamagitan ng extensionContext.inputItems.

Lifecycle ng Extension

Ang Share Extension ay inilulunsad sa isang hiwalay na proseso na may limitadong oras ng pagpapatupad — mga 30 segundo para sa pagproseso. Ang extension ay hindi dapat magsagawa ng mahabang operasyon nang sabay-sabay. Para sa pag-load ng malalaking file, gamitin ang NSURLSession na may background configuration. SLComposeServiceViewController — base class para sa Share Extension na may preview ng nilalaman at send button.

Mga Uri ng Data at Uniform Type Identifiers

Ang iOS ay gumagamit ng Uniform Type Identifiers (UTI) para matukoy ang uri ng nilalaman na inililipat. Mga pangunahing UTI para sa Share Extension: public.image (mga larawan, screenshot), public.url (mga link), public.plain-text (teksto), public.video (mga video file) at public.file-url (mga file). Nagrerehistro ang extension ng mga suportadong UTI sa Info.plist sa pamamagitan ng key na NSExtensionActivationRule.

Arkitektura ng Extension

Ang Share Extension ay binubuo ng tatlong bahagi: target sa Xcode, SLComposeServiceViewController, at pagsasaayos ng Info.plist. Ang arkitektura ay tumutukoy kung anong mga uri ng nilalaman ang pinoproseso, kung paano ipinapakita ang interface at kung saan nai-save ang data.

BahagiLayuninMga Tampok
TargetTarget ng extension sa XcodeHiwalay na bundle na may identifier
ViewControllerInterface at lohika ng pagprosesoSLComposeServiceViewController o custom
Info.plistPagsasaayos ng activation at UTINSExtensionActivationRule na may predicates
App GroupsPinagsamang imbakan kasama ng appUserDefaults suite para sa paglilipat ng data

NSExtensionActivationRule

Ang pangunahing elemento ng pagsasaayos ng Share Extension — ang activation rule. Tinutukoy nito kung sa anong mga kondisyon lalabas ang extension sa Share Sheet. Ang rule ay tinutukoy sa Info.plist bilang isang diksyunaryo na may mga limitasyon: maximum na bilang ng mga larawan, minimum na haba ng teksto, mandatoryong presensya ng URL. Ang standard na rule ay nag-a-activate ng extension para sa anumang isang uri ng nilalaman.

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

Paggawa ng Share Extension

Tingnan natin ang praktikal na halimbawa ng paggawa ng Share Extension sa Swift para sa isang bookmark app. Tumatanggap ang extension ng URL mula sa Safari, nagpapakita ng interface na may preview, at nagse-save ng link sa App Group. SLComposeServiceViewController ay nagbibigay ng ready-made UI na may text field at Post button.

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

Pagkatapos magpadala ng nilalaman, tinatapos ng extension ang trabaho nito sa pamamagitan ng pagtawag ng completeRequest — ito ay isang mandatoryong hakbang, kung wala ito ay hindi papakawalan ng system ang proseso ng extension. Mahalaga: Ang Share Extension ay gumagana sa isang limitadong kapaligiran na may limitadong access sa network at file system — gumamit ng background session para sa pag-load ng nilalaman.

Pagproseso ng mga Uri ng Nilalaman

Dapat na maayos na iproseso ng Share Extension ang iba’t ibang uri ng input data: teksto, mga larawan, video, URL at mga file. Para sa bawat uri, ginagamit ang sariling UTI at sariling paraan ng pagkuha ng data. Universal na pagproseso — sa pamamagitan ng loop sa attachment.attachments na may pagsusuri ng hasItemConformingToTypeIdentifier.

Pagproseso ng mga Larawan

Ang mga larawan ay inililipat bilang public.image na may posibilidad na makuha sa pamamagitan ng UIImage o Data. Para sa malalaking larawan, gamitin ang jpegData(compressionQuality:) bago mag-save. Hindi dapat baguhin ng Share Extension ang orihinal na larawan nang walang malinaw na pahintulot ng user. Inirerekomenda na i-save ang orihinal sa App Group at gumawa ng preview para sa pagpapakita sa interface.

Pagproseso ng URL at Teksto

Ang Safari at iba pang browser ay nagpapadala ng URL bilang public.url, at ang napiling teksto bilang public.plain-text. Ang isang NSExtensionItem ay maaaring maglaman ng parehong uri nang sabay — ang URL ng page at ang napiling teksto dito. Dapat suriin ng Share Extension ang lahat ng attachment at kunin ang may-katuturang data. Pinagsamang senaryo: i-save ang URL bilang bookmark, at ang teksto bilang tala para dito.

App Groups at Paglilipat ng Data

Ang Share Extension at pangunahing app ay tumatakbo sa magkaibang proseso at walang shared access sa file system. Para sa pagpapalitan ng data, ginagamit ang mekanismo ng App Groups: shared container na may identifier na group.*. Pagkatapos i-save ang data sa App Group, ipinaaalam ng extension ang app sa pamamagitan ng CFNotificationCenter o Darwin Notify.

Pag-set up ng App Groups

Ang App Groups ay pinapagana sa Capabilities ng target: piliin ang “App Groups” at magdagdag ng identifier (halimbawa, group.com.example.myapp). Ang parehong target — pangunahing app at extension — ay dapat may access sa parehong grupo. UserDefaults suite ay nagbibigay-daan sa pagbasa at pagsulat ng data sa shared storage na may minimal na overhead.

swift
// Pag-save ng data sa App Group mula sa 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()

Mga Madalas Itanong

Ano ang pagkakaiba ng Share Extension sa Action Extension?

Ang Share Extension ay tumatanggap ng nilalaman mula sa ibang mga app papunta sa iyong app. Ang Action Extension, sa kabaligtaran, ay nagsasagawa ng aksyon sa nilalaman sa loob ng host app — pagsasalin ng teksto, pagbabago ng larawan. Share Extension — pagtanggap, Action Extension — pagbabago.

Anong mga UTI ang kailangang tukuyin sa Info.plist?

Depende sa uri ng nilalaman ng iyong app. Para sa mga bookmark — public.url. Para sa photo editor — public.image. Para sa mga tala — public.plain-text. Para sa maraming uri, gamitin ang NSExtensionActivationRule na may kombinasyon ng AND/OR predicates.

Bakit hindi lumalabas ang Share Extension sa Share Sheet?

Karaniwang dahilan — hindi tamang NSExtensionActivationRule o hindi tugmang UTI. Suriin sa Info.plist: ang activation rule ay dapat tumugma sa uri ng nilalaman na sinusuri. Siguraduhin din na ang extension ay naka-enable sa Settings → iyong app → Siri & Search. Xcode clean build ay madalas na nalulutas ang problema.

Gaano karaming oras ang ibinibigay sa Share Extension para sa pagproseso?

Ang sistema ay naglalaan ng humigit-kumulang 30 segundo para sa pagpapatupad. Pagkatapos nito, sapilitang tinatapos ng iOS ang proseso ng extension. Para sa mahabang operasyon, gumamit ng background NSURLSession na may pagproseso ng resulta sa susunod na paglunsad ng app.

Maaari bang magpakita ng custom na UI sa Share Extension?

Oo, sa halip na SLComposeServiceViewController ay maaaring gumamit ng ordinaryong UIViewController. Sa kasong ito, ganap mong kontrolado ang interface. Gayunpaman, ang mga send at cancel button ay kailangan mong ipatupad mismo. Custom na UI ay inirerekomenda para sa hindi karaniwang mga senaryo ng pagproseso ng nilalaman.

Buod

  • Share Extension — iOS extension na nagdaragdag ng app sa system menu na “I-share”.
  • Ang nilalaman ay inililipat sa pamamagitan ng NSExtensionItem na may Uniform Type Identifiers.
  • Ang pagsasaayos ng activation ay tinutukoy sa Info.plist sa pamamagitan ng NSExtensionActivationRule.
  • SLComposeServiceViewController — pangunahing interface na may preview at pagpapadala.
  • App Groups — mekanismo ng pagpapalitan ng data sa pagitan ng extension at app.
  • Ang Share Extension ay gumagana sa limitadong kapaligiran (30 seg, limitadong access).
  • Ang mga app na may Share Extension ay tumatanggap ng 35% na mas maraming nilalaman ng user.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din