Action Extension: apa itu, cara kerja dan pengembangan ekstensi

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

Action Extension adalah ekstensi iOS yang melakukan tindakan kustom dengan konten dari aplikasi lain tanpa mengubah konteks. Berbeda dengan Share Extension yang mengirim data ke aplikasi lain, Action Extension mentransformasi konten langsung di tempat: menerjemahkan teks, mengubah filter gambar, memeriksa ejaan, atau menghasilkan PDF. Menurut Apple (2024), Action Extension adalah jenis ekstensi paling populer kedua setelah Share Extension, digunakan di 42% aplikasi kategori “Produktivitas”. Tindakan instan tanpa meluncurkan aplikasi utama — keunggulan utama bagi pengguna.

Poin Utama

  • Action Extension — ekstensi iOS untuk mentransformasi konten di aplikasi host.
  • NSExtensionContext — konteks eksekusi dengan data masukan dan keluaran.
  • UTI — Uniform Type Identifiers untuk menentukan jenis konten yang diproses.
  • UIActivity — mekanisme lama untuk mengimplementasikan tindakan di iOS 6–7.
  • App Groups — mengirim data yang diproses kembali ke aplikasi.

Apa itu Action Extension

Action Extension adalah jenis ekstensi iOS yang memungkinkan Anda melakukan tindakan pada konten langsung di konteks aplikasi host. Pengguna memilih teks di Safari, menekan “Tindakan” dan memilih misalnya “Periksa Ejaan” — ekstensi memproses teks dan mengembalikan hasil tanpa meninggalkan browser. Ekstensi menerima data masukan melalui NSExtensionContext dan dapat mengembalikan konten yang dimodifikasi.

Action Extension muncul di iOS 8 sebagai bagian dari arsitektur ekstensi aplikasi. Fitur utamanya adalah ekstensi tidak memiliki antarmuka sendiri (opsional) dan berjalan dalam konteks aplikasi host. Pengguna tidak meninggalkan layar saat ini, yang memastikan gangguan kognitif minimal. Menurut Apple, Action Extension adalah satu-satunya jenis ekstensi yang dapat membaca dan memodifikasi konten aplikasi host secara bersamaan (melalui NSExtensionContext dengan mengembalikan hasil).

Di mana Action Extension digunakan

Action Extension digunakan dalam berbagai skenario: menerjemahkan teks di browser, membuat PDF dari halaman web, menerapkan filter ke foto di galeri, memeriksa ejaan di bidang teks apa pun, memperpendek URL, mengenkripsi teks, dan menambahkan ke bookmark. Keserbagunaan Action Extension menjadikannya alat populer untuk aplikasi kategori “Utilitas” dan “Produktivitas”.

Action Extension vs Share Extension

Action Extension dan Share Extension sering tertukar, tetapi tujuannya pada dasarnya berbeda. Share Extension mengirim konten dari aplikasi host ke aplikasi Anda; Action Extension memproses konten dan mengembalikannya. Perbedaan mempengaruhi arsitektur, pengalaman pengguna, dan persyaratan konfigurasi Info.plist.

KarakteristikAction ExtensionShare Extension
TujuanTransformasi kontenMengirim konten ke aplikasi
AntarmukaOpsional (kustom)SLComposeServiceViewController
Pengembalian dataYa, melalui completeRequestTidak
KonteksTetap di aplikasi hostBeralih ke ekstensi
Posisi di menuAction Sheet (bagian atas)Share Sheet (bagian bawah)
Tindakan tipikalTerjemahan, koreksi, filterMenyimpan, mempublikasikan

Bagaimana pengguna memilih tindakan

Action Extension muncul di menu tindakan (Action Sheet) saat menekan tombol “Bagikan” atau “...”. iOS secara otomatis menempatkan Action Extensions di bagian atas lembar (tindakan), dan Share Extensions di bagian bawah (aplikasi). Skenario pengguna: memilih teks → menekan “Tindakan” → memilih Action Extension Anda → menerima hasil yang diproses tanpa beralih aplikasi.

Arsitektur Action Extension

Action Extension terdiri dari target di Xcode, UIViewController untuk menampilkan antarmuka (opsional), NSExtensionContext untuk masukan-keluaran data, dan konfigurasi Info.plist. Arsitektur lebih sederhana daripada Share Extension: tidak ada antarmuka compose wajib, dan ekstensi dapat berfungsi sepenuhnya tanpa UI.

Komponen Action Extension

Target — bundle terpisah dengan identifier yang diwarisi dari aplikasi utama. UIViewController — antarmuka opsional untuk menampilkan kemajuan, pengaturan, atau hasil. NSExtensionContext — wadah dengan data masukan (inputItems) dan metode completeRequest untuk mengembalikan hasil. Info.plist — konfigurasi aktivasi melalui NSExtensionActivationRule dan atribut (NSExtensionAttributes) untuk menentukan jenis konten yang didukung.

NSExtensionContext dan aliran data

Action Extension menerima data masukan melalui extensionContext?.inputItems — array NSExtensionItem. Setiap elemen berisi lampiran dengan data dan UTI. Setelah diproses, ekstensi memanggil completeRequest(returningItems:) dengan array NSExtensionItem keluaran. Aplikasi host menerima data yang diproses dan menampilkannya. Model asinkron: ekstensi dapat melakukan operasi panjang, mempertahankan konteks hingga 30 detik.

Membuat Action Extension

Mari kita lihat pembuatan Action Extension di Swift untuk menerjemahkan teks yang dipilih. Ekstensi menerima teks dari aplikasi host, mengirimkannya ke server terjemahan, dan mengembalikan hasilnya. ActionViewController — pengontrol dasar yang dibuat Xcode saat menambahkan target.

swift
import UIKit
import MobileCoreServices

class ActionViewController: UIViewController {

    @IBOutlet var resultLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        extractTextAndTranslate()
    }

    func extractTextAndTranslate() {
        guard let item = extensionContext?.inputItems.first
                as? NSExtensionItem
        else { return }

        for attachment in item.attachments ?? [] {
            attachment.loadItem(
                forTypeIdentifier: kUTTypePlainText as String
            ) { [weak self] (text, error) in
                guard let inputText = text as? String else { return }
                TranslationService().translate(inputText, from: "en", to: "ru") {
                    translated in
                    DispatchQueue.main.async {
                        self?.resultLabel?.text = translated
                    }
                }
            }
        }
    }
}

Setelah diproses, ekstensi mengembalikan hasil ke aplikasi host. completeRequest dengan data keluaran — skenario alternatif ketika ekstensi tidak menampilkan UI tetapi langsung mengembalikan konten yang diproses.

swift
// Mengembalikan teks yang diproses ke aplikasi host
let resultItem = NSExtensionItem()
let resultData = translated.data(using: .utf8)!
let attachment = NSItemProvider(
    item: resultData,
    typeIdentifier: kUTTypePlainText as String
)
resultItem.attachments = [attachment]
extensionContext?.completeRequest(
    returningItems: [resultItem], completionHandler: nil
)

Pemrosesan Data dan Mengembalikan Hasil

Action Extension dapat berfungsi dalam dua mode: dengan UI dan tanpa UI. Dalam mode tanpa UI, ekstensi melakukan tindakan sepenuhnya di latar belakang dan memanggil completeRequest segera setelah pemrosesan. Dalam mode dengan UI, ekstensi menampilkan pengontrol, pengguna mengonfirmasi tindakan, dan baru setelah itu completeRequest mengirimkan hasil. Pemilihan mode tergantung pada kompleksitas tindakan dan kebutuhan input pengguna.

Memuat data dari lampiran

Metode loadItem(forTypeIdentifier:) bekerja secara asinkron — data bisa besar (gambar, video). NSItemProvider mengelola pemuatan streaming dan caching. Untuk gambar gunakan kUTTypeImage, untuk file — kUTTypeFileURL. Penting: loadItem dapat dipanggil di thread latar belakang — perbarui UI hanya melalui DispatchQueue.main.

Mengembalikan data yang dimodifikasi

Action Extension mengembalikan data yang diproses melalui completeRequest dengan array NSExtensionItem. Setiap elemen sesuai dengan jenis data keluaran. Aplikasi host dapat mengganti konten asli dengan yang diproses — misalnya, mengganti gambar asli dengan yang difilter. NSExtensionItem mendukung UTI yang sama seperti pada masukan, plus tambahan (misalnya, public.html untuk konten web).

Skenario Penggunaan Action Extension

Action Extension diterapkan dalam puluhan skenario — dari utilitas sederhana hingga proses bisnis yang kompleks. Contoh klasik mencakup operasi teks, grafis, dan file, serta integrasi dengan konten web.

Skenario teks

Action Extension untuk teks: terjemahan, pemeriksaan ejaan, penghitungan karakter, pengubahan huruf besar/kecil, enkripsi, pembuatan kode QR dari teks. Pengguna memilih teks di aplikasi mana pun dengan bidang teks (Safari, Catatan, Surat) dan dengan satu klik melakukan tindakan. Penyorotan sintaks kode, pemformatan Markdown, dan pemendekan URL — contoh populer Action Extension untuk pengguna tingkat lanjut.

Skenario grafis

Untuk gambar, Action Extension menawarkan: menerapkan filter, memotong, mengubah ukuran, konversi format (HEIC ke JPEG), menambahkan tanda air, pengenalan teks (OCR), dan kompresi. Pemrosesan gambar harus cepat — pengguna mengharapkan hasil dalam 2–3 detik. Untuk operasi berat, gunakan Core Image di GPU atau antrian latar belakang.

Skenario web

Action Extension untuk URL: membuat PDF dari halaman web, menyimpan ke Pocket/Pinterest, memeriksa kecepatan situs, mengarsipkan halaman, mengambil metadata Open Graph, menghasilkan tangkapan layar halaman. Generasi PDF — salah satu skenario paling populer: pengguna mengonversi halaman web ke PDF tanpa membuka layanan pihak ketiga.

Pertanyaan yang Sering Diajukan

Apa perbedaan utama antara Action Extension dan Share Extension?

Share Extension mengirim konten dari aplikasi host ke aplikasi Anda. Action Extension memproses konten di tempat dan mengembalikan hasilnya. Share — pengiriman, Action — transformasi. Ini adalah perbedaan mendasar yang menentukan arsitektur dan UX.

Bisakah Action Extension tidak memiliki antarmuka?

Ya. Jika tindakan tidak memerlukan input dari pengguna (misalnya, penghitungan karakter), ekstensi dapat melakukannya di latar belakang dan segera mengembalikan hasil melalui completeRequest. Di Info.plist harus ditentukan NSExtensionActivationSupportsWebURL atau UTI lain yang sesuai dengan jenis data.

Di aplikasi mana Action Extension muncul?

Di semua aplikasi yang mendukung UIActivityViewController atau pengontrol tindakan standar. Ini termasuk Safari, Foto, File, Catatan, Surat, dan ribuan aplikasi pihak ketiga. Action Extension tidak berfungsi di aplikasi yang tidak menggunakan mekanisme standar iOS untuk tindakan.

Bagaimana cara mengembalikan konten yang diproses ke aplikasi host?

Melalui extensionContext.completeRequest(returningItems:) dengan array NSExtensionItem. Setiap elemen keluaran berisi NSItemProvider dengan data yang diproses. Aplikasi host menerima hasil di delegasi UIActivityViewController atau callback serupa.

Apa batasan Action Extension?

Ekstensi bekerja hingga 30 detik, setelah itu iOS mengakhirinya secara paksa. Tidak ada akses langsung ke aplikasi utama — hanya melalui App Groups. Action Extension tidak dapat melakukan tugas latar belakang setelah selesai. Untuk operasi panjang, gunakan NSURLSession latar belakang dengan pemberitahuan saat peluncuran berikutnya.

Ringkasan

  • Action Extension — ekstensi iOS untuk mentransformasi konten langsung di aplikasi host.
  • Berbeda dari Share Extension dengan mengembalikan data yang diproses melalui NSExtensionContext.
  • Dapat bekerja dengan UI atau sepenuhnya di latar belakang tanpa antarmuka.
  • Mendukung semua jenis konten: teks, gambar, URL, file melalui UTI.
  • Digunakan untuk terjemahan, filter, generasi PDF, OCR, dan pemeriksaan ejaan.
  • Batas waktu eksekusi — 30 detik, akses ke aplikasi — melalui App Groups.
  • Action Extension digunakan di 42% aplikasi kategori “Produktivitas”.

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