このプロジェクトについて

Kingfisherは、Webから画像をダウンロードしてキャッシュするための強力な純粋Swiftライブラリです。次のアプリでリモート画像を扱うための純粋Swiftの方法を提供します。 ## 機能 - 非同期の画像ダウンロードとキャッシュ。 - URLSessionベースのネットワークまたはローカルで提供されたデータから画像を読み込み。 - 便利な画像プロセッサとフィルタを提供。 - メモリとディスクの両方に対応した多層ハイブリッドキャッシュ。 - 有効期限とサイズ制限をカスタマイズできる、キャッシュ動作の細かな制御。 - KingfisherManagerでのオプトインの非同期キャッシュプロービングにより、ディスクキャッシュ確認で呼び出し元スレッドをブロックしない。 - キャンセル可能なダウンロードと、以前にダウンロードしたコンテンツの自動再利用によるパフォーマンス向上。 - 独立したコンポーネント: ダウンローダー、キャッシュシステム、画像プロセッサを必要に応じて個別に使用可能。 - 画像のプリフェッチとキャッシュからの表示により、アプリを高速化。 - UIImageView、NSImageView、NSButton、UIButton、NSTextAttachment、WKInterfaceImage、TVMonogramView、CPListItemの拡張により、URLから直接画像を設定可能。 - 画像設定時の組み込みトランジションアニメーション。 - 画像読み込み中のカスタマイズ可能なプレースホルダとインジケータ。 - 拡張可能な画像処理と画像フォーマット。 - 低データモードのサポート。 - SwiftUIのサポート。 - Swift 6およびSwift Concurrency(厳格モード)に対応。 - Live Photoの読み込みとキャッシュ。 ## Kingfisher 101 最も単純なユースケースは、UIImageView拡張を使って画像ビューに画像を設定することです: ```swift import Kingfisher let url = URL(string: "https://example.com/image.png") imageView.kf.setImage(with: url) ``` Kingfisherはurlから画像をダウンロードし、メモリキャッシュとディスクキャッシュの両方に送り、imageViewに表示します。後で同じURLで設定すると、画像はキャッシュから取得されてすぐに表示されます。 SwiftUIを使う場合も動作します: ```swift var body: some View { KFImage(URL(string: "https://example.com/image.png")!) } ``` ## より高度な例 強力なオプションを使えば、Kingfisherで難しいタスクを簡単な方法で実行できます。たとえば、以下のコードは: 1. 高解像度画像をダウンロードします。 2. 画像ビューのサイズに合わせてダウンサンプリングします。 3. 指定した半径で角を丸くします。 4. ダウンロード中にシステムインジケータとプレースホルダ画像を表示します。 5. 準備ができると、小さなサムネイル画像を「フェードイン」効果でアニメーション表示します。 6. 元の大きな画像も後で使えるようにディスクにキャッシュされ、詳細ビューで再度ダウンロードする必要がなくなります。 7. タスクが成功または失敗で終了すると、コンソールログが出力されます。 ```swift let url = URL(string: "https://example.com/high_resolution_image.png") let processor = DownsamplingImageProcessor(size: imageView.bounds.size) |> RoundCornerImageProcessor(cornerRadius: 20) imageView.kf.indicatorType = .activity imageView.kf.setImage( with: url, placeholder: UIImage(named: "placeholderImage"), options: [ .processor(processor), .scaleFactor(UIScreen.main.scale), .transition(.fade(1)), .cacheOriginalImage ]) { result in switch result { case .success(let value): print("Task done for: \(value.source.url?.absoluteString ?? "")") case .failure(let error): print("Job failed: \(error.localizedDescription)") } } ``` これは私の日常業務でよく遭遇する状況です。Kingfisherなしで何行書く必要があるか考えてみてください! ## メソッドチェーン kf拡張が好みでない場合は、KFビルダーを使ってメソッド呼び出しをチェーンすることもできます。以下のコードは同じことを行います: ```swift // Use `kf` extension imageView.kf.setImage( with: url, placeholder: placeholderImage, options: [ .processor(processor), .loadDiskFileSynchronously, .cacheOriginalImage, .transition(.fade(0.25)), .lowDataMode(.network(lowResolutionURL)) ], progressBlock: { receivedSize, totalSize in // Progress updated }, completionHandler: { result in // Done } ) // Use `KF` builder KF.url(url) .placeholder(placeholderImage) .setProcessor(processor) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(duration: 0.25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { receivedSize, totalSize in } .onSuccess { result in } .onFailure { error in } .set(to: imageView) ``` さらに良いことに、後でSwiftUIに切り替えたい場合は、上記のKFをKFImageに変更するだけで完了です: ```swift struct ContentView: View { var body: some View { KFImage.url(url) .placeholder(placeholderImage) .setProcessor(processor) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(duration: 0.25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { receivedSize, totalSize in } .onSuccess { result in } .onFailure { error in } } } ``` ## 要件 ### 現在の開発ブランチ - iOS 15.0+ / macOS 12.0+ / tvOS 15.0+ / watchOS 9.0+ / visionOS 1.0+ - Xcode 26.0+ / Swift 6.2+コンパイラ ### Kingfisher 8.0 - (UIKit/AppKit) iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 6.0+ / visionOS 1.0+ - (SwiftUI) iOS 14.0+ / macOS 11.0+ / tvOS 14.0+ / watchOS 7.0+ / visionOS 1.0+ - Swift 5.9+ ### Kingfisher 7.0 - (UIKit/AppKit) iOS 12.0+ / macOS 10.14+ / tvOS 12.0+ / watchOS 5.0+ / visionOS 1.0+ - (SwiftUI) iOS 14.0+ / macOS 11.0+ / tvOS 14.0+ / watchOS 7.0+ / visionOS 1.0+ - Swift 5.0+ ## インストール フレームワークをインストールして使用するには、以下のチュートリアルのいずれかを参照してください: - [UIKit Tutorial](https://swiftpackageindex.com/onevcat/kingfisher/master/tutorials/kingfisher/gettingstarteduikit) - [SwiftUI Tutorial](https://swiftpackageindex.com/onevcat/kingfisher/master/tutorials/kingfisher/gettingstartedswiftui) または、以下のいずれかの方法に従うこともできます。 ### Swift Package Manager - File > Swift Packages > Add Package Dependency - `https://github.com/onevcat/Kingfisher.git`を追加 - 「Up to Next Major」で「8.0.0」を選択 ### CocoaPods ```ruby source 'https://github.com/CocoaPods/Specs.git' platform :ios, '13.0' use_frameworks! target 'MyApp' do pod 'Kingfisher', '~> 8.0' end ``` ### ビルド済みフレームワーク 1. リリースページを開き、assetsセクションから最新バージョンのKingfisherをダウンロードします。 2. `Kingfisher.xcframework`をプロジェクトにドラッグし、ターゲット(通常はアプリターゲット)に追加します。 3. ターゲットを選択し、「General」タブで「Frameworks, Libraries, and Embedded Content」セクションを見つけ、Kingfisherに対して`Embed Without Signing`を設定します。 ## ドキュメント ドキュメントとチュートリアルを確認してください: - [Documentation Home](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher) - [Getting Started](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/gettingstarted) - [UIKit Tutorial](https://swiftpackageindex.com/onevcat/kingfisher/master/tutorials/kingfisher/gettingstarteduikit) - [SwiftUI Tutorial](https://swiftpackageindex.com/onevcat/kingfisher/master/tutorials/kingfisher/gettingstartedswiftui) - [Common Tasks - General](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/commontasks) - [Common Tasks - Cache](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/commontasks_cache) - [Common Tasks - Downloader](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/commontasks_downloader) - [Common tasks - Processor](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/commontasks_processor) ### 移行 - [Kingfisher 8.0 Migration](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/migration-to-8) - [Kingfisher 7.0 Migration](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-7.0-Migration-Guide) さらに古いバージョンを使用している場合は、以下のガイドを参照して移行手順を確認してください。 ## その他 ### Kingfisherの今後 Kingfisherは軽量であり続けたいと考えています。このフレームワークは、画像のダウンロードとキャッシュのためのシンプルなソリューションを提供することに焦点を当てています。これはフレームワークを改善できないという意味ではありません。Kingfisherは完璧には程遠いため、より良くするために必要で有用な更新が行われます。 ### 開発とテスト 貢献やプルリクエストは大歓迎です。ただし、機能を実装したり不確実な問題を修正しようとする前に、まずディスカッションを開くことをお勧めします。プルリクエストがすべてのテストをグリーンでビルドできるとありがたいです。:) ### ロゴについて Kingfisherのロゴは、中国の七つの平らな図形からなる分割パズル、Tangram(七巧板)にインスパイアされています。彼女はswiftではなくkingfisherの鳥だと思いますが、誰かは彼女が鳩だと主張します。そろそろ彼女に名前を付けるべきでしょう。皆さん、何か提案はありますか? ### 連絡先 Twitterまたは新浪微博でフォローして連絡してください。問題を見つけたらチケットを開いてください。プルリクエストも大歓迎です。 ## 支援者とスポンサー オープンソースプロジェクトは、あなたの助けなしでは長く存続できません。Kingfisherが役に立つと思ったら、スポンサーになってこのプロジェクトを支援することを検討してください。あなたのユーザーアイコンまたは会社のロゴが、ホームページへのリンクとともに私のブログに表示されます。 GitHub Sponsorsを通じてスポンサーになってください。:heart: imglyとemergetoolsに特別な感謝を捧げます。 ### ライセンス KingfisherはMITライセンスの下でリリースされています。詳細はLICENSEを参照してください。