Skip to content

vjr2005/Challenge

Repository files navigation

Challenge

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.

Screenshots

Home About Character List Filters Character Detail Character Episodes

Requirements

Tool Version
Xcode 26+
iOS 17.0+
Swift 6.2
macOS Sequoia 15.6+

Quick Start

1. Initial Setup

Run the setup script to install all required tools:

./setup.sh

2. Build the Project

Generate the Xcode project and install dependencies:

./generate.sh

Architecture

The project follows MVVM + Clean Architecture with feature-based modularization. See Architecture Documentation for details.

Default Actor Isolation

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.

Project Structure

See Project Structure Documentation for directory layout and dependency graph.

Libraries (Horizontal)

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)

Features (Vertical)

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

Composition

Module Description
ChallengeAppKit Dependency injection, root navigation, feature wiring

Testing

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.

Continuous Integration

The project uses GitHub Actions to run quality checks on every pull request. See CI Documentation for details.

Test Failure Periphery

Tracking

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.

Deep Linking

The app supports URL-based deep links with the challenge:// scheme. See Deep Linking Documentation for available routes and terminal usage.

Tools & Dependencies

Tools (mise)

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.

External Dependencies

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.

Documentation

Project

How-To Guides

Modules

App & Composition

Libraries

Features

Credits

Assets

Asset Source License
Rick and Morty Logo Wikimedia Commons Fair use (fan project)

Tools

Tool Purpose
LottieFiles Logo animation creation

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •