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 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).
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 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.
| Karakteristik | Action Extension | Share Extension |
|---|---|---|
| Tujuan | Transformasi konten | Mengirim konten ke aplikasi |
| Antarmuka | Opsional (kustom) | SLComposeServiceViewController |
| Pengembalian data | Ya, melalui completeRequest | Tidak |
| Konteks | Tetap di aplikasi host | Beralih ke ekstensi |
| Posisi di menu | Action Sheet (bagian atas) | Share Sheet (bagian bawah) |
| Tindakan tipikal | Terjemahan, koreksi, filter | Menyimpan, mempublikasikan |
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.
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.
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.
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.
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.
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.
// 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
)
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.
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.
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).
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.
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.
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.
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
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.
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 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.
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.
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
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.
Baca juga