Photo Editing Extension — bu, üçüncü tərəf proqramlarına sistem Foto proqramında birbaşa redaktə alətləri əlavə etməyə imkan verən iOS mexanizmidir. Tam hüquqlu redaktorlardan fərqli olaraq, genişlənmə şəkli ayrı proqrama yükləmir — istifadəçi standart interfeysdən çıxmadan filtrlər tətbiq edir, rəngləri korrektə edir və ya effektlər əlavə edir. Apple Developer Documentation (2025) məlumatına görə, PhotoKit foto resursları ilə iş üçün 40-dan çox API təqdim edir, o cümlədən PHAdjustmentData və PHContentEditingController.
Əsas məqamlar
Photo Editing Extension — bu, iOS-da şəkil emalı alətlərini Foto proqramının standart interfeysinə daxil edən bir növ app extension-dır. İstifadəçi şəkli açır, «Redaktə et» düyməsini sıxır və quraşdırılmış genişlənmələr siyahısından istədiyini seçir. Redaktədən sonra nəticə kitabxanaya geri yazılır, orijinal fayl isə bərpa üçün əlçatan qalır.
Belə arxitektura istifadəçi təcrübəsinin əsas problemini həll edir: proqramlar arasında keçid etmək, şəkilləri ixrac və idxal etmək, versiyaları izləmək lazım deyil. WWDC 2025 məlumatına görə, bütün genişlənmələr təcrid olunmuş prosesdə öz sandbox-u və məhdud icra müddəti ilə işləyir — redaktə əməliyyatı üçün 30 saniyəyə qədər.
Genişlənmənin cihaz yaddaşında ixtiyari fayllara girişi yoxdur — yalnız istifadəçinin seçim interfeysi vasitəsilə açıq şəkildə ötürdüyü şəklə girişi var. Bu, üçüncü tərəf alətlərindən istifadə edərkən istifadəçi məlumatlarının təhlükəsizliyini təmin edir.
PhotoKit — bu, iOS 8-də ortaya çıxan Apple-ın cihaz media kitabxanası ilə iş üçün freymvorkudur. O, Foto resurslarına, o cümlədən şəkillərə, videolara, albomlara və metadataya proqram girişini təmin edir. Redaktə genişlənmələri üçün PhotoKit anbar və modifikasiya interfeysi arasında aralıq təbəqə rolunu oynayır.
PHAsset kitabxanada ayrıca media obyektini — şəkil və ya videonu təmsil edir. PHAsset vasitəsilə metadata əldə etmək olar: çəkiliş tarixi, fayl növü, xəritədə yer və kamera oriyentasiyası. PHAssetResource əsas resurslara — məsələn, RAW və ya HEIC formatında orijinal şəkil faylına giriş verir.
Redaktə genişlənməsi üçün PHContentEditingInput kritik əhəmiyyət daşıyır — bu, oxuma və emal üçün əlçatan tam şəkil (və ya video) faylını ehtiva edən obyektdir. Genişlənmə bu obyekti aktivləşdirmə anında alır və onu mənbə materialı kimi istifadə edir.
PHImageManager şəkillərin yüklənməsini və keşlənməsini idarə edir. Redaktə genişlənməsi üçün birbaşa istifadə edilmir — genişlənmə tam faylı PHContentEditingInput vasitəsilə alır. Lakin PHImageRequestOptions sorğu parametrlərini konfiqurasiya etməyə imkan verir: ölçü, çatdırılma növü (sinxron və ya asinxron) və nəticə formatı.
Apple məlumatına görə, PHImageManager avtomatik olaraq şəkil miniatürlərini operativ yaddaşda keşləyir, bu da ön Baxışların təkrar göstərilməsini sürətləndirir. Redaktə genişlənməsi üçün ən yaxşı şəkil keyfiyyətini əldə etmək üçün PHImageRequestOptionsDeliveryModeHighQualityFormat istifadə etmək tövsiyə olunur.
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
// şəkli göstərmək üçün istifadə edin
}
Hər bir Photo Editing Extension PHContentEditingController protokolunu tətbiq edir — genişlənmənin mərkəzi idarəetmə elementi. Protokol interfeysin göstərilməsi, giriş məlumatlarının alınması və nəticənin saxlanması üçün metodları müəyyən edir.
beginContentEditing(with:) redaktə sessiyası başlayanda çağırılır. Genişlənmə PHContentEditingInput alır və orijinal şəkillə interfeysi göstərməlidir. finishContentEditing(completionHandler:) redaktəni bitirir — genişlənmə dəyişdirilmiş fayl və AdjustmentData ilə PHContentEditingOutput qaytarır. cancelContentEditing() dəyişiklikləri saxlamadan ləğv edir.
Vacib nüans: beginContentEditing çağırılan anda genişlənmə yalnız bir şəkil versiyasına — istifadəçinin tələb etdiyi versiyaya giriş əldə edir. Başqa şəklə və ya alboma müraciət etmək mümkün deyil. Bu, Apple-ın təhlükəsizlik üçün tətbiq etdiyi sandbox məhdudiyyətidir.
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 redaktə interfeysini saxlama məntiqindən ayırır. Əsas iOS prosesi beginContentEditing-i çağırır, genişlənmə öz UI-ni göstərir, istifadəçi dəyişikliklər edir, sonra finishContentEditing yeni fayl yaradır. Apple bütün resurs tutumlu emalı — CIFilter filtrləri, Core Image manipulyasiyaları — interfeysi bloklamamaq üçün əsas thread-də deyil, fon thread-də yerinə yetirməyi tövsiyə edir.
PHAdjustmentData — Photo Editing Extension-da qeyri-dağıdıcı redaktəni təmin edən əsas mexanizmdir. Bu, ixtiyari formatda tətbiq olunan dəyişikliklər haqqında məlumatı ehtiva edən obyektdir. Genişlənmə filtr parametrlərini, maskaları və parametrləri AdjustmentData-da serializasiya edir və dəyişdirilmiş şəkillə birlikdə saxlayır.
Şəklin təkrar açılmasında genişlənmə AdjustmentData-nı oxuyur, interfeysin əvvəlki vəziyyətini bərpa edir və istifadəçiyə eyni yerdən redaktəni davam etdirməyə imkan verir. Genişlənmə quraşdırılmayıbsa — şəkil son saxlanılmış versiyada göstərilir, orijinal isə ayrı saxlanılır.
Apple Documentation məlumatına görə, PHAdjustmentData formatIdentifier və formatVersion — məlumat formatını identifikasiya etmək üçün sətirləri saxlayır. Genişlənmə yenilənərkən versiyanı yoxlamaq və köhnə formatları düzgün emal etmək lazımdır.
let adjustmentData = PHAdjustmentData(
formatIdentifier: "com.example.photoediting",
formatVersion: "1.0",
data: NSKeyedArchiver.archivedData(
withRootObject: params,
requiringSecureCoding: true
)
)
output.adjustmentData = adjustmentData
finishContentEditing anında genişlənmə AdjustmentData-nı dəyişdirilmiş şəkil faylı ilə birlikdə PHContentEditingOutput obyektinə yazır. Sistem sonra hər iki komponenti saxlayır: göstərmək üçün versiyanı və redaktə sessiyasını bərpa etmək üçün metadatanı.
Photo Editing Extension onu ehtiva edən proqram quraşdırıldıqdan sonra avtomatik olaraq Foto proqramının menyusunda görünür. İstifadəçi şəkli açır, «Redaktə et» seçir və aşağı alətlər sırasında bütün quraşdırılmış redaktə genişlənmələri göstərilir — həm sistem, həm də üçüncü tərəf.
Genişlənmə əsas proqramın Info.plist faylı vasitəsilə NSExtensionActivationRule açarı ilə qeydiyyatdan keçir, hansı ki, genişlənməni hansı məzmun növlərinin aktivləşdirdiyini göstərir. Foto redaktoru üçün ActivationRule adətən image tələb edir — genişlənmə video və ya canlı fotoşəkillər üçün göstərilməyəcək.
Apple redaktə menyusunu yükləməmək üçün konkret aktivləşdirmə növlərini göstərməyi tövsiyə edir. Genişlənmə yalnız JPEG və HEIC dəstəkləyirsə, aktivləşdirməni bu formatlarla məhdudlaşdırmaq məqsədəuyğundur.
<!-- 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>
Genişlənmə seçildikdən sonra iOS Foto interfeysi üzərində göstərilən xüsusi UIViewController ilə ayrı proses yaradır. İstifadəçi öz şəklini, genişlənmə alətlərini və «Ləğv et» / «Hazır» düymələrini görür. Genişlənmə öz kontrollerindən kənarda naviqasiyanı dəyişə və ya sistemin digər hissələrinə giriş əldə edə bilməz.
Apple-ın Human Interface Guidelines məlumatına görə, genişlənmə interfeysi minimal və funksional olmalıdır — reklam, kənar linklər və artıq naviqasiya elementləri olmadan. Ekranı qarışdırmamaq üçün alət palitrasını göstərmək üçün UIScrollView istifadə etmək tövsiyə olunur.
Tez-tez verilən suallar
Genişlənmə beginContentEditing(with:) metodu vasitəsilə tam şəkil faylının URL-i ilə PHContentEditingInput alır. Giriş yalnız bir seçilmiş şəklə verilir — kitabxananın digər resurslarına hüquq olmadan.
Xeyr, orijinal heç vaxt dəyişdirilmir. Genişlənmə PHContentEditingOutput vasitəsilə yeni versiya yaradır, AdjustmentData isə ilkin vəziyyətə qayıtmaq imkanı üçün dəyişiklik parametrlərini saxlayır.
Genişlənmə PhotoKit-in dəstəklədiyi bütün formatlarla işləyir: JPEG, HEIC, RAW, PNG, TIFF və Live Photos. Məhdudiyyətlər genişlənmənin Info.plist faylında NSExtensionActivationRule vasitəsilə təyin edilir.
iOS finishContentEditing əməliyyatını yerinə yetirmək üçün 30 saniyəyə qədər vaxt ayırır. Limit aşıldıqda genişlənmə məcburi bağlanır və dəyişikliklər saxlanılmır. CIFilter ilə fon emalı bu müddəti uzatmır.
Bəli, Core Image (CIFilter) və Metal (fərdi shaderlər üçün) tam dəstəklənir. Apple ağır hesablamaları Grand Central Dispatch vasitəsilə fon thread-lərinə çıxarmağı tövsiyə edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun