App Extensions sind separate ausführbare Module, die die Möglichkeiten einer mobilen App über ihre Hauptoberfläche hinaus erweitern: Today Widget auf dem Startbildschirm, VoIP-Anrufverarbeitung über CallKit und Reaktion auf Systemereignisse über BroadcastReceiver. Systemintegrationen ermöglichen einer App die Interaktion mit dem Betriebssystem auf einer tiefen Ebene und schalten Funktionen frei, die normalen Bildschirmen nicht zur Verfügung stehen. Laut der Apple Developer Documentation läuft jede Erweiterung in einem isolierten Prozess und wird vom System unabhängig von der Haupt-App verwaltet. App Extensions in einer mobilen App ermöglichen die Implementierung von Funktionen, die im Hauptprozess nicht verfügbar sind.
Wichtigste Punkte
App Extensions auf iOS erschienen mit iOS 8 und wurden zur Grundlage für Systemintegrationen in der mobilen Entwicklung. Dies sind separate Binärdateien, die mit der Haupt-App gebündelt, aber in einem isolierten Prozess gestartet werden. Jede Erweiterung hat ihre eigene Info.plist und einen über NSExtensionPrincipalClass definierten Einstiegspunkt. Das System verwaltet den Lebenszyklus von App Extensions — sie können nach Abschluss einer Aufgabe nicht im Hintergrund bleiben.
WidgetKit (iOS 14+) ist ein modernes Framework zum Erstellen von Widgets auf dem Startbildschirm. WidgetKit verwendet SwiftUI zur Beschreibung der Oberfläche und TimelineProvider zur Festlegung von Aktualisierungsplänen. Widgets gibt es in drei Größen: klein (2×2 Zellen), mittel (4×2) und groß (4×4). Das alte Today Widget basierend auf UICollectionViewController wird weiterhin unterstützt, aber Apple empfiehlt die Migration zu WidgetKit. App Extensions auf WidgetKit unterstützen keine Animationen, Tastatureingaben oder Gesten — es sind statische oder pseudo-animierte Elemente mit periodischen Aktualisierungen.
Share Extension ermöglicht das Senden von Inhalten aus jeder App in Ihre App über das System-Share-Blatt. Share Extension empfängt Daten über NSExtensionItem und verwendet SLComposeServiceViewController für die Benutzeroberfläche. Action Extension verarbeitet Inhalte direkt vor Ort — zum Beispiel übersetzt sie Text im Browser, ohne zu einer anderen App zu wechseln. Beide Typen müssen ihre Arbeit in einer begrenzten Zeit abschließen, sonst „tötet" das System die Erweiterung. Dies ist eine wichtige Einschränkung von App Extensions in einer mobilen App — Hintergrundaufgaben sind auf Erweiterungsebene nicht verfügbar.
Die Systemintegrationen auf iOS gehen weit über Widgets hinaus: CallKit, PushKit und SiriKit ermöglichen einer mobilen App die Arbeit auf Systemebene. Diese Frameworks erfordern spezielle Berechtigungen, bieten dem Benutzer aber ein nahtloses Erlebnis — Anrufe über CallKit sehen wie normale Telefonanrufe aus, und Siri verarbeitet Anfragen ohne Öffnen der App.
CallKit integriert Anrufe von Drittanbieter-Apps in den System-Anrufbildschirm, einschließlich des gesperrten Bildschirms. Der CXProvider registriert die App als VoIP-Dienst, und CXCallController verwaltet Anrufe. CallKit blockiert automatisch doppelte Anrufe und unterstützt Call Directory Extension zum Blockieren unerwünschter Nummern. Systemintegrationen in der mobilen Entwicklung mit CallKit sind für Sprachkommunikations-Apps kritisch — WhatsApp, Skype und Zoom verwenden es zur Anzeige eingehender Anrufe.
PushKit liefert Push-Benachrichtigungen direkt an die mobile App, ohne sie dem Benutzer anzuzeigen. PushKit weckt die App aus einem „beendeten" Zustand und übergibt Daten über den PKPushRegistryDelegate. Dies ist der primäre Mechanismus für VoIP-Apps: PushKit liefert Anrufinformationen, und CallKit zeigt sie an. PushKit hat eine höhere Zustellungspriorität als normale Push-Benachrichtigungen und erfordert keine Banneranzeige. App Extensions in mobilen Apps kombinieren oft PushKit mit CallKit für die Sprachkommunikation.
SiriKit ermöglicht die Verarbeitung von Anfragen über Siri und die Kurzbefehle-App. Intents Extension ist eine separate App Extension, die unterstützte Intents registriert und verarbeitet. SiriKit unterstützt über 20 Domänen: Anrufe, Nachrichten, Zahlungen, Notizen, Trainingseinheiten. Kurzbefehle ermöglichen dem Benutzer die Erstellung von Automatisierungen — zum Beispiel „Eine Nachricht in WhatsApp über Siri senden." Systemintegrationen mit SiriKit und Kurzbefehlen erhöhen das Engagement, da der Benutzer Aktionen ausführt, ohne die App zu öffnen.
BroadcastReceiver ist eine Android-Komponente, die auf System-Broadcast-Nachrichten reagiert. Im Gegensatz zu iOS App Extensions benötigt BroadcastReceiver keine separate Binärdatei — es reicht aus, den Empfänger im Manifest oder im Code über Context.registerReceiver zu registrieren. Systemintegrationen auf Android beginnen oft mit BroadcastReceiver: vom Starten eines Dienstes beim Gerätestart bis zur Reaktion auf Netzwerkverbindungen.
IntentFilter bindet BroadcastReceiver an ein bestimmtes Systemereignis. Typische Ereignisse: BOOT_COMPLETED (Gerätestart), CONNECTIVITY_ACTION (Netzwerkänderung), BATTERY_LOW (niedriger Akkustand), TIME_SET (Zeitänderung). Der Empfänger wird in AndroidManifest.xml oder über Context.registerReceiver für die dynamische Registrierung registriert. Dynamische Registrierung ist vorzuziehen — sie erfordert keine Manifest-Berechtigungen und funktioniert nur, während die App aktiv ist. App Extensions existieren auf Android nicht als Konzept, aber BroadcastReceiver übernimmt eine ähnliche Rolle — es erweitert die App-Fähigkeiten durch Systemintegrationen.
NotificationListenerService ist ein Dienst, der alle Systembenachrichtigungen empfängt. NotificationListenerService benötigt die Berechtigung BIND_NOTIFICATION_LISTENER_SERVICE und Zugriff über die Barrierefreiheitseinstellungen. AccessibilityService ist ein leistungsfähigeres Werkzeug für Systemintegrationen: Er kann Bildschirminhalte lesen, Klicks simulieren und Aktionen automatisieren. Beide Dienste erfordern eine explizite Aktivierung durch den Benutzer in den Einstellungen, was die Sicherheit erhöht. Systemintegrationen in mobilen Apps über AccessibilityService werden für Auto-Ausfüller, Bildschirmlesegeräte und Barrierefreiheitswerkzeuge verwendet.
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
WorkManager.getInstance(context)
.enqueueUniqueWork("post-boot", ...)
}
}
}
Das Beispiel registriert einen BroadcastReceiver für das Ereignis BOOT_COMPLETED. WorkManager wird für die verzögerte Aufgabenausführung nach dem Gerätestart verwendet — dies ist der Standardansatz für Android-Apps.
App Widget Provider auf Android ist das Gegenstück zu iOS App Extensions im Widget-Kontext: Es ist eine Komponente, die interaktive Inhalte auf dem Startbildschirm anzeigt. Im Gegensatz zu WidgetKit können Android-Widgets Benutzereingaben entgegennehmen — Klicks, Umschalter und Gesten. App Widget Provider wird im Manifest über eine XML-Beschreibung von Größe und Aktualisierungshäufigkeit registriert.
RemoteViews beschreibt die Widget-Oberfläche über ein XML-Layout und unterstützt nur eine begrenzte Menge an Views. RemoteViews erlaubt keine benutzerdefinierten Views — nur Standardkomponenten: TextView, ImageView, Button, ProgressBar. AppWidgetProvider ist die Basisklasse, die Widget-Updates, Aktivierung und Löschung behandelt. Die Methode onUpdate wird per Timer über updatePeriodMillis oder über WorkManager zur präzisen Steuerung aufgerufen. Systemintegrationen mit Widgets auf Android erfordern Vorsicht — zu häufige Aktualisierungen entladen den Akku.
Glance API ist eine Jetpack-Bibliothek zum Erstellen von Widgets mit Kotlin DSL anstelle von XML. Glance API wird zu RemoteViews kompiliert und unterstützt eine Compose-ähnliche Syntax: GlanceComposable, Column, Row, Text. Die Bibliothek löst das Problem komplexen XML-Codes und ermöglicht das Testen von Widgets über JUnit. Glance API unterstützt noch nicht alle RemoteViews-Funktionen — für komplexe interaktive Widgets ist der klassische Ansatz besser. App Extensions in der mobilen Entwicklung auf Android entwickeln sich in Richtung Glance API, was die Erstellung und Wartung von Widgets vereinfacht.
Content Provider ist eine Android-Komponente zum Teilen strukturierter Daten zwischen Apps über eine einheitliche ContentResolver-Schnittstelle. Im Gegensatz zu iOS App Extensions erstellt Content Provider keinen separaten Prozess — Daten werden synchron im Kontext der aufrufenden App angefordert. Content Provider ist die Grundlage von Systemintegrationen auf Android: Kontakte, Mediendateien, Kalender und Standard-Apps verwenden ihn zur Datenveröffentlichung.
FileProvider ist eine Unterklasse von ContentProvider für die sichere Dateiübertragung zwischen Apps. FileProvider generiert temporäre content://-URIs anstelle direkter file://-Pfade, die auf Android 7+ verboten sind. Zur Verwendung müssen Sie files-path oder external-files-path in der XML-Konfiguration angeben. App Extensions in der mobilen Entwicklung auf Android existieren nicht als separates Konzept, aber FileProvider übernimmt ihre Funktion — es erweitert die Datenfreigabefähigkeiten über eine einzelne App hinaus.
Auf iOS übernimmt File Provider Extension die Rolle der Dateifreigabe. File Provider Extension veröffentlicht die Dateien der App in der Dateien-App über NSFileProviderManager. Im Gegensatz zu FileProvider benötigt die iOS-Erweiterung eine separate Binärdatei und läuft in einem isolierten Prozess. File Provider Extension unterstützt NSFileProviderItem zur Dateibeschreibung und NSFileProviderEnumerator zur Ordner-Navigation. Systemintegrationen in mobilen Apps über File Provider Extension ermöglichen dem Benutzer die Verwaltung von App-Dateien aus der Dateien-App, ohne sie zu öffnen.
class MyFileProviderExtension: NSFileProviderExtension {
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
return MyFileProviderItem(identifier: identifier)
}
}
Das Beispiel zeigt eine minimale Implementierung von File Provider Extension in Swift. Die Methode item(for:) gibt ein NSFileProviderItem-Objekt anhand der Kennung zurück — das System ruft sie beim Anzeigen von Dateien in der Dateien-App auf.
Häufig gestellte Fragen
App Extensions sind separate Binärdateien, die die App-Funktionalität über ihren Prozess hinaus erweitern: Today Widget, Share Extension, Action Extension, Keyboard Extension und andere Typen, die in einer isolierten Umgebung ausgeführt werden.
CallKit integriert VoIP-Anrufe in die Systemanrufschnittstelle mit Anzeige auf dem gesperrten Bildschirm. PushKit liefert Hintergrund-Push-Benachrichtigungen ohne Anzeige für den Benutzer — es weckt die App zur Verarbeitung von Daten wie Informationen über einen eingehenden Anruf.
BroadcastReceiver ist eine Android-Komponente, die auf System-Broadcast-Nachrichten reagiert: Gerätestart (BOOT_COMPLETED), Netzwerkverbindung (CONNECTIVITY_ACTION), Flugmodus-Änderungen und andere OS-Ereignisse.
Verwenden Sie AppWidgetProvider mit RemoteViews zur Erstellung der Widget-Oberfläche oder Glance API (Jetpack) für den Kotlin-DSL-Ansatz. Das Widget wird im Manifest über eine XML-Beschreibung mit Angabe von Größe und Aktualisierungshäufigkeit registriert.
Content Provider ist eine Android-Komponente zum Teilen von Daten zwischen Apps über ContentResolver. Er wird für den Zugriff auf Kontakte, Mediendateien und alle strukturierten Daten aus anderen Apps verwendet.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.