Share Extension — apa itu, cara kerja dan pengembangan ekstensi

Penulis: IT Sectr Diterbitkan: 2026-06-15 Waktu membaca: 10 mnt

Share Extension — adalah ekstensi iOS yang menambahkan aplikasi Anda ke menu sistem “Bagikan” (Share Sheet). Pengguna dapat mengirim konten dari Safari, Foto, File, atau aplikasi lainnya langsung ke aplikasi Anda — tanpa menyalin dan berpindah antar jendela. Menurut data Apple (2024), aplikasi dengan Share Extension menerima 35% lebih banyak konten pengguna dibandingkan aplikasi tanpa kemampuan berbagi. Ekstensi memproses teks, gambar, video, URL, dan file melalui antarmuka terpadu NSExtensionItem.

Poin Utama

  • Share Extension — ekstensi iOS untuk mengirim konten ke aplikasi dari program lain.
  • NSExtensionItem — wadah untuk mentransfer data antara aplikasi host dan ekstensi.
  • Info.plist — konfigurasi jenis konten yang diproses oleh ekstensi.
  • SLServiceTypes — pemetaan ke jejaring sosial (Twitter, Facebook) untuk mode lama.
  • App Groups — penyimpanan bersama untuk mentransfer data antara ekstensi dan aplikasi.

Apa itu Share Extension

Share Extension — adalah jenis ekstensi iOS app extension yang muncul di menu sistem “Bagikan” saat memilih konten di aplikasi mana pun. Pengguna memilih teks di Safari, menekan “Bagikan” dan melihat aplikasi Anda dalam daftar tindakan yang tersedia. Setelah dipilih, konten dikirim ke ekstensi untuk diproses: disimpan, dipublikasikan, dikirim, atau diubah.

Tidak seperti Action Extension, Share Extension berspesialisasi dalam menerima konten dari aplikasi eksternal. Action Extension, sebaliknya, mengirim data dari aplikasi Anda ke luar. Share Extension adalah titik masuk konten pengguna, elemen kunci akuisisi pengguna: pengguna mencoba aplikasi melalui Share Extension tanpa menginstalnya sepenuhnya. App Store melarang aplikasi yang satu-satunya fungsinya menampilkan iklan melalui Share Extension (App Store Review Guideline 4.2).

Mengapa Share Extension penting untuk aplikasi

Share Extension menurunkan hambatan masuk: pengguna mengirim konten ke aplikasi Anda dari konteks yang familiar — browser, galeri, manajer file. Menurut data Branch (2024), aplikasi dengan Share Extension menunjukkan retensi 28% lebih tinggi pada hari ke-7. Efek tambahan — viralitas: setiap kali pengguna melihat aplikasi Anda di Share Sheet, terjadi branding pasif tanpa biaya iklan.

Cara Kerja Share Extension

Mekanisme Share Extension didasarkan pada transfer konten melalui wadah sistem NSExtensionItem. Aplikasi host (Safari, Foto) mengemas konten yang dipilih ke dalam NSExtensionItem dengan menentukan tipenya (public.image, public.url, public.plain-text). Sistem meneruskan wadah ini ke ekstensi, yang mengekstrak data melalui extensionContext.inputItems.

Siklus Hidup Ekstensi

Share Extension dijalankan dalam proses terpisah dengan waktu eksekusi terbatas — sekitar 30 detik untuk pemrosesan. Ekstensi tidak boleh melakukan operasi panjang secara sinkron. Untuk mengunggah file besar, gunakan NSURLSession dengan konfigurasi latar belakang. SLComposeServiceViewController — kelas dasar untuk Share Extension dengan pratinjau konten dan tombol kirim.

Tipe Data dan Uniform Type Identifiers

iOS menggunakan Uniform Type Identifiers (UTI) untuk menentukan jenis konten yang ditransfer. UTI utama untuk Share Extension: public.image (foto, tangkapan layar), public.url (tautan), public.plain-text (teks), public.video (file video) dan public.file-url (file). Ekstensi mendaftarkan UTI yang didukung di Info.plist melalui kunci NSExtensionActivationRule.

Arsitektur Ekstensi

Share Extension terdiri dari tiga komponen: target di Xcode, SLComposeServiceViewController, dan konfigurasi Info.plist. Arsitektur menentukan jenis konten apa yang diproses, bagaimana antarmuka ditampilkan, dan di mana data disimpan.

KomponenTujuanFitur
TargetTarget ekstensi di XcodeBundle terpisah dengan pengidentifikasi
ViewControllerAntarmuka dan logika pemrosesanSLComposeServiceViewController atau khusus
Info.plistKonfigurasi aktivasi dan UTINSExtensionActivationRule dengan predikat
App GroupsPenyimpanan bersama dengan aplikasiUserDefaults suite untuk transfer data

NSExtensionActivationRule

Elemen kunci konfigurasi Share Extension — aturan aktivasi. Ini menentukan dalam kondisi apa ekstensi muncul di Share Sheet. Aturan ditentukan di Info.plist sebagai kamus dengan batasan: jumlah maksimum gambar, panjang minimum teks, keharusan adanya URL. Aturan standar mengaktifkan ekstensi untuk satu jenis konten apa pun.

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

Membuat Share Extension

Mari kita lihat contoh praktis membuat Share Extension di Swift untuk aplikasi penanda. Ekstensi menerima URL dari Safari, menampilkan antarmuka dengan pratinjau, dan menyimpan tautan di App Group. SLComposeServiceViewController menyediakan UI siap pakai dengan bidang teks dan tombol 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)
            }
        }
    }
}

Setelah mengirim konten, ekstensi mengakhiri kerjanya dengan memanggil completeRequest — ini adalah langkah wajib, tanpa ini sistem tidak akan membebaskan proses ekstensi. Penting: Share Extension beroperasi di lingkungan terbatas dengan akses terbatas ke jaringan dan sistem file — gunakan sesi latar belakang untuk mengunggah konten.

Memproses Jenis Konten

Share Extension harus memproses berbagai jenis data masukan dengan benar: teks, gambar, video, URL, dan file. Untuk setiap jenis, digunakan UTI dan metode ekstraksi data sendiri. Pemrosesan universal — melalui perulangan pada attachment.attachments dengan pemeriksaan hasItemConformingToTypeIdentifier.

Memproses Gambar

Gambar ditransfer sebagai public.image dengan kemungkinan diperoleh melalui UIImage atau Data. Untuk gambar besar, gunakan jpegData(compressionQuality:) sebelum menyimpan. Share Extension tidak boleh memodifikasi gambar asli tanpa izin eksplisit pengguna. Disarankan untuk menyimpan asli di App Group dan membuat pratinjau untuk ditampilkan di antarmuka.

Memproses URL dan Teks

Safari dan browser lainnya mengirimkan URL sebagai public.url, dan teks yang dipilih sebagai public.plain-text. Satu NSExtensionItem dapat berisi kedua jenis sekaligus — URL halaman dan teks yang dipilih di atasnya. Share Extension harus memeriksa semua attachment dan mengekstrak data yang relevan. Skenario kombinasi: simpan URL sebagai penanda, dan teks sebagai catatan untuknya.

App Groups dan Transfer Data

Share Extension dan aplikasi utama berjalan dalam proses yang berbeda dan tidak memiliki akses bersama ke sistem file. Untuk pertukaran data, digunakan mekanisme App Groups: wadah bersama dengan pengidentifikasi group.*. Setelah menyimpan data di App Group, ekstensi memberi tahu aplikasi melalui CFNotificationCenter atau Darwin Notify.

Mengatur App Groups

App Groups diaktifkan di Capabilities target: pilih “App Groups” dan tambahkan pengidentifikasi (misalnya, group.com.example.myapp). Kedua target — aplikasi utama dan ekstensi — harus memiliki akses ke grup yang sama. UserDefaults suite memungkinkan membaca dan menulis data di penyimpanan bersama dengan overhead minimal.

swift
// Menyimpan data ke App Group dari 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()

Pertanyaan yang Sering Diajukan

Apa perbedaan Share Extension dengan Action Extension?

Share Extension menerima konten dari aplikasi lain ke aplikasi Anda. Action Extension, sebaliknya, melakukan tindakan pada konten di dalam aplikasi host — menerjemahkan teks, mengubah gambar. Share Extension — penerimaan, Action Extension — transformasi.

UTI apa yang perlu ditentukan di Info.plist?

Tergantung pada jenis konten aplikasi Anda. Untuk penanda — public.url. Untuk editor foto — public.image. Untuk catatan — public.plain-text. Untuk beberapa jenis, gunakan NSExtensionActivationRule dengan kombinasi predikat AND/OR.

Mengapa Share Extension tidak muncul di Share Sheet?

Penyebab umum — NSExtensionActivationRule yang salah atau ketidakcocokan UTI. Periksa di Info.plist: aturan aktivasi harus sesuai dengan jenis konten yang diuji. Pastikan juga ekstensi diaktifkan di Settings → aplikasi Anda → Siri & Search. Xcode clean build sering menyelesaikan masalah.

Berapa waktu yang diberikan untuk Share Extension memproses?

Sistem mengalokasikan sekitar 30 detik untuk eksekusi. Setelah itu, iOS secara paksa mengakhiri proses ekstensi. Untuk operasi panjang, gunakan NSURLSession latar belakang dengan pemrosesan hasil pada peluncuran aplikasi berikutnya.

Bisakah menampilkan UI kustom di Share Extension?

Ya, alih-alih SLComposeServiceViewController, Anda dapat menggunakan UIViewController biasa. Dalam hal ini, Anda sepenuhnya mengontrol antarmuka. Namun, tombol kirim dan batal harus diimplementasikan sendiri. UI kustom direkomendasikan untuk skenario pemrosesan konten yang tidak standar.

Kesimpulan

  • Share Extension — ekstensi iOS yang menambahkan aplikasi ke menu sistem “Bagikan”.
  • Konten ditransfer melalui NSExtensionItem dengan Uniform Type Identifiers.
  • Konfigurasi aktivasi ditentukan di Info.plist melalui NSExtensionActivationRule.
  • SLComposeServiceViewController — antarmuka dasar dengan pratinjau dan pengiriman.
  • App Groups — mekanisme pertukaran data antara ekstensi dan aplikasi.
  • Share Extension beroperasi di lingkungan terbatas (30 dtk, akses terbatas).
  • Aplikasi dengan Share Extension menerima 35% lebih banyak konten pengguna.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga