このプロジェクトについて
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を参照してください。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.