Photo Editing Extension, üçüncü taraf uygulamaların sistem Fotoğraflar uygulamasına doğrudan düzenleme araçları eklemesine olanak tanıyan bir iOS mekanizmasıdır. Tam özellikli düzenleyicilerin aksine, uzantı fotoğrafı ayrı bir uygulamaya yüklemez — kullanıcı standart arayüzden çıkmadan filtreler uygular, renkleri ayarlar veya efektler ekler. Apple Developer Documentation (2025)'e göre PhotoKit, PHAdjustmentData ve PHContentEditingController dahil olmak üzere fotoğraf kaynaklarıyla çalışmak için 40'tan fazla API sağlar.
Önemli Noktalar
Photo Editing Extension, Fotoğraflar uygulamasının standart arayüzüne görüntü işleme araçları gömen bir iOS uygulama uzantısı türüdür. Kullanıcı bir fotoğraf açar, Düzenle düğmesine basar ve yüklü uzantılar listesinden istediği uzantıyı seçer. Düzenlemeden sonra sonuç kitaplığa geri kaydedilir ve orijinal dosya geri almak için kullanılabilir durumda kalır.
Bu mimari, kullanıcı deneyiminin önemli bir sorununu çözer: uygulamalar arasında geçiş yapmaya, görselleri dışa ve içe aktarmaya veya sürümleri takip etmeye gerek yoktur. WWDC 2025'e göre, tüm uzantılar kendi sanal alanları ve sınırlı yürütme süresiyle — düzenleme işlemi başına 30 saniyeye kadar — izole bir süreçte çalışır.
Uzantının cihaz belleğindeki rastgele dosyalara erişimi yoktur — yalnızca kullanıcının seçim arayüzü aracılığıyla açıkça ilettiği fotoğrafa erişebilir. Bu, üçüncü taraf araçları kullanırken kullanıcı verilerinin güvenliğini sağlar.
PhotoKit, iOS 8'de tanıtılan cihaz medya kitaplığıyla çalışmak için bir Apple framework'üdür. Görseller, videolar, albümler ve meta veriler dahil olmak üzere Fotoğraflar kaynaklarına programlı erişim sağlar. Düzenleme uzantıları için PhotoKit, depolama ile değişiklik arayüzü arasında bir ara katman görevi görür.
PHAsset, kitaplıktaki tek bir medya nesnesini temsil eder — bir fotoğraf veya video. PHAsset aracılığıyla meta veriler alınabilir: çekim tarihi, dosya türü, haritadaki konum ve kamera yönü. PHAssetResource, temel kaynaklara erişim sağlar — örneğin, RAW veya HEIC formatındaki orijinal fotoğraf dosyasına.
Bir düzenleme uzantısı için PHContentEditingInput hayati öneme sahiptir — okuma ve işleme için kullanılabilir tam görüntü (veya video) dosyasını içeren bir nesne. Uzantı, etkinleştirme sırasında bu nesneyi alır ve kaynak malzeme olarak kullanır.
PHImageManager, görüntü yükleme ve önbellekleme işlemlerini yönetir. Bir düzenleme uzantısı için doğrudan kullanılmaz — uzantı tam dosyayı PHContentEditingInput aracılığıyla alır. Bununla birlikte, PHImageRequestOptions, istek parametrelerini (boyut, teslimat türü (senkron veya asenkron) ve sonuç formatı) yapılandırmanıza olanak tanır.
Apple'a göre PHImageManager, görüntü küçük resimlerini RAM'de otomatik olarak önbelleğe alır ve bu da tekrarlanan önizleme görüntülemesini hızlandırır. Düzenleme uzantıları için en iyi görüntü kalitesini elde etmek amacıyla PHImageRequestOptionsDeliveryModeHighQualityFormat kullanılması önerilir.
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
}
Her Photo Editing Extension, PHContentEditingController protokolünü uygular — uzantının merkezi kontrol öğesi. Protokol, arayüzü görüntülemek, giriş verilerini almak ve sonucu kaydetmek için yöntemler tanımlar.
beginContentEditing(with:) düzenleme oturumu başladığında çağrılır. Uzantı PHContentEditingInput alır ve orijinal görselle birlikte arayüzü görüntülemelidir. finishContentEditing(completionHandler:) düzenlemeyi tamamlar — uzantı, değiştirilen dosya ve AdjustmentData ile birlikte PHContentEditingOutput döndürür. cancelContentEditing() değişiklikleri kaydetmeden iptal eder.
Önemli bir nüans: beginContentEditing çağrısı anında uzantı, fotoğrafın yalnızca bir sürümüne — kullanıcının talep ettiği sürüme — erişim sağlar. Başka bir fotoğrafa veya albüme erişemez. Bu, Apple tarafından güvenlik amacıyla getirilmiş bir sanal alan kısıtlamasıdır.
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, düzenleme arayüzünü kaydetme mantığından ayırır. Ana iOS süreci beginContentEditing'i çağırır, uzantı kullanıcı arayüzünü gösterir, kullanıcı değişiklikleri yapar, ardından finishContentEditing yeni bir dosya oluşturur. Apple, arayüzü bloke etmemek için tüm kaynak yoğun işlemlerin (CIFilter filtreleri, Core Image manipülasyonları) ana iş parçacığı yerine arka plan iş parçacığında gerçekleştirilmesini önerir.
PHAdjustmentData, Photo Editing Extension'da tahribatsız düzenlemeyi sağlayan temel mekanizmadır. Keyfi bir formatta uygulanan değişiklikler hakkında bilgi içeren bir nesnedir. Uzantı, filtre parametrelerini, maskeleri ve ayarları AdjustmentData'ya seri hale getirir ve değiştirilen görselle birlikte kaydeder.
Fotoğraf yeniden açıldığında, uzantı AdjustmentData'yı okur, önceki arayüz durumunu geri yükler ve kullanıcının aynı noktadan düzenlemeye devam etmesine olanak tanır. Uzantı yüklü değilse, fotoğraf son kaydedilen sürümde görüntülenir ve orijinal ayrı olarak saklanır.
Apple Dokümantasyonuna göre, PHAdjustmentData formatIdentifier ve formatVersion'ı (veri formatını tanımlamak için dizeler) saklar. Uzantı güncellenirken sürümü kontrol etmeli ve eski formatları doğru şekilde işlemelisiniz.
let adjustmentData = PHAdjustmentData(
formatIdentifier: "com.example.photoediting",
formatVersion: "1.0",
data: NSKeyedArchiver.archivedData(
withRootObject: params,
requiringSecureCoding: true
)
)
output.adjustmentData = adjustmentData
finishContentEditing anında uzantı, değiştirilen görsel dosyasıyla birlikte PHContentEditingOutput nesnesine AdjustmentData yazar. Sistem daha sonra her iki bileşeni de kaydeder: görüntüleme için sürüm ve düzenleme oturumunu geri yüklemek için meta veriler.
Photo Editing Extension, onu içeren uygulama yüklendikten sonra Fotoğraflar uygulaması menüsünde otomatik olarak görünür. Kullanıcı bir fotoğraf açar, Düzenle'yi seçer ve araçların alt satırında yüklü tüm düzenleme uzantıları — hem sistem hem de üçüncü taraf — görüntülenir.
Uzantı, ana uygulamanın Info.plist dosyası aracılığıyla, hangi içerik türlerinin uzantıyı etkinleştireceğini belirten NSExtensionActivationRule anahtarıyla kaydedilir. Bir fotoğraf düzenleyicisi için ActivationRule genellikle image gerektirir — uzantı videolar veya Canlı Fotoğraflar için görünmez.
Apple, düzenleme menüsünü aşırı yüklememek için belirli etkinleştirme türleri belirtilmesini önerir. Uzantı yalnızca JPEG ve HEIC destekliyorsa, etkinleştirmeyi bu formatlarla sınırlamakta fayda vardır.
<!-- 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>
Bir uzantı seçildikten sonra iOS, Fotoğraflar arayüzünün üzerinde görüntülenen özel bir UIViewController ile ayrı bir süreç oluşturur. Kullanıcı fotoğrafını, uzantı araçlarını ve İptal/Bitti düğmelerini görür. Uzantı, kendi denetleyicisi dışındaki gezinmeyi değiştiremez veya sistemin diğer bölümlerine erişemez.
Apple'ın İnsan Arayüzü Kılavuzlarına göre, uzantı arayüzü minimal ve işlevsel olmalıdır — reklamlar, ilgisiz bağlantılar veya gereksiz gezinme öğeleri olmamalıdır. Ekranı karmaşıklaştırmamak için araç paletini görüntülemek üzere UIScrollView kullanılması önerilir.
Sıkça Sorulan Sorular
Uzantı, beginContentEditing(with:) yöntemi aracılığıyla tam görüntü dosyasının URL'si ile birlikte PHContentEditingInput alır. Erişim yalnızca seçilen bir fotoğrafa verilir — kitaplıktaki diğer kaynaklar üzerinde hakları yoktur.
Hayır, orijinal asla değiştirilmez. Uzantı, PHContentEditingOutput aracılığıyla yeni bir sürüm oluşturur ve AdjustmentData, orijinal duruma dönme olanağı için değişiklik parametrelerini saklar.
Uzantı, PhotoKit'in desteklediği tüm formatlarla çalışır: JPEG, HEIC, RAW, PNG, TIFF ve Canlı Fotoğraflar. Sınırlamalar, uzantının Info.plist dosyasındaki NSExtensionActivationRule aracılığıyla belirlenir.
iOS, finishContentEditing işlemi için 30 saniyeye kadar süre ayırır. Sınır aşılırsa uzantı zorla sonlandırılır ve değişiklikler kaydedilmez. CIFilter ile arka plan işleme bu süreyi uzatmaz.
Evet, Core Image (CIFilter) ve Metal (özel gölgelendiriciler için) tamamen desteklenir. Apple, ağır hesaplamaların Grand Central Dispatch aracılığıyla arka plan iş parçacıklarına aktarılmasını önerir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun