PhotoKit — یہ کیا ہے، کلیدی تصورات اور PHAsset

مصنف: IT Sectr اشاعت: 2026-05-06 مطالعے کا وقت: 8 منٹ

PhotoKit iOS اور macOS پر میڈیا لائبریری کے ساتھ کام کرنے کے لیے Apple کا فریم ورک ہے، جو ڈیوائس پر تصاویر، ویڈیوز اور Live Photos تک براہ راست رسائی فراہم کرتا ہے۔ Apple کی دستاویزات کے مطابق، یہ فریم ورک پرانے AssetsLibrary کی جگہ لیتا ہے اور iCloud، البمز، ترمیم اور Change Tracking کو سپورٹ کرتا ہے۔ PhotoKit iCloud کے ذریعے خودکار مطابقت پذیری کے ساتھ استفسارات، کیشنگ اور میڈیا لائبریری تبدیلیوں کے لیے ایک متحد API فراہم کرتا ہے۔

اہم نکات

  • PhotoKit سسٹم میڈیا لائبریری کے ساتھ کام کرنے کے لیے Apple کا فریم ورک ہے، جو تصاویر، ویڈیوز، Live Photos اور البمز تک رسائی فراہم کرتا ہے۔
  • PHAsset ایک ڈیٹا ماڈل ہے جو میٹا ڈیٹا (تاریخ، مقام، قسم) کے ساتھ ایک میڈیا آئٹم (تصویر یا ویڈیو) کی نمائندگی کرتا ہے۔
  • PHFetchResult PHPhotoLibraryChangeObserver کے ذریعے سست لوڈنگ اور تبدیلی کی اطلاع کے ساتھ استفسار کے نتائج کا کنٹینر ہے۔
  • PHImageManager PHCachingImageManager کے ذریعے سائز، موڈ اور کیشنگ کے اختیارات کے ساتھ تصاویر حاصل کرنے کے لیے مینیجر ہے۔
  • PHPhotoLibrary تبدیلیاں کرنے کے لیے داخلے کا مقام ہے: میڈیا آبجیکٹ بنانا، حذف کرنا اور ترمیم کرنا۔

PhotoKit کیا ہے؟

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 کیسے کام کرتا ہے: ڈیٹا ماڈل اور استفسارات

PhotoKit تین سطحوں پر بنایا گیا ہے: ڈیٹا ماڈل (PHObject)، استفسارات (PHFetchResult) اور تبدیلیاں (PHPhotoLibrary.performChanges)۔ ڈیٹا ماڈل درجہ بندی پر مبنی ہے: PHAsset (تصویر/ویڈیو) PHAssetCollection (البم) کے اندر واقع ہے، اور البمز PHCollectionList (فولڈر) میں گروپ ہوتے ہیں۔

استفسارات انجام دینا

استفسارات PHAsset.fetchAssets اور PHAssetCollection.fetchAssetCollections کے ذریعے انجام دی جاتی ہیں۔ تمام fetch طریقے ہم آہنگ ہیں اور PHFetchResult واپس کرتے ہیں، جو فوری طور پر میڈیا لائبریری ڈیٹا بیس میں استفسار انجام دیتا ہے۔ PHFetchResult انڈیکس کے ذریعے تیز رسائی (object(at:)) اور enumerateObjects کے ذریعے گنتی کو سپورٹ کرتا ہے۔

  • fetchAssets(with:options:) — قسم، تاریخ، البم کے مطابق فلٹر کردہ تمام میڈیا کا استفسار
  • fetchAssetCollections(with:subtype:options:) — البمز اور فولڈرز کا استفسار
  • fetchAssets(in:options:) — مخصوص البم کے اندر میڈیا کا استفسار

PHFetchOptions

PHFetchOptions استفسارات کو ترتیب دینے کے لیے ایک آبجیکٹ ہے: ترتیب (sortDescriptors)، پیش گوئی (predicate)، پوشیدہ اور حذف شدہ میڈیا کو شامل کرنا (includeHiddenAssets، includeAllBurstAssets)۔ Fetch اختیارات میڈیا کی قسم کے مطابق فلٹر کرنے کی اجازت دیتے ہیں: PHAssetMediaType.image، .video، .audio۔

PhotoKit کی اہم کلاسیں

PhotoKit میں میڈیا لائبریری تک رسائی، استفسار اور ترمیم کے لیے کلاسز کا ایک سیٹ شامل ہے۔ فریم ورک کے ساتھ مؤثر طریقے سے کام کرنے کے لیے ان میں سے ہر ایک کو سمجھنا ضروری ہے۔

PHAsset

PHAsset ایک ناقابل تغیر آبجیکٹ ہے جو ایک میڈیا آئٹم کی نمائندگی کرتا ہے۔ اس میں میٹا ڈیٹا شامل ہے: mediaType، mediaSubtypes، creationDate، location، pixelWidth، pixelHeight، duration (ویڈیو کے لیے)، isFavorite، burstIdentifier۔ LocalIdentifier ایک مستحکم سٹرنگ کلید ہے جو ایپ ری اسٹارٹ کے بعد بھی قابل رسائی ہے۔

PHAssetCollection

PHAssetCollection میڈیا کا ایک گروپ ہے: سسٹم البمز (Recents، Favorites، Selfies، Screenshots)، صارف البمز یا Moments (وقت اور مقام کے مطابق خود بخود گروپ کردہ)۔ خصوصیات: localizedTitle، assetCollectionType، assetCollectionSubtype، startDate، endDate۔

PHCollectionList

PHCollectionList ایک فولڈر ہے جس میں البمز (PHAssetCollection) یا دیگر فولڈرز شامل ہیں۔ یہ شاذ و نادر ہی استعمال ہوتا ہے، بنیادی طور پر صارف انٹرفیس میں درجہ بندی دکھانے کے لیے۔

PHImageManager اور کیشنگ

PhotoKit PHAsset سے براہ راست UIImage واپس نہیں کرتا — آپ کو PHImageManager کے ذریعے تصویر کی درخواست کرنی ہوگی۔ یہ یقینی بناتا ہے کہ تصویر iCloud سپورٹ، کیشنگ اور مطلوبہ سائز کے ساتھ لوڈ ہو۔

جزومقصدخصوصیت
PHImageManager.default()ایک بار کی درخواستوں کے لیے معیاری مینیجردرخواستوں کے درمیان کوئی کیشنگ نہیں
PHCachingImageManagerمجموعوں کے لیے پری لوڈنگ کے ساتھ مینیجرہموار اسکرولنگ کے لیے startCachingImages
PHImageRequestOptionsدرخواست کی ترتیبات: سائز، موڈ، ترسیلsynchronous، deliveryMode، progressHandler
PHImageRequestIDمنسوخی کے لیے درخواست کا شناخت کنندہcancelImageRequest(PHImageRequestID)

PHImageManager ترسیل کے تین طریقوں کو سپورٹ کرتا ہے: opportunistic (پہلے کم سائز، پھر مکمل)، highQualityFormat (صرف مکمل معیار) اور fastFormat (تیز ترین دستیاب ورژن)۔ مجموعوں کے لیے، ہمیشہ نظر آنے والے سیلز کے لیے تصویر پری لوڈنگ کے ساتھ PHCachingImageManager استعمال کریں۔

Swift میں PhotoKit استعمال کی مثالیں

PhotoKit کسٹم گیلریوں، ایڈیٹرز اور میڈیا ایپلی کیشنز بنانے کے لیے استعمال ہوتا ہے۔ آئیے تین اہم منظرناموں کو دیکھتے ہیں۔

میڈیا لائبریری سے تمام تصاویر حاصل کرنا

تخلیق کی تاریخ کے مطابق ترتیب کردہ PHFetchOptions کے ساتھ PHAsset.fetchAssets کسٹم فوٹو گیلری بنانے کے لیے بنیادی استفسار ہے۔ PHFetchResult سست لوڈنگ اور سٹریمنگ رسائی کو سپورٹ کرتا ہے۔

swift
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 میں استعمال ہوتا ہے۔

swift
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 کے ذریعے انجام دی جاتی ہیں۔ تمام آپریشنز بیچ کیے جاتے ہیں اور لین دین کے طور پر لاگو ہوتے ہیں۔

swift
PHPhotoLibrary.shared().performChanges {
    let changeRequest = PHAssetChangeRequest(for: asset)
    changeRequest.isFavorite = .true
} completionHandler: { success, error in
    if success {
        print("پسندیدہ میں شامل کر دیا گیا")
    }
}

Change Tracking کے ذریعے تبدیلیاں اور مشاہدہ

PhotoKit PHPhotoLibraryChangeObserver پروٹوکول کے ذریعے میڈیا لائبریری کی تبدیلیوں کا مشاہدہ کرنے کا طریقہ کار فراہم کرتا ہے۔ جب کوئی تبدیلی (تخلیق، حذف، ترمیم) ہوتی ہے، تو photoLibraryDidChange طریقہ PHChange آبجیکٹ کے ساتھ بلایا جاتا ہے۔

PHChange میں ہر استفسار کی قسم کے لیے changeDetails شامل ہیں: PHFetchResultChangeDetails جس میں removedIndexes، insertedIndexes، changedIndexes شامل ہیں۔ یہ UICollectionView کے لیے performBatchUpdates (move، insert، delete) کے ساتھ اینیمیشن کے ساتھ UI میں تبدیلیاں لاگو کرنے کی اجازت دیتا ہے۔

swift
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 میں تبدیلیاں لاگو کریں
        }
    }
}

RAW ترمیم اور ایکسٹینشنز

PhotoKit PHContentEditingInput اور PHContentEditingOutput میکانزم کے ذریعے میڈیا کی ترمیم کو سپورٹ کرتا ہے۔ ایپ اصلی ڈیٹا کے ساتھ editingInput کی درخواست کرتی ہے، تبدیلیاں لاگو کرتی ہے اور editingOutput کے ذریعے نتیجہ محفوظ کرتی ہے۔ فریم ورک خود بخود اصل کو محفوظ رکھتا ہے، جس سے صارفین اصل پر ری سیٹ کرکے تبدیلیاں واپس لے سکتے ہیں۔

RAW تصاویر (DNG، CR2، NEF) PHAssetResourceManager کے ذریعے سپورٹ کی جاتی ہیں، جو اصل RAW فائل تک رسائی فراہم کرتا ہے۔ RAW پروسیسنگ کے لیے، CIRAWFilter فلٹر کے ساتھ CoreImage استعمال کرنے کی سفارش کی جاتی ہے، جو درجہ حرارت، ایکسپوژر اور نفاست کی ایڈجسٹمنٹ کو سپورٹ کرتا ہے۔ PhotoKit Photo Editing Extension (iOS) کے ذریعے ایڈیٹر ایکسٹینشنز کو بھی سپورٹ کرتا ہے — منتخب تصویر یا ویڈیو پر کارروائی کرنے کے لیے سسٹم ایڈیٹر سے ایک ایپ کو بلایا جا سکتا ہے۔

PhotoKit کارکردگی کی اصلاح

PhotoKit ایک طاقتور لیکن وسائل پر بھاری فریم ورک ہے۔ غلط استعمال اسکرول لیگ اور ضرورت سے زیادہ میموری استعمال کا سبب بن سکتا ہے۔ بہترین کارکردگی کے لیے ان سفارشات پر عمل کریں۔

  • مجموعوں کے لیے PHCachingImageManager استعمال کریں — نظر آنے والے +/-1 سکرین سیلز کے لیے تصویر پری لوڈنگ اسکرول لیگ کو ختم کرتی ہے
  • targetSize سیٹ کریں — تھمب نیلز کے لیے کبھی PHImageManagerMaximumSize کی درخواست نہ کریں۔ سیل کے فزیکل سائز کو سکرین اسکیل سے ضرب دے کر استعمال کریں
  • سیل دوبارہ استعمال کرنے پر درخواستیں منسوخ کریں — PHImageRequestID محفوظ کریں اور prepareForReuse میں cancelImageRequest کال کریں
  • iCloud درخواستوں کو محدود کریں — تیز اسکرولنگ کے دوران، isNetworkAccessAllowed = false سیٹ کریں اور صرف رکنے پر iCloud تصاویر لوڈ کریں
  • PHFetchResult کو کیش کریں — ایک ہی اختیارات کے ساتھ بار بار fetchAssets نیا PHFetchResult واپس کرتا ہے۔ نتیجہ کو پراپرٹی کے طور پر محفوظ کریں اور Change Observer کے ذریعے اپ ڈیٹ کریں

PHLivePhoto کے لیے PHLivePhoto.request(with:targetSize:contentMode:options:resultHandler:) کے ذریعے علیحدہ درخواست کی ضرورت ہے۔ ان سیلز کے لیے Live Photo کی درخواست نہ کریں جو صرف تصاویر دکھاتے ہیں — اشارے کے لیے PHLivePhotoBadge استعمال کریں۔

اکثر پوچھے گئے سوالات

PhotoKit کیا ہے اور یہ AssetsLibrary سے کیسے مختلف ہے؟

PhotoKit میڈیا لائبریری کے ساتھ کام کرنے کے لیے Apple کا جدید فریم ورک ہے، جو iOS 8 میں متعارف کرایا گیا۔ پرانے AssetsLibrary کے برعکس، PhotoKit PHAsset آبجیکٹ ماڈل، تیز تلاش کے ساتھ PHFetchResult، iCloud سپورٹ اور تبدیلیوں کا مشاہدہ کرنے کے لیے Change Tracking فراہم کرتا ہے۔

PhotoKit کے ذریعے میڈیا لائبریری تک رسائی کی درخواست کیسے کریں؟

کال بیک ہینڈلر کے ساتھ PHPhotoLibrary.requestAuthorization(for: .readWrite) کال کریں۔ .authorized اسٹیٹس حاصل کرنے کے بعد، آپ PHAsset.fetchAssets استفسارات انجام دے سکتے ہیں۔ تحریری رسائی کے لیے .readWrite اجازت درکار ہے۔ صرف پڑھنے کے لیے — .addOnly۔

PHAsset سے تصویر کیسے حاصل کریں؟

پیرامیٹرز کے ساتھ PHImageManager.default().requestImage استعمال کریں: asset، targetSize، contentMode اور PHImageRequestOptions۔ غیر ہم آہنگ طریقہ PHImageRequestID واپس کرتا ہے، جو درخواست منسوخ کرنے کی اجازت دیتا ہے۔ مجموعوں کے لیے، پری لوڈنگ کے ساتھ PHCachingImageManager استعمال کریں۔

میڈیا لائبریری میں تبدیلیوں کو کیسے ٹریک کریں؟

PHPhotoLibrary.shared().register(self) کے ذریعے ایک مبصر رجسٹر کریں اور PHPhotoLibraryChangeObserver پروٹوکول کو نافذ کریں۔ photoLibraryDidChange طریقہ میں، ہر fetchResult کے لیے changeDetails کے ساتھ PHChange حاصل کریں اور اینیمیشن کے ساتھ UI میں تبدیلیاں لاگو کریں۔

PhotoKit میں iCloud تصاویر کو کیسے ہینڈل کریں؟

PHImageRequestOptions میں، iCloud ڈاؤن لوڈ کی پیش رفت کو ٹریک کرنے کے لیے isNetworkAccessAllowed = true اور progressHandler سیٹ کریں۔ تیز اسکرولنگ کے دوران، نیٹ ورک تک رسائی غیر فعال کریں اور اسکرول تاخیر سے بچنے کے لیے صرف مقامی ورژن لوڈ کریں۔

خلاصہ

  • PhotoKit میڈیا لائبریری کے ساتھ کام کرنے کے لیے Apple کا فریم ورک ہے، جو iOS 8 اور macOS 10.11 سے AssetsLibrary کی جگہ لیتا ہے۔
  • PHAsset مقامی شناخت کنندہ، قسم، تاریخ، مقام اور سائز کے ساتھ بنیادی ڈیٹا ماڈل ہے۔
  • PHFetchResult اسٹوریج میں ہم آہنگ استفسارات انجام دیتا ہے اور نتائج تک تھریڈ سیف رسائی فراہم کرتا ہے۔
  • PHCachingImageManager پری لوڈنگ کے ساتھ مجموعوں میں بغیر تاخیر کے ہموار اسکرولنگ کو یقینی بناتا ہے۔
  • Change Tracking PHPhotoLibraryChangeObserver کے ذریعے UI کو میڈیا لائبریری کی تبدیلیوں پر فوری رد عمل ظاہر کرنے کی اجازت دیتا ہے۔
  • iCloud مطابقت پذیری فریم ورک میں شامل ہے: تصویر کی درخواست خود بخود اسے iCloud سے پیش رفت کے ساتھ ڈاؤن لوڈ کرتی ہے۔
  • اصلاح — مناسب targetSize، درخواست کی منسوخی اور اسکرولنگ کے دوران iCloud کی حد بندی کارکردگی کے لیے اہم ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں