PhotoKit iOS اور macOS پر میڈیا لائبریری کے ساتھ کام کرنے کے لیے Apple کا فریم ورک ہے، جو ڈیوائس پر تصاویر، ویڈیوز اور Live Photos تک براہ راست رسائی فراہم کرتا ہے۔ Apple کی دستاویزات کے مطابق، یہ فریم ورک پرانے AssetsLibrary کی جگہ لیتا ہے اور iCloud، البمز، ترمیم اور Change Tracking کو سپورٹ کرتا ہے۔ PhotoKit iCloud کے ذریعے خودکار مطابقت پذیری کے ساتھ استفسارات، کیشنگ اور میڈیا لائبریری تبدیلیوں کے لیے ایک متحد API فراہم کرتا ہے۔
اہم نکات
PhotoKit Apple کا فریم ورک ہے (iOS 8، macOS 10.11 میں متعارف کرایا گیا) جو سسٹم میڈیا لائبریری کے ساتھ کام کرنے کے لیے آبجیکٹ اورینٹڈ API فراہم کرتا ہے۔ AssetsLibrary کے برعکس، PhotoKit میڈیا لائبریری کو ڈیٹا بیس کے طور پر دیکھتا ہے: استفسارات PHAsset، PHCollection اور PHCollectionList آبجیکٹ واپس کرتی ہیں جو مواد اور ذخیرہ کرنے کے ڈھانچے کی نمائندگی کرتی ہیں۔
PhotoKit تمام میڈیا اقسام کو سپورٹ کرتا ہے: تصاویر (JPEG، HEIF، RAW)، ویڈیوز (MOV، MP4)، Live Photos اور برسٹ شاٹس۔ فریم ورک خود بخود iCloud مطابقت پذیری کا انتظام کرتا ہے: اگر تصویر iCloud میں محفوظ ہے، تو PhotoKit اسے نیٹ ورک کے ذریعے درخواست کرتا ہے اور PHImageRequestOptions.progressHandler کے ذریعے پیش رفت کی اطلاع دیتا ہے۔
PhotoKit کی اہم خصوصیت PHObject پر مبنی ڈیٹا ماڈل ہے جس میں ایک مقامی شناخت کنندہ (localIdentifier) ہے جو سیشنز کے درمیان مستحکم رہتا ہے۔ یہ آپ کو میڈیا آبجیکٹ کے حوالہ جات محفوظ کرنے اور دوبارہ استفسار کیے بغیر ایپ ری اسٹارٹ کے بعد انہیں بحال کرنے کی اجازت دیتا ہے۔
PhotoKit تین سطحوں پر بنایا گیا ہے: ڈیٹا ماڈل (PHObject)، استفسارات (PHFetchResult) اور تبدیلیاں (PHPhotoLibrary.performChanges)۔ ڈیٹا ماڈل درجہ بندی پر مبنی ہے: PHAsset (تصویر/ویڈیو) PHAssetCollection (البم) کے اندر واقع ہے، اور البمز PHCollectionList (فولڈر) میں گروپ ہوتے ہیں۔
استفسارات PHAsset.fetchAssets اور PHAssetCollection.fetchAssetCollections کے ذریعے انجام دی جاتی ہیں۔ تمام fetch طریقے ہم آہنگ ہیں اور PHFetchResult واپس کرتے ہیں، جو فوری طور پر میڈیا لائبریری ڈیٹا بیس میں استفسار انجام دیتا ہے۔ PHFetchResult انڈیکس کے ذریعے تیز رسائی (object(at:)) اور enumerateObjects کے ذریعے گنتی کو سپورٹ کرتا ہے۔
PHFetchOptions استفسارات کو ترتیب دینے کے لیے ایک آبجیکٹ ہے: ترتیب (sortDescriptors)، پیش گوئی (predicate)، پوشیدہ اور حذف شدہ میڈیا کو شامل کرنا (includeHiddenAssets، includeAllBurstAssets)۔ Fetch اختیارات میڈیا کی قسم کے مطابق فلٹر کرنے کی اجازت دیتے ہیں: PHAssetMediaType.image، .video، .audio۔
PhotoKit میں میڈیا لائبریری تک رسائی، استفسار اور ترمیم کے لیے کلاسز کا ایک سیٹ شامل ہے۔ فریم ورک کے ساتھ مؤثر طریقے سے کام کرنے کے لیے ان میں سے ہر ایک کو سمجھنا ضروری ہے۔
PHAsset ایک ناقابل تغیر آبجیکٹ ہے جو ایک میڈیا آئٹم کی نمائندگی کرتا ہے۔ اس میں میٹا ڈیٹا شامل ہے: mediaType، mediaSubtypes، creationDate، location، pixelWidth، pixelHeight، duration (ویڈیو کے لیے)، isFavorite، burstIdentifier۔ LocalIdentifier ایک مستحکم سٹرنگ کلید ہے جو ایپ ری اسٹارٹ کے بعد بھی قابل رسائی ہے۔
PHAssetCollection میڈیا کا ایک گروپ ہے: سسٹم البمز (Recents، Favorites، Selfies، Screenshots)، صارف البمز یا Moments (وقت اور مقام کے مطابق خود بخود گروپ کردہ)۔ خصوصیات: localizedTitle، assetCollectionType، assetCollectionSubtype، startDate، endDate۔
PHCollectionList ایک فولڈر ہے جس میں البمز (PHAssetCollection) یا دیگر فولڈرز شامل ہیں۔ یہ شاذ و نادر ہی استعمال ہوتا ہے، بنیادی طور پر صارف انٹرفیس میں درجہ بندی دکھانے کے لیے۔
PhotoKit PHAsset سے براہ راست UIImage واپس نہیں کرتا — آپ کو PHImageManager کے ذریعے تصویر کی درخواست کرنی ہوگی۔ یہ یقینی بناتا ہے کہ تصویر iCloud سپورٹ، کیشنگ اور مطلوبہ سائز کے ساتھ لوڈ ہو۔
| جزو | مقصد | خصوصیت |
|---|---|---|
| PHImageManager.default() | ایک بار کی درخواستوں کے لیے معیاری مینیجر | درخواستوں کے درمیان کوئی کیشنگ نہیں |
| PHCachingImageManager | مجموعوں کے لیے پری لوڈنگ کے ساتھ مینیجر | ہموار اسکرولنگ کے لیے startCachingImages |
| PHImageRequestOptions | درخواست کی ترتیبات: سائز، موڈ، ترسیل | synchronous، deliveryMode، progressHandler |
| PHImageRequestID | منسوخی کے لیے درخواست کا شناخت کنندہ | cancelImageRequest(PHImageRequestID) |
PHImageManager ترسیل کے تین طریقوں کو سپورٹ کرتا ہے: opportunistic (پہلے کم سائز، پھر مکمل)، highQualityFormat (صرف مکمل معیار) اور fastFormat (تیز ترین دستیاب ورژن)۔ مجموعوں کے لیے، ہمیشہ نظر آنے والے سیلز کے لیے تصویر پری لوڈنگ کے ساتھ PHCachingImageManager استعمال کریں۔
PhotoKit کسٹم گیلریوں، ایڈیٹرز اور میڈیا ایپلی کیشنز بنانے کے لیے استعمال ہوتا ہے۔ آئیے تین اہم منظرناموں کو دیکھتے ہیں۔
تخلیق کی تاریخ کے مطابق ترتیب کردہ PHFetchOptions کے ساتھ PHAsset.fetchAssets کسٹم فوٹو گیلری بنانے کے لیے بنیادی استفسار ہے۔ PHFetchResult سست لوڈنگ اور سٹریمنگ رسائی کو سپورٹ کرتا ہے۔
let options = PHFetchOptions()
options.sortDescriptors = [NSSortDescriptor(
key: "creationDate",
ascending: .false
)]
options.predicate = NSPredicate(
format: "mediaType == %d",
PHAssetMediaType.image.rawValue
)
let allPhotos = PHAsset.fetchAssets(with: options)
print("\(allPhotos.count) تصاویر ملیں")
allPhotos.enumerateObjects { asset, index, stop in
print("تصویر \(index): \(asset.localIdentifier)")
}
PHFetchResult ایک تھریڈ سیف کنٹینر ہے۔ object(at:) کے ذریعے انڈیکس کے مطابق آبجیکٹ تک رسائی UI کو مسدود نہیں کرتی، لیکن PHImageManager کے ذریعے تصویر کی درخواست غیر ہم آہنگ طریقے سے کی جانی چاہیے۔
PHCachingImageManager پری لوڈنگ کے لیے startCachingImages اور stopCachingImages طریقوں کے ساتھ PHImageManager کا ذیلی کلاس ہے۔ یہ ہموار اسکرولنگ کے لیے UICollectionView میں استعمال ہوتا ہے۔
let cachingManager = PHCachingImageManager()
let targetSize = CGSize(width: 200, height: 200)
// نظر آنے والے سیلز کے لیے پری لوڈ
cachingManager.startCachingImages(
for: visibleAssets,
targetSize: targetSize,
contentMode: .aspectFill,
options: nil
)
// iCloud فال بیک کے ساتھ PHImageRequestOptions کے ذریعے تصویر کی درخواست
let requestOptions = PHImageRequestOptions()
requestOptions.deliveryMode = .opportunistic
requestOptions.isNetworkAccessAllowed = .true
requestOptions.progressHandler = { progress, error, stop, info in
DispatchQueue.main.async {
print("iCloud سے ڈاؤن لوڈ ہو رہا ہے: \(progress * 100)%")
}
}
let requestID = cachingManager.requestImage(
for: asset,
targetSize: targetSize,
contentMode: .aspectFill,
options: requestOptions
) { image, info in
print("تصویر مل گئی: \(image?.size ?? .zero)")
}
میڈیا لائبریری میں تبدیلیاں changeRequest بلاک کے اندر PHPhotoLibrary.shared().performChanges کے ذریعے انجام دی جاتی ہیں۔ تمام آپریشنز بیچ کیے جاتے ہیں اور لین دین کے طور پر لاگو ہوتے ہیں۔
PHPhotoLibrary.shared().performChanges {
let changeRequest = PHAssetChangeRequest(for: asset)
changeRequest.isFavorite = .true
} completionHandler: { success, error in
if success {
print("پسندیدہ میں شامل کر دیا گیا")
}
}
PhotoKit PHPhotoLibraryChangeObserver پروٹوکول کے ذریعے میڈیا لائبریری کی تبدیلیوں کا مشاہدہ کرنے کا طریقہ کار فراہم کرتا ہے۔ جب کوئی تبدیلی (تخلیق، حذف، ترمیم) ہوتی ہے، تو photoLibraryDidChange طریقہ PHChange آبجیکٹ کے ساتھ بلایا جاتا ہے۔
PHChange میں ہر استفسار کی قسم کے لیے changeDetails شامل ہیں: PHFetchResultChangeDetails جس میں removedIndexes، insertedIndexes، changedIndexes شامل ہیں۔ یہ UICollectionView کے لیے performBatchUpdates (move، insert، delete) کے ساتھ اینیمیشن کے ساتھ UI میں تبدیلیاں لاگو کرنے کی اجازت دیتا ہے۔
class PhotosViewController: UIViewController {
var fetchResult: PHFetchResult>PHAsset>?
override func viewDidLoad() {
super.viewDidLoad()
PHPhotoLibrary.shared().register(self)
}
deinit {
PHPhotoLibrary.shared().unregisterChangeObserver(self)
}
}
extension PhotosViewController: PHPhotoLibraryChangeObserver {
func photoLibraryDidChange(_ changeInstance: PHChange) {
guard let fetchResult,
let details = changeInstance.changeDetails(for: fetchResult)
else { return }
DispatchQueue.main.async {
self.fetchResult = details.fetchResultAfterChanges
// collectionView میں تبدیلیاں لاگو کریں
}
}
}
PhotoKit PHContentEditingInput اور PHContentEditingOutput میکانزم کے ذریعے میڈیا کی ترمیم کو سپورٹ کرتا ہے۔ ایپ اصلی ڈیٹا کے ساتھ editingInput کی درخواست کرتی ہے، تبدیلیاں لاگو کرتی ہے اور editingOutput کے ذریعے نتیجہ محفوظ کرتی ہے۔ فریم ورک خود بخود اصل کو محفوظ رکھتا ہے، جس سے صارفین اصل پر ری سیٹ کرکے تبدیلیاں واپس لے سکتے ہیں۔
RAW تصاویر (DNG، CR2، NEF) PHAssetResourceManager کے ذریعے سپورٹ کی جاتی ہیں، جو اصل RAW فائل تک رسائی فراہم کرتا ہے۔ RAW پروسیسنگ کے لیے، CIRAWFilter فلٹر کے ساتھ CoreImage استعمال کرنے کی سفارش کی جاتی ہے، جو درجہ حرارت، ایکسپوژر اور نفاست کی ایڈجسٹمنٹ کو سپورٹ کرتا ہے۔ PhotoKit Photo Editing Extension (iOS) کے ذریعے ایڈیٹر ایکسٹینشنز کو بھی سپورٹ کرتا ہے — منتخب تصویر یا ویڈیو پر کارروائی کرنے کے لیے سسٹم ایڈیٹر سے ایک ایپ کو بلایا جا سکتا ہے۔
PhotoKit ایک طاقتور لیکن وسائل پر بھاری فریم ورک ہے۔ غلط استعمال اسکرول لیگ اور ضرورت سے زیادہ میموری استعمال کا سبب بن سکتا ہے۔ بہترین کارکردگی کے لیے ان سفارشات پر عمل کریں۔
PHLivePhoto کے لیے PHLivePhoto.request(with:targetSize:contentMode:options:resultHandler:) کے ذریعے علیحدہ درخواست کی ضرورت ہے۔ ان سیلز کے لیے Live Photo کی درخواست نہ کریں جو صرف تصاویر دکھاتے ہیں — اشارے کے لیے PHLivePhotoBadge استعمال کریں۔
اکثر پوچھے گئے سوالات
PhotoKit میڈیا لائبریری کے ساتھ کام کرنے کے لیے Apple کا جدید فریم ورک ہے، جو iOS 8 میں متعارف کرایا گیا۔ پرانے AssetsLibrary کے برعکس، PhotoKit PHAsset آبجیکٹ ماڈل، تیز تلاش کے ساتھ PHFetchResult، iCloud سپورٹ اور تبدیلیوں کا مشاہدہ کرنے کے لیے Change Tracking فراہم کرتا ہے۔
کال بیک ہینڈلر کے ساتھ PHPhotoLibrary.requestAuthorization(for: .readWrite) کال کریں۔ .authorized اسٹیٹس حاصل کرنے کے بعد، آپ PHAsset.fetchAssets استفسارات انجام دے سکتے ہیں۔ تحریری رسائی کے لیے .readWrite اجازت درکار ہے۔ صرف پڑھنے کے لیے — .addOnly۔
پیرامیٹرز کے ساتھ PHImageManager.default().requestImage استعمال کریں: asset، targetSize، contentMode اور PHImageRequestOptions۔ غیر ہم آہنگ طریقہ PHImageRequestID واپس کرتا ہے، جو درخواست منسوخ کرنے کی اجازت دیتا ہے۔ مجموعوں کے لیے، پری لوڈنگ کے ساتھ PHCachingImageManager استعمال کریں۔
PHPhotoLibrary.shared().register(self) کے ذریعے ایک مبصر رجسٹر کریں اور PHPhotoLibraryChangeObserver پروٹوکول کو نافذ کریں۔ photoLibraryDidChange طریقہ میں، ہر fetchResult کے لیے changeDetails کے ساتھ PHChange حاصل کریں اور اینیمیشن کے ساتھ UI میں تبدیلیاں لاگو کریں۔
PHImageRequestOptions میں، iCloud ڈاؤن لوڈ کی پیش رفت کو ٹریک کرنے کے لیے isNetworkAccessAllowed = true اور progressHandler سیٹ کریں۔ تیز اسکرولنگ کے دوران، نیٹ ورک تک رسائی غیر فعال کریں اور اسکرول تاخیر سے بچنے کے لیے صرف مقامی ورژن لوڈ کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں