Photo Editing Extension ist ein iOS-Mechanismus, der Drittanbieter-Apps ermöglicht, Bearbeitungswerkzeuge direkt in die systemeigene Fotos-App einzufügen. Im Gegensatz zu vollwertigen Editoren lädt die Erweiterung das Foto nicht in eine separate App — der Benutzer wendet Filter an, korrigiert Farben oder fügt Effekte hinzu, ohne die Standardschnittstelle zu verlassen. Laut Apple Developer Documentation (2025) bietet PhotoKit über 40 APIs für die Arbeit mit Fotoressourcen, einschließlich PHAdjustmentData und PHContentEditingController.
Wichtige Punkte
Photo Editing Extension ist eine Art App-Erweiterung in iOS, die Bildbearbeitungswerkzeuge in die Standardschnittstelle der Fotos-App einbettet. Der Benutzer öffnet ein Foto, tippt auf die Bearbeiten-Schaltfläche und wählt die gewünschte Erweiterung aus der Liste der installierten aus. Nach der Bearbeitung wird das Ergebnis zurück in die Bibliothek gespeichert, und die Originaldatei bleibt für eine Rückgängigmachung verfügbar.
Diese Architektur löst ein zentrales Problem der Benutzererfahrung: Es ist kein Wechsel zwischen Apps, kein Exportieren und Importieren von Bildern und keine Versionsverfolgung erforderlich. Laut WWDC 2025 laufen alle Erweiterungen in einem isolierten Prozess mit eigener Sandbox und begrenzter Ausführungszeit — bis zu 30 Sekunden pro Bearbeitungsvorgang.
Die Erweiterung hat keinen Zugriff auf beliebige Dateien im Gerätespeicher — nur auf das Foto, das der Benutzer explizit über die Auswahloberfläche übergeben hat. Dies gewährleistet die Sicherheit der Benutzerdaten bei Verwendung von Drittanbieter-Tools.
PhotoKit ist ein Apple-Framework für die Arbeit mit der Medienbibliothek des Geräts, eingeführt in iOS 8. Es bietet programmatischen Zugriff auf Fotos-Ressourcen, einschließlich Bilder, Videos, Alben und Metadaten. Für Bearbeitungserweiterungen dient PhotoKit als Zwischenschicht zwischen Speicher und Änderungsoberfläche.
PHAsset repräsentiert ein einzelnes Medienobjekt in der Bibliothek — ein Foto oder Video. Über PHAsset können Metadaten abgerufen werden: Aufnahmedatum, Dateityp, Standort auf der Karte und Kameraausrichtung. PHAssetResource bietet Zugriff auf die zugrunde liegenden Ressourcen — zum Beispiel auf die originale Fotodatei im RAW- oder HEIC-Format.
Für eine Bearbeitungserweiterung ist PHContentEditingInput von entscheidender Bedeutung — ein Objekt, das die vollständige Bild- (oder Video-) Datei enthält, die zum Lesen und Verarbeiten verfügbar ist. Die Erweiterung erhält dieses Objekt bei der Aktivierung und verwendet es als Quellmaterial.
PHImageManager verwaltet das Laden und Caching von Bildern. Für eine Bearbeitungserweiterung wird es nicht direkt verwendet — die Erweiterung erhält die vollständige Datei über PHContentEditingInput. PHImageRequestOptions ermöglicht jedoch die Konfiguration von Anforderungsparametern: Größe, Liefertyp (synchron oder asynchron) und Ergebnisformat.
Laut Apple speichert PHImageManager automatisch Bildminiaturen im RAM zwischen, was die wiederholte Anzeige von Vorschaubildern beschleunigt. Für Bearbeitungserweiterungen wird die Verwendung von PHImageRequestOptionsDeliveryModeHighQualityFormat empfohlen, um die beste Bildqualität zu erzielen.
let options = PHImageRequestOptions()
options.deliveryMode = .highQualityFormat
options.isSynchronous = true
PHImageManager.default().requestImage(
for: asset,
targetSize: .init(width: 1024, height: 1024),
contentMode: .aspectFill,
options: options
) { image, _ in
// use image for display
}
Jede Photo Editing Extension implementiert das Protokoll PHContentEditingController — das zentrale Steuerelement der Erweiterung. Das Protokoll definiert Methoden zum Anzeigen der Oberfläche, zum Empfangen von Eingabedaten und zum Speichern des Ergebnisses.
beginContentEditing(with:) wird beim Start der Bearbeitungssitzung aufgerufen. Die Erweiterung erhält PHContentEditingInput und muss die Oberfläche mit dem Originalbild anzeigen. finishContentEditing(completionHandler:) schließt die Bearbeitung ab — die Erweiterung gibt PHContentEditingOutput mit der modifizierten Datei und AdjustmentData zurück. cancelContentEditing() bricht Änderungen ohne Speichern ab.
Eine wichtige Nuance: Zum Zeitpunkt des beginContentEditing-Aufrufs erhält die Erweiterung nur Zugriff auf eine Version des Fotos — diejenige, die vom Benutzer angefordert wurde. Sie kann nicht auf ein anderes Foto oder Album zugreifen. Dies ist eine Sandbox-Einschränkung, die Apple aus Sicherheitsgründen eingeführt hat.
class PhotoEditingViewController: UIViewController {
override func beginContentEditing(
with input: PHContentEditingInput
) {
guard let url = input.fullSizeImageURL else { return }
let image = CIImage(contentsOf: url)
displayImage.image = UIImage(ciImage: image)
}
}
PHContentEditingController trennt die Bearbeitungsoberfläche von der Speicherlogik. Der Haupt-iOS-Prozess ruft beginContentEditing auf, die Erweiterung zeigt ihre Benutzeroberfläche, der Benutzer nimmt Änderungen vor, dann erzeugt finishContentEditing eine neue Datei. Apple empfiehlt, alle ressourcenintensiven Verarbeitungen — CIFilter-Filter, Core-Image-Manipulationen — in einem Hintergrundthread und nicht im Hauptthread durchzuführen, um die Oberfläche nicht zu blockieren.
PHAdjustmentData ist der Schlüsselmechanismus, der nicht-destruktive Bearbeitung in Photo Editing Extension ermöglicht. Es ist ein Objekt, das Informationen über die vorgenommenen Änderungen in einem beliebigen Format enthält. Die Erweiterung serialisiert Filterparameter, Masken und Einstellungen in AdjustmentData und speichert sie zusammen mit dem modifizierten Bild.
Beim erneuten Öffnen des Fotos liest die Erweiterung AdjustmentData, stellt den vorherigen Oberflächenzustand wieder her und ermöglicht dem Benutzer, die Bearbeitung an derselben Stelle fortzusetzen. Wenn die Erweiterung nicht installiert ist, wird das Foto in der zuletzt gespeicherten Version angezeigt, während das Original separat gespeichert wird.
Laut Apple-Dokumentation speichert PHAdjustmentData formatIdentifier und formatVersion — Zeichenfolgen zur Identifizierung des Datenformats. Beim Aktualisieren der Erweiterung sollten Sie die Version überprüfen und alte Formate korrekt behandeln.
let adjustmentData = PHAdjustmentData(
formatIdentifier: "com.example.photoediting",
formatVersion: "1.0",
data: NSKeyedArchiver.archivedData(
withRootObject: params,
requiringSecureCoding: true
)
)
output.adjustmentData = adjustmentData
Zum Zeitpunkt von finishContentEditing schreibt die Erweiterung AdjustmentData in das PHContentEditingOutput-Objekt zusammen mit der modifizierten Bilddatei. Das System speichert dann beide Komponenten: die Version zur Anzeige und die Metadaten zur Wiederherstellung der Bearbeitungssitzung.
Photo Editing Extension erscheint automatisch im Menü der Fotos-App, nachdem die App installiert wurde, die sie enthält. Der Benutzer öffnet ein Foto, wählt Bearbeiten aus, und in der unteren Werkzeugleiste werden alle installierten Bearbeitungserweiterungen angezeigt — sowohl systemeigene als auch von Drittanbietern.
Die Erweiterung wird über die Info.plist der Haupt-App mit dem Schlüssel NSExtensionActivationRule registriert, der angibt, welche Inhaltstypen die Erweiterung aktivieren. Für einen Fotoeditor erfordert ActivationRule normalerweise image — die Erweiterung wird nicht für Videos oder Live Photos angezeigt.
Apple empfiehlt, spezifische Aktivierungstypen anzugeben, um das Bearbeitungsmenü nicht zu überlasten. Wenn die Erweiterung nur JPEG und HEIC unterstützt, lohnt es sich, die Aktivierung auf diese Formate zu beschränken.
<!-- Info.plist -->
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.photo-editing</string>
<key>NSExtensionActivationRule</key>
<string>SUBQUERY (extensionItems,
@count <= 1)</string>
</dict>
Nach Auswahl einer Erweiterung erstellt iOS einen separaten Prozess mit einem benutzerdefinierten UIViewController, der über der Fotos-Oberfläche angezeigt wird. Der Benutzer sieht sein Foto, die Werkzeuge der Erweiterung sowie die Schaltflächen Abbrechen/Fertig. Die Erweiterung kann die Navigation außerhalb ihres eigenen Controllers nicht ändern oder auf andere Teile des Systems zugreifen.
Laut Apples Human Interface Guidelines sollte die Oberfläche der Erweiterung minimal und funktional sein — ohne Werbung, fremde Links oder unnötige Navigationselemente. Es wird empfohlen, UIScrollView zum Anzeigen der Werkzeugpalette zu verwenden, um den Bildschirm nicht zu überladen.
Häufig gestellte Fragen
Die Erweiterung erhält PHContentEditingInput mit der URL der vollständigen Bilddatei über die Methode beginContentEditing(with:). Der Zugriff wird nur auf ein ausgewähltes Foto gewährt — ohne Rechte auf andere Bibliotheksressourcen.
Nein, das Original wird niemals verändert. Die Erweiterung erstellt eine neue Version über PHContentEditingOutput, und AdjustmentData speichert die Änderungsparameter für die Möglichkeit, zum ursprünglichen Zustand zurückzukehren.
Die Erweiterung funktioniert mit allen Formaten, die PhotoKit unterstützt: JPEG, HEIC, RAW, PNG, TIFF und Live Photos. Einschränkungen werden über NSExtensionActivationRule in der Info.plist der Erweiterung festgelegt.
iOS weist bis zu 30 Sekunden für den finishContentEditing-Vorgang zu. Bei Überschreitung des Limits wird die Erweiterung zwangsweise beendet und die Änderungen werden nicht gespeichert. Die Hintergrundverarbeitung mit CIFilter verlängert diese Zeit nicht.
Ja, Core Image (CIFilter) und Metal (für benutzerdefinierte Shader) werden vollständig unterstützt. Apple empfiehlt, schwere Berechnungen über Grand Central Dispatch auf Hintergrundthreads auszulagern.
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.
Lesen Sie auch