Kingfisher — یہ کیا ہے، بنیادی تصورات اور ImageCache

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

Kingfisher ایک لائبریری ہے جو iOS، macOS اور watchOS پر تصاویر لوڈ اور کیش کرنے کے لیے ہے، جو خالص Swift میں لکھی گئی ہے۔ سرکاری ذخیرے کے مطابق، لائبریری Swift Concurrency، Combine اور SwiftUI کے لیے مکمل تعاون فراہم کرتی ہے، نیز خودکار دو سطحی کیشنگ بھی فراہم کرتی ہے۔ Kingfisher اپنی ٹائپ سیف API اور Swift پروجیکٹس میں آسان انضمام کے لیے مشہور ہے۔

اہم نکات

  • Kingfisher ایک خالص Swift تصویری لوڈنگ لائبریری ہے جو async/await، Combine اور SwiftUI کو سپورٹ کرتی ہے۔
  • KingfisherManager لوڈنگ کے لیے ایک واحد داخلہ نقطہ ہے، جو کیش اور نیٹ ورک کی درخواستوں کو ٹریک کرتا ہے۔
  • ImageCache دو سطحی ذخیرہ کو نافذ کرتا ہے: قابل ترتیب حدود کے ساتھ Memory Cache اور Disk Cache۔
  • ImageProcessor تبدیلیوں کے لیے ایک پروٹوکول ہے: سائز تبدیل کرنا، گول کرنا، دھندلا کرنا، واٹر مارک شامل کرنا۔
  • KFImage SwiftUI کے لیے ایک View جزو ہے جو لوڈنگ کی حالتوں کا اعلانیہ بیان فراہم کرتا ہے۔

Kingfisher کیا ہے؟

Kingfisher Apple پلیٹ فارمز پر غیر متزامن تصویری لوڈنگ اور کیشنگ کے لیے ایک لائبریری ہے، جو مکمل طور پر Swift میں لکھی گئی ہے۔ لائبریری کے مصنف Wei Wang (onevcat) ہیں۔ Kingfisher خودکار کیشنگ، تبدیلیوں اور جدید Swift ٹیکنالوجیز (async/await، Combine، Sendable) کی معاونت کے ساتھ نیٹ ورک سے تصاویر لوڈ کرنے کے لیے ٹولز کا ایک سیٹ فراہم کرتا ہے۔

لائبریری کے GitHub پر 23,000 سے زیادہ ستارے ہیں اور یہ Telegram، Snapchat اور Dropbox جیسی ایپلیکیشنز میں استعمال ہوتی ہے۔ Kingfisher GIF، APNG، HEIF اور تمام معیاری تصویری فارمیٹس کو سپورٹ کرتا ہے۔ ہر درخواست ایک ٹائپ سیف Result لوٹاتی ہے، جو ٹائپ کاسٹنگ کی غلطیوں کو ختم کرتا ہے۔

Kingfisher کا فن تعمیر تین اہم اجزاء پر بنایا گیا ہے: Manager (ڈاؤن لوڈ مینیجر)، Cache (دو سطحی کیش) اور Processor (تبدیلیاں)۔ یہ اجزاء پروٹوکول کے ذریعے جڑے ہوئے ہیں، جس سے انحصار تبدیل کیے بغیر کسی بھی حصے کو تبدیل کیا جا سکتا ہے۔

Kingfisher کیسے کام کرتا ہے: Manager اور Cache

KingfisherManager مرکزی کلاس ہے جو تصویری لوڈنگ، کیشنگ اور پروسیسنگ کو مربوط کرتی ہے۔ اس میں ImageCache اور ImageDownloader کے حوالہ جات ہوتے ہیں اور یہ ایک واحد طریقہ retrieveImage فراہم کرتا ہے جو تمام مراحل سے گزرنے کے بعد تیار تصویر لوٹاتا ہے۔

لوڈنگ کا عمل

retrieveImage کو کال کرنے پر، Manager پہلے Memory Cache کو چیک کرتا ہے — UIImage کے ساتھ ایک NSCache، جہاں کلید ماخذ URL اور CacheSerializer سے بنتی ہے۔ اگر تصویر مل جاتی ہے، تو اسے فوری طور پر لوٹا دیا جاتا ہے۔ نہ ملنے پر، Disk Cache کو چیک کیا جاتا ہے — serializer کے ذریعے ڈیکرپشن کے ساتھ فائل سسٹم سے پڑھنا۔ اگر ڈسک کیش خالی ہے، تو ImageDownloader کے ذریعے نیٹ ورک کی درخواست کی جاتی ہے، نتیجہ ڈی کوڈ، تبدیل اور دونوں کیش سطحوں میں محفوظ کیا جاتا ہے۔

  • Memory Cache — NSCache پر مبنی، میموری وارننگ پر خود بخود صاف ہو جاتا ہے
  • Disk Cache — TTL اور سائز کی حد کی جانچ کے ساتھ فائل ذخیرہ
  • ImageDownloader — ترمیم کنندگان کے ذریعے درخواست میں ترمیم کی معاونت کے ساتھ URLSession پر مبنی

Swift Concurrency

ورژن 7.0 سے، Kingfisher async/await کو مکمل طور پر سپورٹ کرتا ہے۔ retrieveImage طریقہ ایک غیر متزامن فنکشن کے طور پر دستیاب ہے، جو تکمیلی بلاکس کے بغیر براہ راست Result لوٹاتا ہے۔ یہ Structured Concurrency کے ساتھ جدید Swift فن تعمیر میں لائبریری کے استعمال کی اجازت دیتا ہے۔

Kingfisher کے بنیادی ماڈیولز

Kingfisher کئی ماڈیولز میں تقسیم ہے، ہر ایک اپنے کام کو حل کرتا ہے۔ یہ تقسیم جانچ اور اجزاء کی تبدیلی کو آسان بناتی ہے۔

KingfisherManager

KingfisherManager ایک سہولت کار ہے جو لوڈنگ، کیش اور پروسیسرز کو یکجا کرتا ہے۔ ڈیفالٹ طور پر، سنگلٹن KingfisherManager.shared استعمال ہوتا ہے، لیکن الگ تھلگ منظرناموں (مثلاً یونٹ ٹیسٹ) کے لیے حسب ضرورت ترتیبات کے ساتھ ایک علیحدہ مثال بنائی جا سکتی ہے۔

ImageCache

ImageCache میموری اور ڈسک کے لیے علیحدہ ترتیبات کے ساتھ دو سطحی کیش ہے۔ Memory Cache پر اشیاء کی تعداد کی کوئی حد نہیں ہے، لیکن میموری کم ہونے پر سسٹم اسے صاف کر دیتا ہے۔ Disk Cache قابل ترتیب TTL (ڈیفالٹ 7 دن)، سائز کی حد (ڈیفالٹ 0 — کوئی حد نہیں) اور خودکار صفائی کے ساتھ ایک ڈائریکٹری میں فائلیں محفوظ کرتا ہے۔

ImageProcessor

ImageProcessor ایک واحد طریقہ process(item:options:) والا پروٹوکول ہے جو پروسیس شدہ تصویر لوٹاتا ہے۔ بلٹ ان نفاذ: ResizingImageProcessor (سائز تبدیل کرنا)، RoundCornerImageProcessor (گول کرنا)، BlurImageProcessor (گاوسی دھندلاپن)، OverlayImageProcessor (رنگ اوورلے)۔ پروسیسرز کو |> آپریٹر کے ذریعے ملایا جا سکتا ہے۔

Kingfisher کیشنگ سسٹم

Kingfisher کیش فن تعمیر write-through اصول پر مبنی ہے: ڈیٹا بیک وقت دونوں سطحوں پر لکھا جاتا ہے، اور پڑھنا تیز ترین سطح — میموری سے شروع ہوتا ہے۔ کیش کلید استفسار کے پیرامیٹرز کو ہٹانے کے بعد مکمل تصویری URL ہے۔

پیرامیٹرMemory CacheDisk Cache
ذخیرہNSCache (RAM)فائل سسٹم (SSD)
فارمیٹUIImage (ڈی کوڈ شدہ)ڈیٹا (سمپیڑت، serializer کے ذریعے)
صفائیUIApplication.didReceiveMemoryWarningNotificationTTL + حد سے تجاوز
سیریلائزیشنضرورت نہیںCacheSerializer (ڈیفالٹ PNG/JPEG)
تھریڈ سیفٹیہاں (مطابقت پذیر رسائی)ہاں (IO قطار + رکاوٹیں)

Disk Cache کے سائز کو منظم کرنے کے لیے، آخری رسائی کی تاریخ کے مطابق ترتیب دے کر فائلوں کے کل سائز کا حساب لگایا جاتا ہے۔ جب حد سے تجاوز ہو جاتا ہے، تو سب سے پرانی رسائی کی تاریخ والی فائلیں اس وقت تک ہٹا دی جاتی ہیں جب تک سائز حد کے 50% سے نیچے نہ آ جائے۔ TTL صفائی کیش کی ابتدا کے دوران اور cleanExpired کی ہر کال پر ہوتی ہے۔

Swift میں Kingfisher استعمال کرنے کی مثالیں

Kingfisher تصاویر لوڈ کرنے کے لیے کئی انٹرفیس فراہم کرتا ہے: UIImageView پر ایک توسیع، ایک علیحدہ مینیجر اور ایک SwiftUI View۔

kf کے ذریعے UIImageView میں لوڈ کرنا

kf UIImageView پر ایک Namespace خصوصیت ہے، جو setImage، cancelDownload طریقے اور لوڈنگ اشارے فراہم کرتی ہے۔ setImage طریقہ URLSource اور اختیاری پیرامیٹرز Options اور completionHandler قبول کرتا ہے۔

swift
import Kingfisher

imageView.kf.setImage(
    with: URL(string: "https://example.com/image.jpg"),
    placeholder: UIImage(named: "placeholder"),
    options: [
        .processor(RoundCornerImageProcessor(radius: .point(12))),
        .transition(.fade(0.3)),
        .cacheMemoryOnly
    ],
    progressBlock: { receivedSize, totalSize in
        print("لوڈ ہوگیا \(receivedSize) / \(totalSize)")
    }
)

یہ طریقہ ایک DownloadTask لوٹاتا ہے جو cancel کے ذریعے منسوخی اور پیشرفت سے باخبر رہنے کی حمایت کرتا ہے۔ اندرونی طور پر، setImage ImageView کو Target کے طور پر خودکار پتہ لگانے کے ساتھ KingfisherManager.shared.retrieveImage کو کال کرتا ہے۔

async/await کے ساتھ استعمال

Kingfisher 7.0 سے، setImage طریقہ ایک غیر متزامن ورژن میں دستیاب ہے۔ یہ کال بیک کے بغیر Swift Structured Concurrency میں تصویری لوڈنگ کو ضم کرنے کی اجازت دیتا ہے۔

swift
func loadAvatar() async {
    do {
        let result = try await imageView.kf.setImage(
            with: url,
            options: [.processor(ResizingImageProcessor(
                targetSize: CGSize(width: 100, height: 100)
            ))]
        )
        // result.image میں UIImage ہے
    } catch {
        print("ناکام: \(error)")
    }
}

SwiftUI کے لیے KFImage

KFImage ایک SwiftUI View ہے، جو iOS 15 کے AsyncImage سے ملتا جلتا ہے، لیکن مکمل Kingfisher کیشنگ سپورٹ کے ساتھ۔ View خود بخود KingfisherManager.shared استعمال کرتا ہے لیکن .configure موڈیفائر کے ذریعے کسٹم مینیجر کو سپورٹ کرتا ہے۔

swift
struct AvatarView: View {
    let url: URL

    var body: some View {
        KFImage(url)
            .placeholder { ProgressView() }
            .resizable()
            .fade(duration: 0.25)
            .forceTransition()
            .frame(width: 80, height: 80)
            .cornerRadius(40)
    }
}

Kingfisher میں لوڈنگ کے اشارے

Kingfisher تصویری لوڈنگ کی پیشرفت ظاہر کرنے کے لیے ایک بلٹ ان اشارے کا نظام فراہم کرتا ہے۔ IndicatorType تین اختیارات کے ساتھ ایک شمار ہے: .activity (UIActivityIndicatorView)، .progress (UIProgressView) اور .custom (Indicator پروٹوکول کا کسٹم نفاذ)۔ اشارہ لوڈنگ کے دوران ImageView کے اوپر خود بخود ظاہر ہوتا ہے اور مکمل ہونے کے بعد چھپ جاتا ہے۔

کسٹم اشارے کے لیے، Indicator پروٹوکول کو startAnimatingView() اور stopAnimatingView() طریقوں کے ساتھ نافذ کرنا ضروری ہے۔ یہ ہائبرڈ حل کی اجازت دیتا ہے: چمکتی اینیمیشن کے ساتھ کنکال، بتدریج ظاہر ہونے والی پلیس ہولڈر تصویر یا شفافیت کی اینیمیشن کے ساتھ لوگو۔ Kingfisher KingfisherManager.shared.defaultOptions کے ذریعے عالمی سطح پر اشارہ سیٹ کرنے کی بھی حمایت کرتا ہے۔

Kingfisher بمقابلہ SDWebImage

iOS پلیٹ فارم پر، Kingfisher اور SDWebImage تصویری لوڈنگ کی دو غالب لائبریریاں ہیں۔ ان کے درمیان انتخاب پروجیکٹ کی زبان، کارکردگی کی ضروریات اور ماحولیاتی نظام پر منحصر ہے۔

معیارKingfisherSDWebImage
زبانSwift (100%)Objective-C + Swift
Async/Awaitمقامی حمایتریپر کے ذریعے
Combineبلٹ ان Publisherنہیں
Sendableحمایت کرتا ہےمحدود
ٹائپ سیفٹیمکمل (Result قسم)Any؟ کے ذریعے
ImageProcessor|> کے ذریعے جامع&& کے ذریعے Transformer
سائز~900 KB~1.2 MB
GitHub ستارے23,000+25,000+

Kingfisher کا بنیادی فائدہ اس کا Swift-first فن تعمیر ہے: async/await، Combine Publishers، Sendable اور Result اقسام کے لیے مکمل حمایت۔ SDWebImage وسیع پلگ ان ماحولیاتی نظام (WebP, SVG, MapKit) اور Objective-C حمایت کی وجہ سے اپنی قیادت برقرار رکھے ہوئے ہے۔

iOS پروجیکٹ میں Kingfisher ترتیب دینا

Kingfisher Swift Package Manager، CocoaPods یا Carthage کے ذریعے انسٹال کیا جاتا ہے۔ انسٹالیشن کے بعد، صرف ماڈیول درآمد کریں اور کوئی بھی لوڈنگ طریقہ کال کریں — لائبریری اضافی ترتیب کے بغیر استعمال کے لیے تیار ہے۔

swift
// Swift Package Manager (Package.swift)
dependencies: [
    .package(
        url: "https://github.com/onevcat/Kingfisher.git",
        from: "7.12.0"
    )
]

// CocoaPods (Podfile)
pod 'Kingfisher', '~> 7.12'

عالمی ترتیبات کو حسب ضرورت بنانے کے لیے، KingfisherManager.shared استعمال کریں۔ آپ ڈاؤن لوڈر کا ٹائم آؤٹ، کیش حکمت عملی اور ڈیفالٹ پروسیسرز تبدیل کر سکتے ہیں۔ ذیل میں 14 دن کے TTL کے ساتھ 500 MB کیش ترتیب دینے کی مثال دی گئی ہے۔

swift
let cache = ImageCache(name: "custom")
cache.memoryStorage.config.totalCostLimit = 100 * 1024 * 1024
cache.diskStorage.config.sizeLimit = 500 * 1024 * 1024
cache.diskStorage.config.expiration = .days(14)
KingfisherManager.shared.cache = cache

ImageDownloader بھی مینیجر کے ذریعے ترتیب دیا جاتا ہے: آپ ٹائم آؤٹ، ہیڈرز اور کیشنگ پالیسیوں کے ساتھ ایک کسٹم URLSessionConfiguration سیٹ کر سکتے ہیں۔ پیشرفت کی نگرانی کے لیے، KFIndicator ماڈیول ActivityIndicator، ProgressView اور کسٹم اشارے کی حمایت کے ساتھ دستیاب ہے۔

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

Kingfisher کیا ہے اور یہ کس لیے استعمال ہوتا ہے؟

Kingfisher iOS پر تصاویر لوڈ کرنے کے لیے ایک لائبریری ہے، جو خالص Swift میں لکھی گئی ہے۔ یہ SwiftUI، UIKit اور جدید Swift ٹیکنالوجیز میں مکمل انضمام کے ساتھ نیٹ ورک سے تصاویر کو غیر متزامن طور پر لوڈ، کیش اور تبدیل کرنے کے لیے استعمال ہوتا ہے۔

Swift Package Manager کے ذریعے Kingfisher کیسے انسٹال کریں؟

Xcode میں File → Add Packages کے ذریعے https://github.com/onevcat/Kingfisher.git پیکیج کو ورژن 7.12.0 سے شامل کریں۔ یا Package.swift میں from: "7.12.0" پیرامیٹر کے ساتھ انحصار کی وضاحت کریں۔ انسٹالیشن کے بعد، Kingfisher ماڈیول درآمد کریں۔

Kingfisher کن تصویری فارمیٹس کو سپورٹ کرتا ہے؟

Kingfisher JPEG، PNG، GIF، APNG، HEIF اور WebP کو سپورٹ کرتا ہے۔ تمام فارمیٹس سسٹم فریم ورک (ImageIO, CoreGraphics) کے ذریعے ڈی کوڈ کیے جاتے ہیں۔ GIF کو ترقی پسند لوڈنگ اور اینیمیشن کے ساتھ CGImageSource کے ذریعے سپورٹ کیا جاتا ہے۔

SDWebImage کے مقابلہ میں Kingfisher کا کیا فائدہ ہے؟

Kingfisher خالص Swift میں لکھی گئی ہے اور async/await، Combine اور Sendable کو مکمل طور پر سپورٹ کرتی ہے۔ یہ ایک ٹائپ سیف Result API اور پروٹوکول کے ذریعے ماڈیولر فن تعمیر فراہم کرتی ہے، جو اجزاء کی تبدیلی اور جانچ کو آسان بناتا ہے۔

Kingfisher کیش کیسے صاف کریں؟

Memory Cache صاف کرنے کے لیے، KingfisherManager.shared.cache.clearMemoryCache() کو کال کریں۔ Disk Cache کے لیے، clearDiskCache() استعمال کریں۔ صرف میعاد ختم شدہ فائلوں کو ہٹانے کے لیے — cleanExpiredDiskCache()۔ کیش کا سائز cache.calculateDiskStorageSize() کے ذریعے چیک کیا جا سکتا ہے۔

خلاصہ

  • Kingfisher تمام متعلقہ Apple ٹیکنالوجیز کی حمایت کے ساتھ خالص Swift میں ایک جدید تصویری لوڈنگ لائبریری ہے۔
  • دو سطحی کیش (Memory + Disk) قابل ترتیب حدود اور TTL کے ساتھ تیز رسائی اور کم سے کم ڈیٹا کے استعمال کو یقینی بناتا ہے۔
  • Async/Await اور Combine کال بیک اور ڈیلیگیٹ کے بغیر کسی بھی فن تعمیر میں لوڈنگ کو شامل کرنے کی اجازت دیتے ہیں۔
  • KFImage for SwiftUI پلیس ہولڈر، خرابی اور کسٹم ٹرانزیشن اثرات کے ساتھ ایک اعلانیہ API فراہم کرتا ہے۔
  • ImageProcessor |> آپریٹر کے ذریعے ترکیب کے ساتھ تبدیلی کی زنجیریں بنانے میں لچک فراہم کرتا ہے۔
  • ٹائپ سیفٹی Result نتائج کی پروسیسنگ کے دوران رن ٹائم کی غلطیوں کو ختم کرتی ہے۔
  • ماڈیولر فن تعمیر پروٹوکول کے ذریعے جانچ اور تخصیص کے لیے Manager، Cache اور Downloader کو تبدیل کرنے کی اجازت دیتا ہے۔

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

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

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

مزید پڑھیں