Photo Editing Extension — egy iOS-mechanizmus, amely lehetővé teszi harmadik fél alkalmazásai számára, hogy szerkesztőeszközöket adjanak hozzá közvetlenül a rendszer Fotók alkalmazásához. A teljes értékű szerkesztőkkel ellentétben a bővítmény nem tölti be a képet egy külön alkalmazásba — a felhasználó szűrőket alkalmaz, színeket korrigál vagy effekteket ad hozzá anélkül, hogy elhagyná a szabványos felületet. Az Apple Developer Documentation (2025) szerint a PhotoKit több mint 40 API-t biztosít a fénykép-erőforrásokkal való munkához, beleértve a PHAdjustmentData és PHContentEditingController elemeket.
Főbb pontok
Photo Editing Extension — egy app extension típus iOS-ben, amely képfeldolgozó eszközöket vezet be a Fotók alkalmazás szabványos felületébe. A felhasználó megnyit egy fényképet, megnyomja a „Szerkesztés” gombot, és kiválasztja a kívánt bővítményt a telepítettek listájából. Szerkesztés után az eredmény visszakerül a könyvtárba, az eredeti fájl pedig elérhető marad a visszaállításhoz.
Ez az architektúra megoldja a felhasználói élmény kulcsproblémáját: nem kell alkalmazások között váltani, képeket exportálni és importálni, vagy verziókat követni. A WWDC 2025 szerint minden bővítmény elkülönített folyamatban működik saját homokozóval és korlátozott végrehajtási idővel — legfeljebb 30 másodperc szerkesztési műveletenként.
A bővítmény nem fér hozzá tetszőleges fájlokhoz a készülék memóriájában — csak ahhoz a fényképhez, amelyet a felhasználó kifejezetten továbbított a kiválasztási felületen keresztül. Ez biztosítja a felhasználói adatok biztonságát harmadik fél eszközeinek használatakor.
PhotoKit — az Apple keretrendszere a készülék médiatárával való munkához, amely az iOS 8-ban jelent meg. Programozott hozzáférést biztosít a Fotók erőforrásaihoz, beleértve a fényképeket, videókat, albumokat és metaadatokat. A szerkesztő bővítmények számára a PhotoKit közbenső rétegként szolgál a tároló és a módosítási felület között.
PHAsset egy egyedi médiaobjektumot képvisel a könyvtárban — egy fényképet vagy videót. A PHAsset segítségével metaadatok nyerhetők: a felvétel dátuma, fájltípus, helyszín a térképen és kamera orientáció. A PHAssetResource hozzáférést biztosít az alapvető erőforrásokhoz — például az eredeti fényképfájlhoz RAW vagy HEIC formátumban.
A szerkesztő bővítmény számára kritikus fontosságú a PHContentEditingInput — egy objektum, amely a teljes képfájlt (vagy videofájlt) tartalmazza, olvasásra és feldolgozásra elérhetően. A bővítmény ezt az objektumot az aktiválás pillanatában kapja meg, és forrásanyagként használja.
PHImageManager kezeli a képek betöltését és gyorsítótárazását. A szerkesztő bővítmény számára nem közvetlenül használatos — a bővítmény a teljes fájlt a PHContentEditingInput segítségével kapja meg. A PHImageRequestOptions azonban lehetővé teszi a kérés paramétereinek konfigurálását: méret, szállítási típus (szinkron vagy aszinkron) és eredményformátum.
Az Apple szerint a PHImageManager automatikusan gyorsítótárazza a képek miniatűrjeit a RAM-ban, ami felgyorsítja az előnézetek újbóli megjelenítését. A szerkesztő bővítmény számára ajánlott a PHImageRequestOptionsDeliveryModeHighQualityFormat használata a legjobb képminőség elérése érdekében.
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
// használja a képet megjelenítéshez
}
Minden Photo Editing Extension megvalósítja a PHContentEditingController protokollt — a bővítmény központi vezérlő elemét. A protokoll meghatározza a felület megjelenítésének, a bemeneti adatok lekérésének és az eredmény mentésének metódusait.
beginContentEditing(with:) a szerkesztési munkamenet indításakor hívódik meg. A bővítmény megkapja a PHContentEditingInput-ot, és meg kell jelenítenie a felületet az eredeti képpel. finishContentEditing(completionHandler:) befejezi a szerkesztést — a bővítmény visszaadja a PHContentEditingOutput-ot a módosított fájllal és AdjustmentData-val. cancelContentEditing() mentés nélkül megszakítja a változtatásokat.
Fontos árnyalat: a beginContentEditing meghívásának pillanatában a bővítmény csak a fénykép egy verziójához fér hozzá — ahhoz, amelyet a felhasználó kért. Nem lehet hozzáférni másik fényképhez vagy albumhoz. Ez az Apple által a biztonság érdekében bevezetett homokozó-korlátozás.
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 elválasztja a szerkesztési felületet a mentési logikától. A fő iOS-folyamat meghívja a beginContentEditing-et, a bővítmény megjeleníti a saját UI-ját, a felhasználó változtatásokat végez, majd a finishContentEditing új fájlt generál. Az Apple azt ajánlja, hogy az összes erőforrás-igényes feldolgozást — CIFilter szűrőket, Core Image manipulációkat — háttérszálon végezzék, ne a főszálon, hogy ne blokkolják a felületet.
PHAdjustmentData — a kulcsmechanizmus, amely lehetővé teszi a nem romboló szerkesztést a Photo Editing Extension-ben. Ez egy objektum, amely az alkalmazott változtatásokról tartalmaz információkat tetszőleges formátumban. A bővítmény szerializálja a szűrők paramétereit, maszkokat és beállításokat az AdjustmentData-ba, és elmenti azokat a módosított képpel együtt.
A fénykép újbóli megnyitásakor a bővítmény beolvassa az AdjustmentData-t, visszaállítja a felület előző állapotát, és lehetővé teszi a felhasználónak, hogy ugyanott folytassa a szerkesztést. Ha a bővítmény nincs telepítve — a fénykép az utolsó mentett verzióban jelenik meg, az eredeti pedig külön tárolódik.
Az Apple Documentation szerint a PHAdjustmentData tárolja a formatIdentifier és formatVersion értékeket — karakterláncokat az adatformátum azonosításához. A bővítmény frissítésekor ellenőrizni kell a verziót és helyesen kell kezelni a régi formátumokat.
let adjustmentData = PHAdjustmentData(
formatIdentifier: "com.example.photoediting",
formatVersion: "1.0",
data: NSKeyedArchiver.archivedData(
withRootObject: params,
requiringSecureCoding: true
)
)
output.adjustmentData = adjustmentData
A finishContentEditing pillanatában a bővítmény az AdjustmentData-t a PHContentEditingOutput objektumba írja a módosított képfájllal együtt. A rendszer ezután mindkét komponenst elmenti: a verziót a megjelenítéshez és a metaadatokat a szerkesztési munkamenet visszaállításához.
A Photo Editing Extension automatikusan megjelenik a Fotók alkalmazás menüjében a tartalmazó alkalmazás telepítése után. A felhasználó megnyit egy fényképet, kiválasztja a „Szerkesztés” lehetőséget, és az alsó eszközsorban megjelennek az összes telepített szerkesztő bővítmény — mind a rendszer-, mind a harmadik fél által készítettek.
A bővítmény a fő alkalmazás Info.plist fájlján keresztül regisztrálódik a NSExtensionActivationRule kulccsal, amely meghatározza, hogy milyen tartalomtípusok aktiválják a bővítményt. Egy fényképszerkesztő esetében az ActivationRule általában image-t igényel — a bővítmény nem jelenik meg videók vagy élő fényképek esetén.
Az Apple azt ajánlja, hogy konkrét aktiválási típusokat adjon meg a szerkesztési menü túlterhelésének elkerülése érdekében. Ha a bővítmény csak JPEG és HEIC formátumokat támogat, érdemes az aktiválást ezekre a formátumokra korlátozni.
<!-- 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>
A bővítmény kiválasztása után az iOS egy külön folyamatot hoz létre egy egyéni UIViewController-rel, amely a Fotók felület felett jelenik meg. A felhasználó látja a fényképét, a bővítmény eszközeit, valamint a „Mégse” / „Kész” gombokat. A bővítmény nem változtathatja meg a navigációt a vezérlőjén kívül, és nem férhet hozzá a rendszer más részeihez.
Az Apple Human Interface Guidelines szerint a bővítmény felületének minimálisnak és funkcionálisnak kell lennie — reklámok, külső linkek és felesleges navigációs elemek nélkül. Ajánlott a UIScrollView használata az eszközpaletta megjelenítéséhez, hogy ne zsúfolja össze a képernyőt.
Gyakran Ismételt Kérdések
A bővítmény PHContentEditingInput-ot kap a teljes képfájl URL-jével a beginContentEditing(with:) metóduson keresztül. Hozzáférés csak egy kiválasztott fényképhez biztosított — jogosultság nélkül a könyvtár egyéb erőforrásaihoz.
Nem, az eredeti soha nem változik meg. A bővítmény egy új verziót hoz létre a PHContentEditingOutput segítségével, az AdjustmentData pedig tárolja a változtatások paramétereit az eredeti állapot visszaállításának lehetőségéhez.
A bővítmény minden formátummal működik, amelyet a PhotoKit támogat: JPEG, HEIC, RAW, PNG, TIFF és Live Photos. A korlátozásokat a bővítmény Info.plist fájljában lévő NSExtensionActivationRule segítségével állítják be.
Az iOS legfeljebb 30 másodpercet biztosít a finishContentEditing művelet végrehajtására. A határ túllépése esetén a bővítmény kényszerűen befejeződik, és a változtatások nem kerülnek mentésre. A CIFilter-rel végzett háttérfeldolgozás nem hosszabbítja meg ezt az időt.
Igen, a Core Image (CIFilter) és a Metal (egyéni shaderekhez) teljes mértékben támogatott. Az Apple azt ajánlja, hogy a nehéz számításokat a Grand Central Dispatch segítségével helyezze át háttérszálakra.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is