Swift Academy · Pelajaran

Ikhtisar Ekstensi Aplikasi

Pahami ekstensi berbagi, tindakan, dan ekstensi lainnya.

Pelajaran 3 dari 413 langkah

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"
_ = group

Ekstensi 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"
_ = share

Membaca 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"
_ = action

Ekstensi 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"
_ = service

Ekstensi 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"
_ = content

Siklus 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"
_ = point

Batas 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"
_ = limits

Berbagi 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"
_ = shared

Pemeriksaan 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 NSItemProvider dan akhiri dengan completeRequest.
  • Setiap ekstensi mendeklarasikan NSExtensionPointIdentifier dan berjalan dengan batas memori/waktu yang ketat.
  • Bagikan data melalui Grup Aplikasi dan gunakan kembali kode melalui paket bersama.
Gratis untuk memulai

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

  1. Membangun WidgetKit Widget
  2. Penyedia Linimasa dan Snapshot
  3. Ikhtisar Ekstensi Aplikasi
  4. App Intents dan Shortcuts
← Kembali ke Swift Academy