0Pricing
Swift Academy · Lektion

Überblick über App Extensions

Verstehen Sie Share-, Action- und weitere Extensions.

Überblick über App Extensions ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was App Extensions sind

Eine App Extension ermöglicht es Ihrer App, Funktionen innerhalb anderer Apps oder auf Systemoberflächen bereitzustellen – etwa zum Teilen von Inhalten, für benutzerdefinierte Tastaturen oder die Spotlight-Indizierung. Jede Extension ist ein separates Target mit eigenem Lebenszyklus, eigener Sandbox und einem vom System definierten Einstiegspunkt.

// Extensions run in their own process, launched
// by the host (Photos, Safari, Messages, the system),
// not by your main app.

Host, Container und Sandbox

Drei Beteiligte wirken zusammen: Die Host-App ruft die Extension auf, Ihre Container-App liefert sie aus, und die Extension selbst läuft in einer Sandbox. Die Extension kann nicht beliebig mit Ihrer App kommunizieren – beide tauschen sich über eine App Group aus, niemals über direkten Speicherzugriff.

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

Share Extensions

Eine Share Extension erscheint im systemweiten Teilen-Menü und ermöglicht es Benutzern, Inhalte wie Text, URLs oder Bilder aus jeder App an Ihre App zu senden. Sie leitet sich von einem View Controller ab oder hostet einen solchen und liest die geteilten Elemente aus dem Extension-Kontext.

import Foundation
// Share extension reads incoming items:
// extensionContext?.inputItems
//   each NSExtensionItem has attachments (NSItemProvider)
let share = "appears in the share sheet"
_ = share

Geteilte Elemente lesen

Geteilte Inhalte treffen als NSItemProvider-Anhänge ein. Sie prüfen die Typkennung und laden den Wert asynchron. Auf diese Weise ruft eine Share Extension die URL oder das Bild ab, das der Benutzer teilt.

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")
        }
    }
}

Action Extensions

Eine Action Extension wandelt Inhalte direkt an ihrem aktuellen Ort um oder zeigt sie dort an – etwa indem sie ausgewählten Text übersetzt oder ein PDF mit Anmerkungen versieht – und kann ein Ergebnis an den Host zurückgeben. Im Gegensatz zu einer Share Extension dient sie dazu, Inhalte zu bearbeiten, statt sie an einen anderen Ort zu senden.

import Foundation
// Action extension may return modified items:
// extensionContext?.completeRequest(
//     returningItems: outputItems)
let action = "acts on content, can return a result"
_ = action

Notification Service Extension

Eine Notification Service Extension fängt eingehende Push-Benachrichtigungen mit mutable-content: 1 ab, um sie vor der Anzeige zu ändern – etwa den Inhalt zu entschlüsseln, einen Medienanhang herunterzuladen oder den Titel umzuschreiben. Dafür steht nur ein kurzes Zeitbudget zur Verfügung.

import UserNotifications
// Override in UNNotificationServiceExtension:
// didReceive(_ request:, withContentHandler:)
//   mutate bestAttemptContent, then call the handler
let service = "modifies push before it shows"
_ = service

Notification Content Extension

Eine Notification Content Extension stellt eine benutzerdefinierte Oberfläche für eine erweiterte Benachrichtigung bereit – etwa eine Karte, einen Mediaplayer oder interaktive Steuerelemente –, die angezeigt wird, wenn der Benutzer das Banner lange gedrückt hält. Sie ist an eine Benachrichtigungskategorie gebunden.

import UserNotifications
// UNNotificationContentExtension renders a custom view
// for a given UNNotificationCategory when expanded.
let content = "custom expanded notification UI"
_ = content

Der completeRequest-Lebenszyklus

Extensions haben eine kurze Lebensdauer. Rufen Sie nach Abschluss extensionContext?.completeRequest(returningItems:completionHandler:) auf, um den Abschluss zu signalisieren und dem Host zu ermöglichen, die Extension zu schließen. Zum Abbrechen verwenden Sie cancelRequest(withError:). Wenn der Prozess offen bleibt, werden Ressourcen verschwendet, und das System beendet ihn möglicherweise.

import Foundation
func finish(context: NSExtensionContext?) {
    context?.completeRequest(
        returningItems: [], completionHandler: nil)
}

Weitere Extension-Punkte

iOS bietet viele Extension-Punkte: benutzerdefinierte Tastaturen, Dokumentanbieter, Spotlight-Indizierung, Safari-Inhaltsblocker, Siri Intents, Fotobearbeitung und File Provider Extensions. Jeder entspricht einem vom System definierten Protokoll, das durch einen NSExtensionPointIdentifier in der Info.plist festgelegt wird.

// 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

Speicher- und Zeitlimits

Extensions unterliegen strengeren Grenzen als die Haupt-App – sie haben weniger Speicher und ein knappes Zeitbudget. Führen Sie nur minimale Arbeiten aus, vermeiden Sie große Speicherzuweisungen und verlagern Sie aufwendige Verarbeitung nach Möglichkeit über gemeinsamen Speicher in die Haupt-App.

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

Code zwischen Targets teilen

Um doppelte Logik zu vermeiden, legen Sie gemeinsame Modelle und Hilfsfunktionen in einem Framework oder Swift Package ab, von dem sowohl die App als auch die Extension abhängen. Kennzeichnen Sie nur das, was jedes Target benötigt. Die Extension bindet denselben Code ein, ohne ihn zu kopieren.

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

Schnelltest

Rufen Sie sich ins Gedächtnis, wie eine Extension mit ihrer Container-App kommuniziert.

Zusammenfassung

Sie haben App Extensions kennengelernt:

  • Extensions sind separate, sandboxgeschützte Targets, die von einem Host gestartet werden. Zu ihren Typen gehören Share-, Action-, Notification Service- und Notification Content Extensions.
  • Lesen Sie eingehende Inhalte über NSItemProvider und schließen Sie den Vorgang mit completeRequest ab.
  • Jede Extension deklariert ihren NSExtensionPointIdentifier und läuft unter strengen Speicher- und Zeitlimits.
  • Teilen Sie Daten über eine App Group und verwenden Sie Code über ein gemeinsames Package wieder.

Häufig gestellte Fragen

Ist die Lektion „Überblick über App Extensions“ kostenlos?

Ja — der vollständige Text von „Überblick über App Extensions“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Überblick über App Extensions“?

Verstehen Sie Share-, Action- und weitere Extensions. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Überblick über App Extensions“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Ein WidgetKit-Widget erstellen
  2. Timeline-Provider und Snapshots
  3. Überblick über App Extensions
  4. App Intents und Shortcuts
← Zurück zu Swift Academy