Skip to content
CAI
Software that uses CAICheck a score

karambirov/GitHubSearch

48.1

Weak · 21 September 2026

4.6k

lines of production code

Swift

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an iOS application designed to search for and display GitHub repository information. It implements a modular architecture using a dependency container to manage core services, navigation, and feature modules for search, favorites, and details. The app leverages modern iOS 13+ lifecycle patterns and includes comprehensive testing for its navigation and data models.

How it got here

2018–2020 — Initial project configuration and scaffolding

5 changes.

This period focused on establishing the foundational structure of the GitHubSearch application, including the Xcode project setup, iOS 13+ scene-based lifecycle implementation, and core configuration files. The work also involved adding essential resources such as app icons, launch screens, and localization strings, alongside initial unit and UI tests for navigation components.

2021 — Modular architecture and navigation

7 changes.

The project underwent a significant architectural shift to a modular structure, introducing a centralized dependency container and a new navigation system. This period focused on refactoring core modules like Search, Favorites, and Details to use a consistent assembly pattern, alongside the creation of new data models and UI components.

Features

Add UI components and extensions for repository details view

Introduces a suite of UIKit extensions and UI components to support the new repository details interface. This includes layout and styling helpers (CGFloat spacing, Int shortening, UIColor mappings for programming languages, UIFont styles, and UIView/UIStackView convenience methods), as well as specific UI elements like RepositoryView, RepositoryCell, and TextSectionHeader, enabling the display of repository information in a list.

App/Sources/Extensions, App/Sources/UIComponents · high confidence

Add new data models and utility classes

The app now includes new model structs for GitHub entities including Group, License, Owner, Repository, SearchResults, and Tree, along with utility classes for weak references (Weak) and thread-safe weak object tracking (WeakThreadSafeSet).

App/Sources/Models · high confidence

Added app icon, launch screen, and localization resources

The app now includes a complete set of app icon images for iPhone, iPad, and App Store, a default white launch screen, and English and Russian string files for common UI actions (e.g., Yes, No, OK, Cancel, Save, Delete).

App/Resources · high confidence

Implemented repository details screen with new architecture

The repository details screen has been implemented using a new modular architecture, introducing a dedicated Details module that includes a view, presenter, interactor, and router. The UI is built with a UICollectionView using the new UICollectionViewCompositionalLayout API, displaying repository summary, favorite status, and detailed information in a grouped list. The module is wired via a new assembly pattern, and the data source handles section headers and cell registration for the various repository details.

App/Sources/Modules/Details · medium confidence

Initial project configuration and build scheme setup

The Xcode project file (project.pbxproj) and the default build/test scheme (GitHubSearch.xcscheme) have been added to the repository. This establishes the build configuration for the GitHubSearch app, including the primary target, unit tests, and UI tests, enabling the project to be built and run in Xcode.

GitHubSearch.xcodeproj · high confidence

Introduce new modular navigation and layout systems

The app now uses a new modular architecture for navigation, introducing a \NavigationAssistant\ that manages screen transitions, back-stack, and deep-linking via a \NavigationTreeDriver\ and \NavigationStack\. Additionally, a new layout system has been added, featuring a \Constrainable\ protocol and extension methods on \UIView\ to simplify Auto Layout constraints (e.g., \topToSuperview\, \edgesToMargin\).

App/Sources/Core · high confidence

New utility protocols and classes for debouncing and type description

Added two new utility files in the App/Sources/Utilities directory. Debouncer.swift introduces a public Debouncer class and DebouncerProtocol to handle action debouncing with a configurable delay and queue. Describable.swift adds a Describable protocol that provides a typeName property for classes conforming to it, with a specific extension for UITableViewCell.

App/Sources/Utilities · high confidence

Behavioural changes

App configuration and localization scaffolding

The app's Info.plist has been added to define core application settings, including the display name 'GitHub Search', supported interface orientations, and scene configurations. Additionally, a Localization.swift file was introduced to provide static string constants for UI text such as 'Search', 'Favorites', and 'Issues', establishing the foundation for future internationalization efforts.

App/Sources/Other/Config · high confidence

Introduces a new modular architecture with a centralized dependency container

The app's internal structure has been refactored to use a new navigation and module system. A new \DependencyContainer\ centralizes the creation and wiring of core services (such as the Moya-based API provider, networking, and data repositories). This container feeds into a \ModulesFactory\ that constructs the main tab bar and individual feature modules (Search, Favorites, Details) by injecting the necessary dependencies. The \RootViewController\ has been updated to manage child view controllers, supporting the new modular layout.

App/Sources/Modules · medium confidence

Migrated to iOS 13+ Scene-based lifecycle

The application now uses the modern iOS 13+ scene-based lifecycle, replacing the older single-window approach. The new \SceneDelegate\ initializes the root view controller and tab bar module via a dependency container, while the \AppDelegate\ handles scene configuration. This change reflects an architectural update to support multiple windows and improved app state management on modern iOS versions.

App/Sources/Other/App · medium confidence

Rearchitect Favorites and Search modules with a new modular architecture

The Favorites and Search modules have been refactored into a new modular architecture using a clean, composable structure. Each module now consists of dedicated components for assembly (Assembly), interaction logic (Interactor), presentation (Presenter), routing (Router), and the view (View/ViewController). This change introduces a consistent pattern across the app, where the Search module handles query input and repository display via a collection view, while the Favorites module provides a placeholder view. Users will experience a more stable and maintainable app structure, though the core functionality for searching and viewing favorites remains the same.

App/Sources/Modules/Favorites · high confidence

Test coverage

Added unit and UI tests for core navigation and model components

Added new unit tests for the \Group\ and \Tree\ data structures, as well as for the \ViewControllersTreeBuilder\, \ViewControllersStackGrouper\, and \NavigationItemsRegistry\ components. Also added a UI test stub for the GitHub search feature and supporting mock classes to facilitate testing of the app's routing and navigation logic.

App/Tests · 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 43 → 48 (+4.9)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 99 (-1.1)
  • Architecture 98 → 95 (-3.2)
  • Maturity 19 → 30 (+10.5)
  • Readiness 24 → 31 (+7.0)
  • Security 100 → 100 (+0.0)

Resolved (8)

  • Change coupling: NetworkingService.swift ↔ SearchViewController.swift (App/Sources/Core/Networking/NetworkingService.swift)
  • Change coupling: SearchViewController.swift ↔ AppDelegate.swift (App/Sources/Modules/Search/SearchViewController.swift)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • No exposed public API
  • Test reliability not included
  • complexity unreadable for .swift — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

New (17)

  • Assertions commented out: testExample (App/Tests/UITests/GitHubSearchUITests.swift)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (App/Sources/Core/Layout/Layout+Superview.swift)
  • Duplicated block (11 lines × 2) (App/Sources/Core/Layout/Layout+Superview.swift)
  • Duplicated block (11 lines × 2) (App/Sources/Modules/Favorites/FavoritesRouter.swift)
  • Duplicated block (7 lines × 2) (App/Sources/Extensions/UIColor+Shade.swift)
  • Duplicated block (9 lines × 2) (App/Sources/Core/Layout/NSLayoutAxisAnchor+ConstraintRelation.swift)
  • FixmeComment (App/Sources/DataProviders/RepositoryDataProvider.swift)
  • Hotspot: App/Sources/Extensions/UIColor+GitHub.swift (App/Sources/Extensions/UIColor+GitHub.swift)
  • Low cohesion: DetailsView (LCOM4 4) (App/Sources/Modules/Details/DetailsView.swift)
  • Low cohesion: NavigationAssistant (LCOM4 4) (App/Sources/Core/Routing/NavigationAssistant.swift)
  • Low cohesion: RepositoryDataProvider (LCOM4 5) (App/Sources/DataProviders/RepositoryDataProvider.swift)
  • Low cohesion: SearchView (LCOM4 5) (App/Sources/Modules/Search/SearchView.swift)
  • No ADRs found
  • Test project verifies nothing: UITests (App/Tests/UITests/GitHubSearchUITests.swift)
  • TodoComment (App/Sources/Other/Config/Localization/Localization.swift)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

karambirov/GitHubSearch 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 239399d8d724594d13f834e89885d9334a461fe9 — 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.