SwiftUI (iOS) 向けの、より高速でスマートな AsyncImage。メモリ・ディスクキャッシュ、キャンセル、Swift 6 の並行処理を内蔵しています。
🌍 言語 · English · Español · Português (Brasil) · 日本語 · 简体中文 · 한국어 · Русский
- Observable なビューモデルを備えた SwiftUI 対応 API
- スマートなフェーズ管理:
empty、loading、success(Image)、failure(Error) - プラグイン可能な実装を持つメモリキャッシュプロトコル
- アプリの再起動をまたぐディスクキャッシュ
- Swift Concurrency (
async/await) による協調的キャンセル - MainActor で安全な状態更新
💬 ディスカッションに参加しましょう。フィードバックや質問を歓迎します
- iOS 17+
- Swift 6.1+
- Swift Package Manager
- Xcode でプロジェクトを開く
- File → Add Packages... に移動
- リポジトリ URL を入力:
https://github.com/gentle-giraffe-apps/SmartAsyncImage.git - バージョンルールを選択(開発中は
mainでも可) - SmartAsyncImage プロダクトをアプリターゲットに追加
dependencies: [
.package(url: "https://github.com/gentle-giraffe-apps/SmartAsyncImage.git", from: "0.1.2")
]次に、ターゲットの dependencies に "SmartAsyncImage" を追加します。
ローカルパッケージ参照を使用した SwiftUI デモアプリがこのリポジトリに含まれています。
パス:
Demo/SmartAsyncImageDemo/SmartAsyncImageDemo.xcodeproj
- リポジトリをクローン:
git clone https://github.com/gentle-giraffe-apps/SmartAsyncImage.git
- デモプロジェクトを開く:
Demo/SmartAsyncImageDemo/SmartAsyncImageDemo.xcodeproj - iOS 17+ のシミュレーターを選択
- ビルドして実行 (⌘R)
プロジェクトは SmartAsyncImage へのローカル Swift Package 参照で事前設定されており、追加の設定なしで実行できます。
import SwiftUI
import SmartAsyncImage
struct MinimalRemoteImageView: View {
let imageURL = URL(string: "https://picsum.photos/300")
var body: some View {
// 置き換え前: AsyncImage(url: imageURL) { phase in
// ------------------------------------------------
// 置き換え後:
SmartAsyncImage(url: imageURL) { phase in
// ------------------------------------------------
switch phase {
case .empty, .loading:
ProgressView()
case .success(let image):
image.resizable().scaledToFit()
case .failure:
Image(systemName: "photo")
}
}
.frame(width: 150, height: 150)
}
}このプロジェクトは CI と静的解析によって品質ゲートを適用しています:
- CI:
mainへのすべてのコミットは GitHub Actions のチェックを通過する必要があります - 静的解析: DeepSource が
mainへのすべてのコミットで実行されます。 バッジは現在の未解決の静的解析問題の数を示しています。 - テストカバレッジ: Codecov が
mainブランチのラインカバレッジをレポートします
これらのチェックは、設計システムが安全に進化し続けられるようにすることを目的としています。
flowchart TD
SAI["SmartAsyncImage<br/>(SwiftUI View)"] --> VM["SmartAsyncImage<br/>ViewModel"]
VM --> Phase["SmartAsyncImage<br/>Phase"]
VM --> MemProto["SmartAsyncImageMemory<br/>CacheProtocol"]
MemProto --> Mem["SmartAsyncImage<br/>MemoryCache<br/>(actor)"]
Mem --> Disk["SmartAsyncImage<br/>DiskCache"]
Disk --> Encoder["SmartAsyncImage<br/>Encoder"]
Mem --> URLSession[["URLSession"]]
このリポジトリの草稿作成および編集の一部は、大規模言語モデル (ChatGPT、Claude、Gemini を含む) を使用して加速されましたが、人間による直接的な設計、検証、最終承認のもとで行われています。すべての技術的決定、コード、アーキテクチャ上の結論は、リポジトリメンテナーによって作成・検証されています。
MIT ライセンス 個人利用・商用利用ともに自由です。
Jonathan Ritchey により構築 Gentle Giraffe Apps シニア iOS エンジニア --- Swift | SwiftUI | Concurrency