{"owner":"onevcat","repo":"Kingfisher","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"files":{"AGENTS.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Documentation\n\nYou can find the complete documentation for this project in the `docs/` directory. It describes the architecture, build system, development practices and more in detail the the project.\n\nThere is also a minimal, LLM-friendly version of the documentation in `README-LLM.md`. You can refer to the file if you need a quick overview of the project without going through the entire documentation.\n\n## Build and Development Commands\n\n### Primary Build System\nThis project uses **Fastlane** for primary build automation. Key commands:\n\n```bash\n# Install dependencies\nbundle install\n\n# Run all tests across platforms (iOS, macOS, tvOS, watchOS)\nbundle exec fastlane tests\n\n# Run specific platform tests\nbundle exec fastlane test destination:\"platform=iOS Simulator,name=iPhone 16\"\n\n# Build for specific platform\nbundle exec fastlane build destination:\"platform=iOS Simulator,name=iPhone 16\"\n\n# Lint CocoaPods spec and Swift Package Manager\nbundle exec fastlane lint\n```\n\n### Release Process\n```bash\n# Full release workflow (tests, linting, versioning, GitHub release, CocoaPods push)\nbundle exec fastlane release version:X.X.X\n```\n\n## Architecture Overview\n\n@docs/architecture.md\n\nKingfisher is a modular image loading and caching library with clear separation of concerns:\n\n### Core Components Flow\n1. **KingfisherManager** (`Sources/General/KingfisherManager.swift`) - Central coordinator\n2. **ImageDownloader** (`Sources/Networking/ImageDownloader.swift`) - Network layer\n3. **ImageCache** (`Sources/Cache/ImageCache.swift`) - Dual-layer caching (memory + disk)\n4. **ImageProcessor** (`Sources/Image/ImageProcessor.swift`) - Image transformation pipeline\n\n### Key Architectural Patterns\n- **Protocol-oriented design** with `KingfisherCompatible` protocol\n- **Namespace wrapper pattern** - All functionality accessed via `.kf` property\n- **Builder pattern** - `KF.url()...` method chaining\n- **Options pattern** - `KingfisherOptionsInfo` for configuration\n\n### Module Structure\n```\nSources/\n├── General/           # Core managers, options, data providers\n├── Networking/        # Download, prefetch, session management  \n├── Cache/            # Multi-layer caching system\n├── Image/            # Processing, filters, formats, transitions\n├── Extensions/       # UIKit/AppKit/SwiftUI integration\n├── SwiftUI/         # SwiftUI-specific components\n├── Utility/         # Helper utilities and extensions\n└── Views/           # Custom UI components\n```\n\n### Integration Points\n- **UIKit**: Extensions for `UIImageView`, `UIButton` via `.kf` namespace\n- **SwiftUI**: `KFImage` and `KFAnimatedImage` components\n- **Cross-platform**: Extensive conditional compilation for iOS/macOS/tvOS/watchOS/visionOS\n\n## Platform Support\n- **UIKit/AppKit**: iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 6.0+ / visionOS 1.0+\n- **SwiftUI**: iOS 14.0+ / macOS 11.0+ / tvOS 14.0+ / watchOS 7.0+ / visionOS 1.0+\n- **Swift**: 5.9+ (with Swift 6 strict concurrency support)\n\n## Testing\n\n### Test Structure\n- **Location**: `Tests/KingfisherTests/`\n- **Framework**: XCTest with custom `KingfisherTestHelper`\n- **Network mocking**: Uses Nocilla dependency for HTTP stubbing\n- **Test assets**: `dancing-banana.gif`, `single-frame.gif`\n\n### Running Tests\n```bash\n# All platforms (preferred)\nbundle exec fastlane tests\n\n# Single platform via destination\nbundle exec fastlane test destination:\"platform=iOS Simulator,name=iPhone 15\"\n```\n\n## Documentation System\n\nProvides a DocC-based documentation for framework users:\n\n- **DocC integration** with comprehensive tutorials and API docs\n- **Location**: `Sources/Documentation.docc/`\n- **Online**: Swift Package Index hosted documentation\n- **Tutorials**: Both UIKit and SwiftUI getting started guides available"}}