gitextract_n_piy7rv/ ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE.md │ └── workflows/ │ ├── build.yaml │ └── test.yaml ├── .gitignore ├── .ruby-version ├── .spi.yml ├── AGENTS.md ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Demo/ │ ├── Demo/ │ │ ├── Kingfisher-Demo/ │ │ │ ├── AppDelegate.swift │ │ │ ├── Base.lproj/ │ │ │ │ └── Main.storyboard │ │ │ ├── Extensions/ │ │ │ │ └── UIViewController+KingfisherOperation.swift │ │ │ ├── Images.xcassets/ │ │ │ │ └── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ ├── Info.plist │ │ │ ├── LaunchScreen.storyboard │ │ │ ├── Resources/ │ │ │ │ └── ImageLoader.swift │ │ │ ├── SwiftUIViews/ │ │ │ │ ├── AnimatedImageDemo.swift │ │ │ │ ├── GeometryReaderDemo.swift │ │ │ │ ├── GridDemo.swift │ │ │ │ ├── LazyVStackDemo.swift │ │ │ │ ├── ListDemo.swift │ │ │ │ ├── LoadTransitionDemo.swift │ │ │ │ ├── LoadingFailureDemo.swift │ │ │ │ ├── MainView.swift │ │ │ │ ├── PhotosPickerDemo.swift │ │ │ │ ├── ProgressiveJPEGDemo.swift │ │ │ │ ├── Regression/ │ │ │ │ │ ├── Issue1998View.swift │ │ │ │ │ ├── Issue2035View.swift │ │ │ │ │ ├── Issue2295View.swift │ │ │ │ │ └── Issue2352View.swift │ │ │ │ ├── SingleViewDemo.swift │ │ │ │ ├── SizingAnimationDemo.swift │ │ │ │ └── TransitionViewDemo.swift │ │ │ └── ViewControllers/ │ │ │ ├── AVAssetImageGeneratorViewController.swift │ │ │ ├── AutoSizingTableViewController.swift │ │ │ ├── DetailImageViewController.swift │ │ │ ├── GIFHeavyViewController.swift │ │ │ ├── GIFViewController.swift │ │ │ ├── HighResolutionCollectionViewController.swift │ │ │ ├── ImageCollectionViewCell.swift │ │ │ ├── ImageDataProviderCollectionViewController.swift │ │ │ ├── IndicatorCollectionViewController.swift │ │ │ ├── InfinityCollectionViewController.swift │ │ │ ├── LivePhotoViewController.swift │ │ │ ├── MainViewController.swift │ │ │ ├── NetworkMetricsViewController.swift │ │ │ ├── NormalLoadingViewController.swift │ │ │ ├── OrientationImagesViewController.swift │ │ │ ├── PHPickerResultViewController.swift │ │ │ ├── ProcessorCollectionViewController.swift │ │ │ ├── ProgressiveJPEGViewController.swift │ │ │ ├── SwiftUIViewController.swift │ │ │ ├── TextAttachmentViewController.swift │ │ │ └── TransitionViewController.swift │ │ ├── Kingfisher-macOS-Demo/ │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets/ │ │ │ │ └── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj/ │ │ │ │ └── Main.storyboard │ │ │ ├── Cell.xib │ │ │ ├── GIFHeavyViewController.swift │ │ │ ├── Info.plist │ │ │ ├── SwiftUIViewController.swift │ │ │ └── ViewController.swift │ │ ├── Kingfisher-tvOS-Demo/ │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets/ │ │ │ │ ├── App Icon & Top Shelf Image.brandassets/ │ │ │ │ │ ├── App Icon - Large.imagestack/ │ │ │ │ │ │ ├── Back.imagestacklayer/ │ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ ├── Front.imagestacklayer/ │ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Middle.imagestacklayer/ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── App Icon - Small.imagestack/ │ │ │ │ │ │ ├── Back.imagestacklayer/ │ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ ├── Front.imagestacklayer/ │ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Middle.imagestacklayer/ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Top Shelf Image.imageset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ └── LaunchImage.launchimage/ │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj/ │ │ │ │ └── Main.storyboard │ │ │ └── Info.plist │ │ ├── Kingfisher-watchOS-Demo/ │ │ │ ├── Assets.xcassets/ │ │ │ │ └── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj/ │ │ │ │ └── Interface.storyboard │ │ │ └── Info.plist │ │ └── Kingfisher-watchOS-Demo Extension/ │ │ ├── Assets.xcassets/ │ │ │ └── README__ignoredByTemplate__ │ │ ├── ExtensionDelegate.swift │ │ ├── Info.plist │ │ └── InterfaceController.swift │ ├── Kingfisher-Demo.entitlements │ └── Kingfisher-Demo.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata/ │ └── xcschemes/ │ └── Kingfisher-Demo.xcscheme ├── Gemfile ├── Kingfisher.json ├── Kingfisher.podspec ├── Kingfisher.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata/ │ ├── xcbaselines/ │ │ └── D1ED2D3E1AD2D09F00CFC3EB.xcbaseline/ │ │ ├── 74237B0B-7981-4A24-B6C4-95F4A5E7727F.plist │ │ └── Info.plist │ └── xcschemes/ │ └── Kingfisher.xcscheme ├── Kingfisher.xcworkspace/ │ ├── contents.xcworkspacedata │ └── xcshareddata/ │ ├── IDETemplateMacros.plist │ ├── IDEWorkspaceChecks.plist │ ├── Kingfisher.xcscmblueprint │ └── WorkspaceSettings.xcsettings ├── LICENSE ├── Package.swift ├── Package@swift-5.9.swift ├── README-LLM.md ├── README.md ├── Sources/ │ ├── Cache/ │ │ ├── CacheSerializer.swift │ │ ├── DiskStorage.swift │ │ ├── FormatIndicatedCacheSerializer.swift │ │ ├── ImageCache.swift │ │ ├── MemoryStorage.swift │ │ └── Storage.swift │ ├── Documentation.docc/ │ │ ├── CommonTasks/ │ │ │ ├── CommonTasks.md │ │ │ ├── CommonTasks_Cache.md │ │ │ ├── CommonTasks_Downloader.md │ │ │ ├── CommonTasks_Processor.md │ │ │ └── CommonTasks_Serializer.md │ │ ├── Documentation.md │ │ ├── GettingStarted.md │ │ ├── MigrationGuide/ │ │ │ ├── Migration-To-6.md │ │ │ ├── Migration-To-7.md │ │ │ └── Migration-To-8.md │ │ ├── MigrationGuide.md │ │ ├── Resources/ │ │ │ └── code-files/ │ │ │ ├── 01-SampleCell-1.swift │ │ │ ├── 01-SampleCell-2.swift │ │ │ ├── 01-SampleCell-3.swift │ │ │ ├── 01-ViewController-1.swift │ │ │ ├── 01-ViewController-10.swift │ │ │ ├── 01-ViewController-11.swift │ │ │ ├── 01-ViewController-12.swift │ │ │ ├── 01-ViewController-13.swift │ │ │ ├── 01-ViewController-2.swift │ │ │ ├── 01-ViewController-3.swift │ │ │ ├── 01-ViewController-4.swift │ │ │ ├── 01-ViewController-5.swift │ │ │ ├── 01-ViewController-6-0.swift │ │ │ ├── 01-ViewController-6.swift │ │ │ ├── 01-ViewController-7.swift │ │ │ ├── 01-ViewController-8.swift │ │ │ ├── 01-ViewController-9.swift │ │ │ ├── 02-ContentView-1.swift │ │ │ ├── 02-ContentView-10.swift │ │ │ ├── 02-ContentView-11.swift │ │ │ ├── 02-ContentView-2.swift │ │ │ ├── 02-ContentView-3.swift │ │ │ ├── 02-ContentView-4.swift │ │ │ ├── 02-ContentView-5.swift │ │ │ ├── 02-ContentView-6.swift │ │ │ ├── 02-ContentView-7.swift │ │ │ ├── 02-ContentView-8.swift │ │ │ └── 02-ContentView-9.swift │ │ ├── Topics/ │ │ │ ├── Topic_ImageDataProvider.md │ │ │ ├── Topic_Indicator.md │ │ │ ├── Topic_LivePhoto.md │ │ │ ├── Topic_LowDataMode.md │ │ │ ├── Topic_PerformanceTips.md │ │ │ ├── Topic_Prefetch.md │ │ │ └── Topic_Retry.md │ │ └── Tutorials/ │ │ ├── GettingStartedSwiftUI.tutorial │ │ ├── GettingStartedUIKit.tutorial │ │ └── Tutorials.tutorial │ ├── Extensions/ │ │ ├── CPListItem+Kingfisher.swift │ │ ├── HasImageComponent+Kingfisher.swift │ │ ├── ImageView+Kingfisher.swift │ │ ├── NSButton+Kingfisher.swift │ │ ├── NSTextAttachment+Kingfisher.swift │ │ ├── PHLivePhotoView+Kingfisher.swift │ │ └── UIButton+Kingfisher.swift │ ├── General/ │ │ ├── ImageSource/ │ │ │ ├── AVAssetImageDataProvider.swift │ │ │ ├── ImageDataProvider.swift │ │ │ ├── LivePhotoSource.swift │ │ │ ├── PHPickerResultImageDataProvider.swift │ │ │ ├── PhotosPickerItemImageDataProvider.swift │ │ │ ├── Resource.swift │ │ │ └── Source.swift │ │ ├── KF.swift │ │ ├── KFOptionsSetter.swift │ │ ├── Kingfisher.swift │ │ ├── KingfisherError.swift │ │ ├── KingfisherManager+LivePhoto.swift │ │ ├── KingfisherManager.swift │ │ └── KingfisherOptionsInfo.swift │ ├── Image/ │ │ ├── Filter.swift │ │ ├── GIFAnimatedImage.swift │ │ ├── GraphicsContext.swift │ │ ├── Image.swift │ │ ├── ImageDrawing.swift │ │ ├── ImageFormat.swift │ │ ├── ImageProcessor.swift │ │ ├── ImageProgressive.swift │ │ ├── ImageTransition.swift │ │ └── Placeholder.swift │ ├── Info.plist │ ├── Networking/ │ │ ├── AuthenticationChallengeResponsable.swift │ │ ├── ImageDataProcessor.swift │ │ ├── ImageDownloader+LivePhoto.swift │ │ ├── ImageDownloader.swift │ │ ├── ImageDownloaderDelegate.swift │ │ ├── ImageModifier.swift │ │ ├── ImagePrefetcher.swift │ │ ├── NetworkMetrics.swift │ │ ├── NetworkMonitor.swift │ │ ├── RedirectHandler.swift │ │ ├── RequestModifier.swift │ │ ├── RetryStrategy.swift │ │ ├── SessionDataTask.swift │ │ └── SessionDelegate.swift │ ├── PrivacyInfo.xcprivacy │ ├── SwiftUI/ │ │ ├── ImageBinder.swift │ │ ├── ImageContext.swift │ │ ├── KFAnimatedImage.swift │ │ ├── KFImage.swift │ │ ├── KFImageOptions.swift │ │ ├── KFImageProtocol.swift │ │ └── KFImageRenderer.swift │ ├── Utility/ │ │ ├── Box.swift │ │ ├── CallbackQueue.swift │ │ ├── Delegate.swift │ │ ├── DisplayLink.swift │ │ ├── ExtensionHelpers.swift │ │ ├── Result.swift │ │ ├── Runtime.swift │ │ ├── SizeExtensions.swift │ │ └── String+SHA256.swift │ └── Views/ │ ├── AnimatedImageView.swift │ └── Indicator.swift ├── Tests/ │ ├── Dependency/ │ │ └── Nocilla/ │ │ ├── LICENSE │ │ ├── Nocilla/ │ │ │ ├── Categories/ │ │ │ │ ├── NSData+Nocilla.h │ │ │ │ ├── NSData+Nocilla.m │ │ │ │ ├── NSString+Nocilla.h │ │ │ │ └── NSString+Nocilla.m │ │ │ ├── DSL/ │ │ │ │ ├── LSHTTPRequestDSLRepresentation.h │ │ │ │ ├── LSHTTPRequestDSLRepresentation.m │ │ │ │ ├── LSStubRequestDSL.h │ │ │ │ ├── LSStubRequestDSL.m │ │ │ │ ├── LSStubResponseDSL.h │ │ │ │ └── LSStubResponseDSL.m │ │ │ ├── Diff/ │ │ │ │ ├── LSHTTPRequestDiff.h │ │ │ │ └── LSHTTPRequestDiff.m │ │ │ ├── Hooks/ │ │ │ │ ├── ASIHTTPRequest/ │ │ │ │ │ ├── ASIHTTPRequestStub.h │ │ │ │ │ ├── ASIHTTPRequestStub.m │ │ │ │ │ ├── LSASIHTTPRequestAdapter.h │ │ │ │ │ ├── LSASIHTTPRequestAdapter.m │ │ │ │ │ ├── LSASIHTTPRequestHook.h │ │ │ │ │ └── LSASIHTTPRequestHook.m │ │ │ │ ├── LSHTTPClientHook.h │ │ │ │ ├── LSHTTPClientHook.m │ │ │ │ ├── NSURLRequest/ │ │ │ │ │ ├── LSHTTPStubURLProtocol.h │ │ │ │ │ ├── LSHTTPStubURLProtocol.m │ │ │ │ │ ├── LSNSURLHook.h │ │ │ │ │ ├── LSNSURLHook.m │ │ │ │ │ ├── NSURLRequest+DSL.h │ │ │ │ │ ├── NSURLRequest+DSL.m │ │ │ │ │ ├── NSURLRequest+LSHTTPRequest.h │ │ │ │ │ └── NSURLRequest+LSHTTPRequest.m │ │ │ │ └── NSURLSession/ │ │ │ │ ├── LSNSURLSessionHook.h │ │ │ │ └── LSNSURLSessionHook.m │ │ │ ├── LSNocilla.h │ │ │ ├── LSNocilla.m │ │ │ ├── Matchers/ │ │ │ │ ├── LSDataMatcher.h │ │ │ │ ├── LSDataMatcher.m │ │ │ │ ├── LSMatcheable.h │ │ │ │ ├── LSMatcher.h │ │ │ │ ├── LSMatcher.m │ │ │ │ ├── LSRegexMatcher.h │ │ │ │ ├── LSRegexMatcher.m │ │ │ │ ├── LSStringMatcher.h │ │ │ │ ├── LSStringMatcher.m │ │ │ │ ├── NSData+Matcheable.h │ │ │ │ ├── NSData+Matcheable.m │ │ │ │ ├── NSRegularExpression+Matcheable.h │ │ │ │ ├── NSRegularExpression+Matcheable.m │ │ │ │ ├── NSString+Matcheable.h │ │ │ │ └── NSString+Matcheable.m │ │ │ ├── Model/ │ │ │ │ ├── LSHTTPBody.h │ │ │ │ ├── LSHTTPRequest.h │ │ │ │ └── LSHTTPResponse.h │ │ │ ├── Nocilla.h │ │ │ └── Stubs/ │ │ │ ├── LSStubRequest.h │ │ │ ├── LSStubRequest.m │ │ │ ├── LSStubResponse.h │ │ │ └── LSStubResponse.m │ │ └── README.md │ └── KingfisherTests/ │ ├── DataReceivingSideEffectTests.swift │ ├── DiskStorageTests.swift │ ├── ImageCacheTests.swift │ ├── ImageDataProviderTests.swift │ ├── ImageDownloaderTests.swift │ ├── ImageDrawingTests.swift │ ├── ImageExtensionTests.swift │ ├── ImageModifierTests.swift │ ├── ImagePrefetcherTests.swift │ ├── ImageProcessorTests.swift │ ├── ImageViewExtensionTests.swift │ ├── Info.plist │ ├── KingfisherManagerTests.swift │ ├── KingfisherOptionsInfoTests.swift │ ├── KingfisherTestHelper.swift │ ├── KingfisherTests-Bridging-Header.h │ ├── LivePhotoSourceTests.swift │ ├── MemoryStorageTests.swift │ ├── NSButtonExtensionTests.swift │ ├── PixelFormatDecodingTests.swift │ ├── PixelFormats/ │ │ ├── gradient-10b-displayp3-alpha.heic │ │ ├── gradient-10b-srgb-alpha.heic │ │ └── gradient-10b-srgb-opaque.heic │ ├── RetryStrategyTests.swift │ ├── StorageExpirationTests.swift │ ├── StringExtensionTests.swift │ ├── UIButtonExtensionTests.swift │ └── Utils/ │ └── StubHelpers.swift ├── docs/ │ ├── architecture.md │ ├── build-system.md │ ├── deployment.md │ ├── development.md │ ├── files.md │ ├── project-overview.md │ └── testing.md └── fastlane/ ├── Fastfile └── actions/ ├── extract_current_change_log.rb ├── git_commit_all.rb ├── sync_build_number_to_git.rb └── update_change_log.rb