Ikhtisar Ekstensi Aplikasi
Pahami ekstensi berbagi, tindakan, dan ekstensi lainnya.
Ikhtisar Ekstensi Aplikasi adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Apa Itu Ekstensi Aplikasi
Ekstensi aplikasi memungkinkan aplikasi Anda menyediakan fungsi di dalam aplikasi lain atau antarmuka sistem—berbagi content, papan ketik khusus, pengindeksan Spotlight, dan lainnya. Setiap ekstensi adalah target terpisah dengan siklus hidup, kotak pasir, dan titik masuknya sendiri yang ditentukan oleh sistem.
// Extensions run in their own process, launched
// by the host (Photos, Safari, Messages, the system),
// not by your main app.Aplikasi Induk, Wadah, dan Kotak Pasir
Terdapat tiga komponen: aplikasi induk memanggil ekstensi, aplikasi wadah Anda mengirimkannya, dan ekstensi itu sendiri berjalan dalam kotak pasir. Ekstensi tidak dapat berkomunikasi secara bebas dengan aplikasi Anda—keduanya berkomunikasi melalui Grup Aplikasi, bukan melalui akses memori langsung.
import Foundation
// Container app + Extension target share data via
// an App Group, e.g. group.com.example.app
let group = "group.com.example.app"
_ = groupEkstensi Berbagi
Ekstensi berbagi muncul di lembar berbagi sistem, sehingga pengguna dapat mengirim content—teks, URL, atau gambar—dari aplikasi mana pun ke aplikasi Anda. Ekstensi ini merupakan turunan dari atau menampung pengontrol tampilan, serta membaca item yang dibagikan dari konteks ekstensi.
import Foundation
// Share extension reads incoming items:
// extensionContext?.inputItems
// each NSExtensionItem has attachments (NSItemProvider)
let share = "appears in the share sheet"
_ = shareMembaca Item yang Dibagikan
Content yang dibagikan tiba sebagai lampiran NSItemProvider. Periksa pengenal tipe lalu muat nilainya secara asinkron. Beginilah ekstensi berbagi mengambil URL atau gambar yang dibagikan pengguna.
import UniformTypeIdentifiers
func handle(_ provider: NSItemProvider) {
if provider.hasItemConformingToTypeIdentifier(
UTType.url.identifier) {
provider.loadItem(
forTypeIdentifier: UTType.url.identifier) {
value, _ in
print("shared url:", value ?? "none")
}
}
}Ekstensi Tindakan
Ekstensi tindakan mengubah atau menampilkan content secara langsung—menerjemahkan teks yang dipilih atau memberi anotasi pada PDF—dan dapat mengembalikan hasil kepada aplikasi induk. Berbeda dari ekstensi berbagi, ekstensi ini ditujukan untuk bertindak atas content, bukan mengirimkannya ke tempat lain.
import Foundation
// Action extension may return modified items:
// extensionContext?.completeRequest(
// returningItems: outputItems)
let action = "acts on content, can return a result"
_ = actionEkstensi Layanan Notifikasi
Ekstensi Layanan Notifikasi mencegat notifikasi masuk dengan mutable-content: 1 untuk mengubahnya sebelum ditampilkan—mendekripsi isi, mengunduh lampiran media, atau menulis ulang judul—dalam budget waktu yang singkat.
import UserNotifications
// Override in UNNotificationServiceExtension:
// didReceive(_ request:, withContentHandler:)
// mutate bestAttemptContent, then call the handler
let service = "modifies push before it shows"
_ = serviceEkstensi Konten Notifikasi
Ekstensi Konten Notifikasi menyediakan antarmuka khusus untuk notifikasi yang diperluas—peta, pemutar media, atau kontrol interaktif—yang ditampilkan saat pengguna menekan dan menahan banner. Ekstensi ini terhubung ke kategori notifikasi.
import UserNotifications
// UNNotificationContentExtension renders a custom view
// for a given UNNotificationCategory when expanded.
let content = "custom expanded notification UI"
_ = contentSiklus Hidup completeRequest
Ekstensi berumur singkat. Setelah selesai, panggil extensionContext?.completeRequest(returningItems:completionHandler:) untuk menandai penyelesaian dan membiarkan aplikasi induk menutup ekstensi. Untuk membatalkannya, gunakan cancelRequest(withError:). Membiarkan proses tetap terbuka membuang sumber daya dan dapat menyebabkan proses dihentikan.
import Foundation
func finish(context: NSExtensionContext?) {
context?.completeRequest(
returningItems: [], completionHandler: nil)
}Titik Ekstensi Lainnya
iOS menyediakan banyak titik ekstensi: papan ketik khusus, penyedia dokumen, pengindeksan Spotlight, pemblokir content Safari, intent Siri, pengeditan foto, dan ekstensi penyedia berkas. Masing-masing menerapkan protokol yang ditentukan sistem dan dideklarasikan oleh NSExtensionPointIdentifier dalam Info.plist.
// Info.plist of an extension declares its point:
// NSExtension > NSExtensionPointIdentifier
// e.g. com.apple.share-services
// com.apple.usernotifications.service
let point = "each extension declares its point"
_ = pointBatas Memori dan Waktu
Ekstensi berjalan dengan batas yang lebih ketat daripada aplikasi utama—memori lebih sedikit dan batas waktu nyata yang singkat. Lakukan pekerjaan seminimal mungkin, hindari alokasi besar, dan alihkan pemrosesan berat ke aplikasi utama melalui penyimpanan bersama jika memungkinkan.
import Foundation
// Tight memory + short runtime.
// Pattern: extension stages data in the App Group,
// the main app processes it fully on next launch.
let limits = "keep extensions lean and fast"
_ = limitsBerbagi Kode antar Target
Untuk menghindari penggandaan logika, letakkan model dan pembantu bersama dalam kerangka kerja atau paket Swift yang menjadi dependensi aplikasi dan ekstensi. Tandai hanya hal yang diperlukan setiap target; ekstensi menautkan kode yang sama tanpa menyalinnya.
import Foundation
// Shared Swift package 'AppCore' linked by:
// - main app target
// - share extension target
// - widget extension target
let shared = "one source of truth for models"
_ = sharedPemeriksaan Singkat
Ingat kembali cara ekstensi berkomunikasi dengan aplikasi wadahnya.
Ringkasan
Anda telah meninjau ekstensi aplikasi:
- Ekstensi adalah target terpisah dalam kotak pasir yang diluncurkan oleh aplikasi induk; jenisnya mencakup berbagi, action, service notifikasi, dan content notifikasi.
- Baca content masuk melalui
NSItemProviderdan akhiri dengancompleteRequest. - Setiap ekstensi mendeklarasikan
NSExtensionPointIdentifierdan berjalan dengan batas memori/waktu yang ketat. - Bagikan data melalui Grup Aplikasi dan gunakan kembali kode melalui paket bersama.
Belajar Swift dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Ikhtisar Ekstensi Aplikasi” gratis?
Ya — teks lengkap “Ikhtisar Ekstensi Aplikasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Ikhtisar Ekstensi Aplikasi”?
Pahami ekstensi berbagi, tindakan, dan ekstensi lainnya. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Ikhtisar Ekstensi Aplikasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membangun WidgetKit Widget
- Penyedia Linimasa dan Snapshot
- Ikhtisar Ekstensi Aplikasi
- App Intents dan Shortcuts