Photo Editing Extension — är en iOS-mekanism som gör det möjligt för tredjepartsappar att lägga till redigeringsverktyg direkt i systemappen Foton. Till skillnad från fullfjädrade redigerare laddar inte tillägget upp bilden i en separat app — användaren tillämpar filter, korrigerar färger eller lägger till effekter utan att lämna standardgränssnittet. Enligt Apple Developer Documentation (2025) tillhandahåller PhotoKit över 40 API:er för att arbeta med fotoresurser, inklusive PHAdjustmentData och PHContentEditingController.
Huvudpunkter
Photo Editing Extension — är en typ av apptillägg i iOS som introducerar bildbehandlingsverktyg i standardgränssnittet för appen Foton. Användaren öppnar en bild, trycker på knappen ”Redigera” och väljer önskat tillägg från listan över installerade. Efter redigering sparas resultatet tillbaka i biblioteket och originalfilen förblir tillgänglig för återställning.
Denna arkitektur löser ett nyckelproblem med användarupplevelsen: man behöver inte växla mellan appar, exportera och importera bilder eller hålla reda på versioner. Enligt WWDC 2025 arbetar alla tillägg i en isolerad process med egen sandlåda och begränsad exekveringstid — upp till 30 sekunder per redigeringsoperation.
Tillägget har inte åtkomst till godtyckliga filer i enhetens minne — endast till den bild som användaren uttryckligen överfört via urvalsgränssnittet. Detta garanterar säkerheten för användardata vid användning av tredjepartsverktyg.
PhotoKit — är Apples ramverk för att arbeta med enhetens mediebibliotek, som introducerades i iOS 8. Det ger programmeringsåtkomst till Fotons resurser, inklusive bilder, videor, album och metadata. För redigeringstillägg fungerar PhotoKit som ett mellanlager mellan lagring och modifieringsgränssnitt.
PHAsset representerar ett enskilt mediaobjekt i biblioteket — en bild eller video. Via PHAsset kan man få metadata: inspelningsdatum, filtyp, plats på kartan och kameraorientering. PHAssetResource ger tillgång till grundläggande resurser — till exempel originalfilen i RAW- eller HEIC-format.
För redigeringstillägget är PHContentEditingInput kritisk — ett objekt som innehåller den kompletta bildfilen (eller videon) tillgänglig för läsning och bearbetning. Tillägget får detta objekt vid aktiveringstillfället och använder det som källmaterial.
PHImageManager hanterar inläsning och cachning av bilder. För redigeringstillägget används det inte direkt — tillägget får den kompletta filen via PHContentEditingInput. PHImageRequestOptions gör det dock möjligt att konfigurera begäransparametrar: storlek, leveranstyp (synkron eller asynkron) och resultatformat.
Enligt Apple cachar PHImageManager automatiskt bildminiatyrer i RAM-minnet, vilket påskyndar återvisning av förhandsgranskningar. För redigeringstillägget rekommenderas att använda PHImageRequestOptionsDeliveryModeHighQualityFormat för att få bästa bildkvalitet.
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
// använd bild för visning
}
Varje Photo Editing Extension implementerar protokollet PHContentEditingController — tilläggets centrala kontroll-element. Protokollet definierar metoder för att visa gränssnittet, hämta indata och spara resultatet.
beginContentEditing(with:) anropas vid start av en redigeringssession. Tillägget får PHContentEditingInput och måste visa gränssnittet med originalbilden. finishContentEditing(completionHandler:) avslutar redigeringen — tillägget returnerar PHContentEditingOutput med den modifierade filen och AdjustmentData. cancelContentEditing() avbryter ändringarna utan att spara.
En viktig nyans: vid anrop av beginContentEditing har tillägget endast åtkomst till en version av bilden — den som användaren begärt. Man kan inte komma åt en annan bild eller ett album. Detta är en sandlådebegränsning införd av Apple för säkerhet.
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 separerar redigeringsgränssnittet från sparlogiken. Huvudprocessen i iOS anropar beginContentEditing, tillägget visar sitt UI, användaren gör ändringar, sedan genererar finishContentEditing en ny fil. Apple rekommenderar att all resurskrävande bearbetning — CIFilter-filter, Core Image-manipulationer — utförs i bakgrundstrådar, inte i huvudtråden, för att inte blockera gränssnittet.
PHAdjustmentData — nyckelmekanismen som möjliggör icke-förstörande redigering i Photo Editing Extension. Det är ett objekt som innehåller information om tillämpade ändringar i godtyckligt format. Tillägget serialiserar filterparametrar, masker och inställningar i AdjustmentData och sparar dem tillsammans med den modifierade bilden.
När bilden öppnas igen läser tillägget AdjustmentData, återställer föregående gränssnittstillstånd och låter användaren fortsätta redigeringen från samma ställe. Om tillägget inte är installerat — visas bilden i den senast sparade versionen och originalfilen lagras separat.
Enligt Apple Documentation lagrar PHAdjustmentData formatIdentifier och formatVersion — strängar för identifiering av dataformatet. Vid uppdatering av tillägget bör versionen kontrolleras och gamla format hanteras korrekt.
let adjustmentData = PHAdjustmentData(
formatIdentifier: "com.example.photoediting",
formatVersion: "1.0",
data: NSKeyedArchiver.archivedData(
withRootObject: params,
requiringSecureCoding: true
)
)
output.adjustmentData = adjustmentData
Vid finishContentEditing skriver tillägget AdjustmentData till PHContentEditingOutput-objektet tillsammans med den modifierade bildfilen. Systemet sparar sedan båda komponenterna: versionen för visning och metadata för återställning av redigeringssessionen.
Photo Editing Extension visas automatiskt i menyn för appen Foton efter installation av appen som innehåller det. Användaren öppnar en bild, väljer ”Redigera” och i den nedre verktygsraden visas alla installerade redigeringstillägg — både systemets och tredjeparts.
Tillägget registreras via huvudappens Info.plist med nyckeln NSExtensionActivationRule, som anger vilka innehållstyper som aktiverar tillägget. För en bildredigerare kräver ActivationRule vanligtvis image — tillägget visas inte för videor eller livebilder.
Apple rekommenderar att specificera konkreta aktiveringstyper för att inte överbelasta redigeringsmenyn. Om tillägget endast stöder JPEG och HEIC är det värt att begränsa aktiveringen till dessa format.
<!-- 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>
Efter val av tillägg skapar iOS en separat process med en anpassad UIViewController som visas ovanför Fotons gränssnitt. Användaren ser sin bild, tilläggets verktyg och knapparna ”Avbryt” / ”Klar”. Tillägget kan inte ändra navigeringen utanför sin kontroller eller få åtkomst till andra delar av systemet.
Enligt Apples Human Interface Guidelines bör tilläggets gränssnitt vara minimalt och funktionellt — utan reklam, externa länkar och onödiga navigeringselement. Det rekommenderas att använda UIScrollView för att visa verktygspaletten för att inte belasta skärmen.
Vanliga frågor
Tillägget får PHContentEditingInput med URL:en till den fullständiga bildfilen via metoden beginContentEditing(with:). Åtkomst ges endast till en vald bild — utan rättigheter till andra resurser i biblioteket.
Nej, originalet ändras aldrig. Tillägget skapar en ny version via PHContentEditingOutput och AdjustmentData lagrar ändringsparametrarna för möjlighet att återgå till ursprungligt tillstånd.
Tillägget fungerar med alla format som PhotoKit stöder: JPEG, HEIC, RAW, PNG, TIFF och Live Photos. Begränsningar ställs in via NSExtensionActivationRule i tilläggets Info.plist.
iOS tilldelar upp till 30 sekunder för att utföra finishContentEditing-operationen. Vid överskridande av gränsen avslutas tillägget tvångsmässigt och ändringarna sparas inte. Bakgrundsbearbetning med CIFilter förlänger inte denna tid.
Ja, Core Image (CIFilter) och Metal (för anpassade shaders) stöds fullt ut. Apple rekommenderar att flytta tunga beräkningar till bakgrundstrådar via Grand Central Dispatch.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också