Przegląd rozszerzeń aplikacji
Poznaj rozszerzenia udostępniania, akcji i inne rozszerzenia.
Przegląd rozszerzeń aplikacji to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Czym są rozszerzenia aplikacji
Rozszerzenie aplikacji pozwala aplikacji udostępniać funkcje wewnątrz innych aplikacji lub elementów systemu — na przykład udostępnianie treści, niestandardowe klawiatury czy indeksowanie Spotlight. Każde rozszerzenie jest osobnym targetem z własnym cyklem życia, piaskownicą i punktem wejścia określonym przez system.
// Extensions run in their own process, launched
// by the host (Photos, Safari, Messages, the system),
// not by your main app.Aplikacja hostująca, kontener i piaskownica
Występują tu trzy elementy: aplikacja hostująca wywołuje rozszerzenie, aplikacja kontenera dostarcza je wraz z aplikacją, a samo rozszerzenie działa w piaskownicy. Rozszerzenie nie może swobodnie komunikować się z aplikacją — komunikują się za pośrednictwem App Group, nigdy przez bezpośredni dostęp do pamięci.
import Foundation
// Container app + Extension target share data via
// an App Group, e.g. group.com.example.app
let group = "group.com.example.app"
_ = groupRozszerzenia udostępniania
Rozszerzenie udostępniania pojawia się w systemowym arkuszu udostępniania i pozwala użytkownikom przesyłać treści (tekst, adresy URL, obrazy) z dowolnej aplikacji do Państwa aplikacji. Dziedziczy po kontrolerze widoku lub osadza kontroler widoku, a następnie odczytuje udostępnione elementy z kontekstu rozszerzenia.
import Foundation
// Share extension reads incoming items:
// extensionContext?.inputItems
// each NSExtensionItem has attachments (NSItemProvider)
let share = "appears in the share sheet"
_ = shareOdczytywanie udostępnionych elementów
Udostępniona treść dociera jako załączniki NSItemProvider. Należy sprawdzić identyfikator typu i asynchronicznie załadować wartość. W ten sposób rozszerzenie udostępniania pobiera adres URL lub obraz udostępniany przez użytkownika.
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")
}
}
}Rozszerzenia działań
Rozszerzenie działania przekształca lub wyświetla treść w miejscu — na przykład tłumaczy zaznaczony tekst lub dodaje adnotacje do pliku PDF — i może zwrócić wynik aplikacji hostującej. W przeciwieństwie do rozszerzenia udostępniania służy do działania na treści, a nie do wysyłania jej w inne miejsce.
import Foundation
// Action extension may return modified items:
// extensionContext?.completeRequest(
// returningItems: outputItems)
let action = "acts on content, can return a result"
_ = actionRozszerzenie usługi powiadomień
Rozszerzenie usługi powiadomień przechwytuje przychodzące powiadomienia push z mutable-content: 1, aby zmodyfikować je przed wyświetleniem — odszyfrować treść, pobrać załącznik multimedialny lub zmienić tytuł — w ramach krótkiego limitu czasu.
import UserNotifications
// Override in UNNotificationServiceExtension:
// didReceive(_ request:, withContentHandler:)
// mutate bestAttemptContent, then call the handler
let service = "modifies push before it shows"
_ = serviceRozszerzenie zawartości powiadomień
Rozszerzenie zawartości powiadomień udostępnia niestandardowy interfejs użytkownika dla rozwiniętego powiadomienia — mapę, odtwarzacz multimediów lub interaktywne elementy sterujące — wyświetlany po dłuższym naciśnięciu banera. Jest powiązane z kategorią powiadomienia.
import UserNotifications
// UNNotificationContentExtension renders a custom view
// for a given UNNotificationCategory when expanded.
let content = "custom expanded notification UI"
_ = contentCykl życia completeRequest
Rozszerzenia działają krótko. Po zakończeniu należy wywołać extensionContext?.completeRequest(returningItems:completionHandler:), aby zasygnalizować ukończenie i pozwolić aplikacji hostującej zamknąć rozszerzenie. Aby przerwać działanie, należy użyć cancelRequest(withError:). Przetrzymywanie procesu otwartego marnuje zasoby i może spowodować jego zakończenie przez system.
import Foundation
func finish(context: NSExtensionContext?) {
context?.completeRequest(
returningItems: [], completionHandler: nil)
}Inne punkty rozszerzeń
iOS oferuje wiele punktów rozszerzeń: niestandardowe klawiatury, dostawców dokumentów, indeksowanie Spotlight, blokery treści Safari, intencje Siri, edycję zdjęć oraz rozszerzenia dostawców plików. Każde z nich jest zgodne z protokołem zdefiniowanym przez system i zadeklarowanym za pomocą NSExtensionPointIdentifier w pliku 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"
_ = pointLimity pamięci i czasu
Rozszerzenia działają przy bardziej rygorystycznych limitach niż główna aplikacja — mają mniej pamięci i krótki limit czasu rzeczywistego. Należy wykonywać tylko niezbędne operacje, unikać dużych alokacji i w miarę możliwości przekazywać wymagające przetwarzanie głównej aplikacji za pośrednictwem współdzielonego magazynu.
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"
_ = limitsUdostępnianie kodu między targetami
Aby uniknąć powielania logiki, należy umieścić współdzielone modele i pomocnicze elementy w frameworku lub pakiecie Swift, od którego zależą zarówno aplikacja, jak i rozszerzenie. Należy oznaczyć tylko to, czego potrzebuje dany target; rozszerzenie linkuje ten sam kod bez jego kopiowania.
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"
_ = sharedSzybkie sprawdzenie
Proszę przypomnieć sobie, w jaki sposób rozszerzenie komunikuje się z aplikacją kontenera.
Podsumowanie
Zapoznali się Państwo z rozszerzeniami aplikacji:
- Rozszerzenia to osobne cele działające w piaskownicy, uruchamiane przez aplikację hostującą; należą do nich między innymi rozszerzenia udostępniania, działań, usługi powiadomień i zawartości powiadomień.
- Przychodzącą treść należy odczytywać za pomocą
NSItemProvider, a działanie kończyć za pomocącompleteRequest. - Każde rozszerzenie deklaruje swój
NSExtensionPointIdentifieri działa przy ścisłych limitach pamięci oraz czasu. - Dane należy udostępniać za pośrednictwem App Group, a kod ponownie wykorzystywać za pomocą współdzielonego pakietu.
Często zadawane pytania
Czy lekcja „Przegląd rozszerzeń aplikacji” jest bezpłatna?
Tak — pełny tekst „Przegląd rozszerzeń aplikacji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Przegląd rozszerzeń aplikacji”?
Poznaj rozszerzenia udostępniania, akcji i inne rozszerzenia. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Przegląd rozszerzeń aplikacji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tworzenie widżetu WidgetKit
- Dostawcy osi czasu i migawki
- Przegląd rozszerzeń aplikacji
- App Intents i skróty