tuan188/RxCleanArchitecture
46.2
Weak · 21 September 2026
7.4k
lines of production code
Swift
primary language
4
measurements over time
What this system is
This system is an iOS application built on a Clean Architecture pattern, utilizing RxSwift for reactive programming and Core Data for local persistence. It provides a complete user interface for managing users, repositories, and products, featuring paginated lists, carousels, and form validation. The codebase includes extensive unit and integration tests covering domain use cases, view models, and UI components.
How it got here
2018 — CleanArchitecture initialization
10 changes.
This period focused on establishing the foundational structure of the CleanArchitecture project, including the Xcode workspace, Core Data setup, and key UI components like the Main and Login screens. The team implemented core architectural patterns, such as the AppViewModel and RxPagingTableView, while simultaneously adding unit tests to verify the new logic and UI interactions.
2019–2020 — Clean Architecture implementation
17 changes.
This period focused on implementing the core features of a Clean Architecture application, introducing domain entities, use cases, and UI scenes for login, products, and repositories. The work established a robust data layer with Core Data and UserDefaults storage, supported by comprehensive unit tests for all new components.
2021–2024 — Clean Architecture and Reactive UI
7 changes.
The project established a Clean Architecture foundation by introducing RxSwift-based reactive utilities, a CoreDataRepository abstraction, and domain use cases for user and repository management. This backend and logic layer was paired with new UI components, including a multi-section repository carousel and paging-enabled table/collection views, to display data in various formats.
Features
Add CoreData mapping for User entity
A new Core Data model and Swift extension were added to enable persistence of the User entity. The model defines a CDUser entity with attributes for id, name, birthday, and gender. The User+CoreData.swift file implements the CoreDataMappable protocol, providing bidirectional mapping between the domain User object and the CDUser Core Data entity.
CleanArchitecture/Data/CoreData · high confidence
Add PagingTableView and PagingCollectionView with pull-to-refresh and load-more support
Introduced new \PagingTableView\ and \PagingCollectionView\ classes that integrate with RxSwift and ESPullToRefresh to provide pull-to-refresh and infinite scrolling (load-more) capabilities. These components expose bindable states (\isRefreshing\, \isLoadingMore\) and reactive triggers (\refreshTrigger\, \loadMoreTrigger\) to manage UI updates, while also supporting custom header and footer animators for both standard and extended refresh behaviors.
PagingTableView · high confidence
Add RepoCarousel scene with multi-section repository display
Users can now view a curated list of repositories organized into three distinct visual sections: a horizontal carousel of the first six items, a vertical list of the next eight, and a card-style view of the remaining five. This new scene integrates with the existing navigation and data-fetching infrastructure, allowing users to browse and select individual repository details.
CleanArchitecture/Scenes/Repo/RepoCarousel · high confidence
Add main and login screen storyboards
Introduced the primary user interface for the application by adding a Main storyboard containing a MainViewController with a table view, and a LoginViewController with username and password fields. A Swift enum was added to provide type-safe access to the Main storyboard resource.
CleanArchitecture/Scenes/Storyboards · high confidence
Add main menu navigation with sectioned list
Users can now access the app's primary navigation through a new MainViewController that displays a sectioned table view of menu items. The menu is organized into groups (Mock Data, API, Core Data, and Login), each containing specific screens such as product lists, repo collections, and user lists. Selecting a menu item navigates to the corresponding feature, with the MainViewModel handling the routing logic for all listed scenes.
CleanArchitecture/Scenes/Main · high confidence
Add product editing and navigation infrastructure
Introduced a new \DynamicEditProduct\ scene for editing product details, including its view controller, view model, and associated table view cells. Added a suite of navigation protocols and implementations in the \Navigator\ directory to handle presenting various app screens, such as login, main, and product lists. The changes also include a \ValidationResultViewModel\ to manage validation state for form inputs.
CleanArchitecture/Scenes/Product · high confidence
Add repo list and collection scenes with view models
Users can now view repositories in both a standard list and a grid layout. This change introduces the \ReposViewController\ and \RepoCell\ for a vertical list, as well as the \RepoCollectionViewController\ and \RepoCollectionCell\ for a grid view. Both scenes are wired to new \ReposViewModel\ and \RepoItemViewModel\ classes that handle data binding, loading states, and navigation to repository details.
CleanArchitecture/Scenes/Repo/Repos · high confidence
Added EmptyDataView component for displaying empty states
Introduced a new reusable UI component, EmptyDataView, which renders a simple 'NO DATA' message. This view is implemented via a new Swift class and its corresponding XIB file, providing a consistent way to display empty states across the application.
CleanArchitecture/Scenes/Common · high confidence
Added UI and utility extensions for iOS 13+ compatibility and reactive bindings
The app now includes a new \ColorCompatibility\ utility that provides fallback color values for iOS versions prior to 13, ensuring consistent theming across different OS versions. Additionally, a suite of extension methods was added to \UIViewController\, \UITableView\, \UICollectionView\, and \SharedSequenceConvertibleType\ to support reactive programming with RxSwift and RxCocoa, including error handling, loading states, and sequence synchronization.
CleanArchitecture/Support · high confidence
Added domain entity models for Product, Repo, and User
New domain entity structs have been introduced to represent core data models in the application. Product is a simple struct with id, name, and price. Repo represents a repository with details like name, URL, and owner, including coding keys for JSON mapping. User includes id, name, gender (with a name property for display), and birthday. All entities conform to the Then protocol for testability.
CleanArchitecture/Domain/Entities · high confidence
Added domain use cases for user and repository management
New domain use cases have been introduced to handle user and repository operations. This includes SetUpUserData for initializing user data and managing first-run states, FetchRepos for paginated repository fetching, and AddUsers for creating new users with validation. Additionally, FetchUsers and FetchPageDto support data fetching with pagination and caching options.
(repo-wide) · high confidence
Added iOS app icon and launch screen resources
The iOS application now includes the necessary asset catalog files to define the app icon for iPhone and iPad across all required resolutions and scales, as well as a LaunchScreen storyboard that displays the 'Clean Architecture Templates' text on startup.
CleanArchitecture/Resources · high confidence
Added product domain use cases and DTOs
Introduced new domain use cases for managing products, including DeleteProduct, FetchProductList, UpdateProduct, and their corresponding Data Transfer Objects (ProductDto, DeleteProductDto). These additions enable the application to handle product deletion, list fetching, and updates through a clean architecture pattern, with validation rules applied to product names and prices.
CleanArchitecture/Domain/UseCases/Product · high confidence
Added repo carousel scene with card, list, and carousel UI components
The repo carousel scene now includes a complete set of UI components for displaying repository items in different formats. This includes a card-style layout for grid display, a list-style layout for vertical scrolling, and a horizontal carousel with snapping behavior. The implementation introduces new cell types (CardPageItemCell, CarouselPageItemCell, ListPageItemCell) and their corresponding XIB files, along with layout configuration classes (CardSectionLayout, CarouselSectionLayout, ListSectionLayout) and supporting infrastructure like LayoutOptions and PageItemCell base class.
CleanArchitecture/Scenes/Repo/RepoCarousel/PageSection · high confidence
Adds reactive ViewModel utilities and paging support
The RxCleanArchitecture package introduces a suite of reactive utilities for iOS development. It adds an ActivityIndicator system (including MultiActivityIndicator and PageActivityIndicator) to track loading states for single and paginated data sources. It also provides an ErrorTracker for centralized error observation, a Bindable protocol for view-controller binding, and helper extensions on RxSwift's Observable and SharedSequence types. Additionally, it includes a PagingInfo model and ViewModel extensions for fetching lists and pages of data.
RxCleanArchitecture · high confidence
CleanArchitecture project structure and workspace configuration
The project's Xcode workspace and project configuration files have been added or updated, establishing the build environment for the CleanArchitecture application. This includes the main project file (project.pbxproj) which defines the source files, resources, and framework dependencies (such as RxSwift, SDWebImage, and CoreDataRepository), as well as the workspace data and settings files that manage the development environment.
CleanArchitecture.xcodeproj · high confidence
Initial project structure and core infrastructure for CleanArchitecture
The CleanArchitecture module has been initialized with a complete base structure, including the main application entry point (AppDelegate) which sets up Core Data storage and binds the AppViewModel, alongside a dedicated UnitTestViewController for testing purposes. The project also introduces domain entities for paginated lists (PageItem, PageSection) and API endpoint definitions (GitEndpoint), establishing the foundational layers for the application's architecture.
CleanArchitecture · high confidence
Introduce login use-case and DTO with input validation
The login use-case is now implemented in the domain layer, featuring a LoginDto that enforces non-empty username and password fields via the ValidatedPropertyKit. The Login protocol extension provides login and validation methods, integrating with the Dto package for data transfer and validation.
CleanArchitecture/Domain/UseCases/Login · medium confidence
Introduce property wrappers for UserDefaults storage
Added three new Swift files in the CleanArchitecture/Data/UserDefaults directory: AppSettings.swift, CacheStorage.swift, and Storage.swift. These introduce @property wrappers (Storage and CacheStorage) that simplify reading and writing Codable values to UserDefaults, replacing the previous manual serialization and storage logic.
CleanArchitecture/Data/UserDefaults · high confidence
Introduced AppViewModel and RxPagingTableView for improved architecture and UI capabilities
Added AppViewModel to centralize app-level logic and state management using the Factory pattern for dependency injection. Additionally, introduced RxPagingTableView to provide built-in support for pull-to-refresh and infinite scroll loading states, enhancing the user experience for list-based views.
CleanArchitecture/Scenes · high confidence
Introduces new gateway implementations for app state, products, repositories, and users
The application now uses dedicated gateway structs (AppGateway, ProductGateway, RepoGateway, UserGateway) to handle specific domain responsibilities. AppGateway manages first-run state, ProductGateway handles product listing and updates, RepoGateway fetches repository data via APIService, and UserGateway manages user data using CoreStore and CoreDataRepository. Each gateway is registered in the dependency injection container for injection into the rest of the application.
CleanArchitecture/Data/Gateways · high confidence
New CoreDataRepository abstraction for data access
A new CoreDataRepository protocol and implementation have been added to the codebase, providing a reactive (RxSwift-based) and non-reactive API for creating, fetching, and deleting Core Data entities. This introduces a standardized way to interact with the local data store using the CoreStore library, exposing methods like create, fetchOne, fetchAll, and fetchCount that wrap Core Data operations in Observables for easier asynchronous handling.
CoreDataRepository · high confidence
New login screen with validation and reactive binding
Added a new LoginViewController and LoginViewModel to the CleanArchitecture project, introducing a reactive login flow using RxSwift and Factory for dependency injection. The screen includes text fields for username and password with real-time validation messages, enabling/disabling the login button based on input validity and loading states, and handles login success or error states.
CleanArchitecture/Scenes/Login · high confidence
Test coverage
Added API repository tests and test helpers; Added iOS test bundle configuration; Added mock gateway implementations for testing; Added test support utilities for the CleanArchitectureTests suite; Added unit tests for Main, UserList, and Menu components; Added unit tests for Product and Repo scenes; Added unit tests for the AppViewModel; Added unit tests for the Login scene; Added unit tests for the product list retrieval use case; Added unit tests for user data setup and repository list fetching.
Dependencies
Swift Package Manager configuration for iOS architecture libraries
The project now includes Swift Package Manager (SPM) manifests and a resolved dependency graph for the iOS application. This introduces dependencies on RxSwift (v6.8.0), CoreStore (v9.2.0), Factory (v2.3.2), SDWebImage (v5.19.7), and several other libraries, enabling the use of reactive programming patterns and data persistence in the Clean Architecture layers.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 50 → 46 (-3.7)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 98 (-2.4)
- Architecture 100 → 94 (-5.6)
- Maturity 41 → 56 (+15.3)
- Readiness 24 → 51 (+26.3)
- Security 100 → 100 (+0.0)
- Accessibility 25 (new)
Resolved (7)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- Scanner failed to run — not a clean result
- Test reliability not included
- complexity unreadable for .swift — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (52)
- Coverage not measured — Swift suite
- Documentation: no contributor guidance (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 3) (CleanArchitecture/Scenes/Repo/RepoCarousel/PageSection/Card/CardPageItemCell.swift)
- Duplicated block (10 lines × 3) (CleanArchitecture/Sources/LoadMore/RxPagingTableView.swift)
- Duplicated block (10 lines × 3) (CleanArchitecture/Sources/LoadMore/RxPagingTableView.swift)
- Duplicated block (10–11 lines × 2) (CleanArchitecture/Scenes/Product/Products/ProductsViewModel.swift)
- Duplicated block (11 lines × 2) (CleanArchitecture/Scenes/Product/SectionedProductCollection/SectionedProductCollectionViewController.swift)
- Duplicated block (12 lines × 2) (RxCleanArchitecture/Sources/RxCleanArchitecture/ViewModel/ViewModel+FetchList.swift)
- Duplicated block (13 lines × 2) (RxCleanArchitecture/Sources/RxCleanArchitecture/ViewModel/ViewModel+FetchList.swift)
- Duplicated block (13–15 lines × 2) (CleanArchitecture/Scenes/Product/DynamicEditProduct/DynamicEditProductViewModel.swift)
- Duplicated block (14 lines × 2) (CleanArchitecture/Scenes/Repo/RepoCollection/RepoCollectionCell.swift)
- Duplicated block (14 lines × 2) (CleanArchitecture/Support/Extensions/UICollectionView+.swift)
- Duplicated block (14–15 lines × 3) (CleanArchitecture/Sources/LoadMore/RxPagingTableView.swift)
- Duplicated block (15 lines × 2) (CleanArchitecture/Scenes/Product/Products/ProductsViewModel.swift)
- Duplicated block (15 lines × 3) (CoreDataRepository/Sources/CoreDataRepository/CoreDataRepository.swift)
- Duplicated block (15 lines × 3) (CoreDataRepository/Sources/CoreDataRepository/CoreDataRepository.swift)
- Duplicated block (15 lines × 5) (CoreDataRepository/Sources/CoreDataRepository/CoreDataRepository.swift)
- Duplicated block (15 lines × 6) (CleanArchitecture/Scenes/Product/SectionedProductCollection/SectionedProductCollectionViewController.swift)
- Duplicated block (17 lines × 2) (CleanArchitecture/Scenes/Repo/RepoCarousel/RepoCarouselViewModel.swift)
- …and 32 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
tuan188/RxCleanArchitecture was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit b723c56eacd511e2852bc7925b8c4f7ade0f76d4 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b84573e22831.