Technical Challenge: This project is a technical challenge designed to validate code quality, architectural patterns, and best practices in iOS development.
iOS application built with Swift 6, SwiftUI, Clean Architecture, and SOLID principles. Designed with best practices to ensure code that is scalable, readable, and testable.
| Home | About | Character List | Filters | Character Detail | Character Episodes |
|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| Tool | Version |
|---|---|
| Xcode | 26+ |
| iOS | 17.0+ |
| Swift | 6.2 |
| macOS | Sequoia 15.6+ |
Run the setup script to install all required tools:
./setup.shGenerate the Xcode project and install dependencies:
./generate.shThe project follows MVVM + Clean Architecture with feature-based modularization. See Architecture Documentation for details.
| Setting | Value |
|---|---|
SWIFT_DEFAULT_ACTOR_ISOLATION |
MainActor (project default) |
SWIFT_APPROACHABLE_CONCURRENCY |
YES |
All types are MainActor-isolated by default. Types that must run off the main thread opt out with nonisolated.
Exception: ChallengeNetworking overrides the default to nonisolated at the target level — all networking types are nonisolated by default. See ChallengeNetworking README for details.
See Project Structure Documentation for directory layout and dependency graph.
Shared infrastructure modules, agnostic to business logic:
| Module | Description |
|---|---|
| ChallengeCore | Navigation, routing, deep linking, image loading, tracking |
| ChallengeNetworking | HTTP client abstraction over URLSession |
| ChallengeDesignSystem | Atomic Design UI components and design tokens |
| ChallengeResources | Localization and shared assets |
| ChallengeSnapshotTestKit | Snapshot testing framework (test-only) |
Self-contained modules with Presentation, Domain, and Data layers:
| Module | Description |
|---|---|
| ChallengeCharacter | Character list and detail screens (Rick & Morty API) |
| ChallengeEpisode | Character episodes screen (Rick & Morty GraphQL API) |
| ChallengeHome | Home screen with animated logo |
| ChallengeSystem | System settings and configuration |
| Module | Description |
|---|---|
| ChallengeAppKit | Dependency injection, root navigation, feature wiring |
Uses Swift Testing for unit tests, ChallengeSnapshotTestKit for visual regression, and XCTest for UI tests. The project uses a three-level parallelization strategy: intra-target parallelism via Swift Testing (.swiftTestingOnly), CI-level parallelism with separate GitHub Actions jobs for unit+snapshot and UI tests, while inter-target parallelism remains disabled (benchmarked ~49% slower at current volume). The project achieves 100% code coverage. See Testing Documentation for details.
The project uses GitHub Actions to run quality checks on every pull request. See CI Documentation for details.
| Test Failure | Periphery |
|---|---|
![]() |
![]() |
The app uses a 3-tier tracking architecture with screen-specific contracts, implementations, and events for type-safe event tracking. See Tracking Documentation for architecture details and Create Tracker for step-by-step setup.
The app supports URL-based deep links with the challenge:// scheme. See Deep Linking Documentation for available routes and terminal usage.
This project uses mise as a tool version manager. All tool versions are defined in .mise.toml:
| Tool | Version | Description |
|---|---|---|
| Tuist | 4.129.0 | Xcode project generation and dependency management |
| SwiftLint | 0.63.1 | Swift style and conventions linter |
| Periphery | 3.4.0 | Dead code detection for Swift |
See Tuist Documentation and Scripts Documentation for more details.
| Package | Purpose |
|---|---|
| Lottie | JSON-based animations |
| SnapshotTesting | Visual regression testing |
| SwiftMockServer | Local HTTP mock server for UI tests |
Policy: Prefer native implementations. External dependencies only when strictly necessary.
- Architecture
- Project Structure
- Dependency Injection
- Tuist Configuration
- Environments
- Style Guide
- Testing
- Tracking
- Deep Linking
- Continuous Integration
- Scripts
- AI-Assisted Development - CLAUDE.md and skills for AI coding
- Create Feature
- Create DataSource
- Create Repository
- Create UseCase
- Create ViewModel
- Create View
- Create Navigator
- Create UI Test
- Create Tracker
- Create Tracking Provider
App & Composition
Libraries
Features
| Asset | Source | License |
|---|---|---|
| Rick and Morty Logo | Wikimedia Commons | Fair use (fan project) |
| Tool | Purpose |
|---|---|
| LottieFiles | Logo animation creation |








