Skip to content
CAI
Software that uses CAICheck a score

hmlongco/Resolver

54.1

Adequate · 1 October 2026

841

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Resolver is a dependency injection framework for Swift applications that provides a registry for registering and resolving services with support for hierarchical containers, named registrations, and various object scopes. It offers compile-time safe property wrappers for injection and integrates with iOS, macOS, tvOS, watchOS, and visionOS platforms. The system has been superseded by a newer, lighter Factory-based dependency injection system, with Resolver now deprecated in favor of this successor.

Features

Added Jazzy-generated API documentation

The repository now includes a complete, Jazzy-generated HTML reference for the Resolver library. This documentation covers the core \Resolver\ class, \ResolverOptions\, and \ResolverRegistration\, as well as the various scope implementations (\ResolverScopeApplication\, \ResolverScopeCache\, \ResolverScopeGraph\, \ResolverScopeShare\, \ResolverScopeUnique\) and the \UIViewController\ extension, providing a navigable reference for developers.

Documentation/API · high confidence

Added Xcode workspace configuration for Swift Package Manager

A new Xcode workspace file (contents.xcworkspacedata) has been added to the .swiftpm directory. This file configures the workspace to reference the local package, enabling developers to open and edit the Swift package directly within Xcode.

.swiftpm · high confidence

Initial release of Resolver 0.9 dependency injection framework

This change introduces the initial version (0.9) of the Resolver framework, a dependency injection library for Swift. The commit establishes the core project structure, including the main \Resolver.swift\ source file, a comprehensive suite of unit tests (covering basic resolution, containers, scopes, names, and storyboards), and extensive documentation covering installation, registration, resolving, and various DI strategies. It also sets up the Xcode project configuration to build the Resolver as a framework.

Resolver/Resolver.xcodeproj · high confidence

Introduction of Resolver dependency injection framework

The Sources/Resolver directory now contains the core Resolver.swift file, introducing a dependency injection registry for Swift applications. This change adds the ability to register services with factories, resolve instances by type and optional name, and manage hierarchical containers via child scopes. It includes property wrappers for injection, support for multiple arguments in factory closures, and thread-safe access to registrations and caches, effectively establishing the foundational DI capabilities for the project.

Sources/Resolver · high confidence

Behavioural changes

Added privacy manifest and framework header for Resolver 1.1.3

The Resolver framework now includes a PrivacyInfo.xcprivacy manifest declaring no data collection, tracking, or API usage, and a Resolver.h header exposing the framework's version number and string constants for external consumers.

Sources · high confidence

Deprecation notice for Resolver in favor of Factory

The README now explicitly states that Resolver is officially deprecated and recommends using the new dependency injection system, Factory, which is described as a compile-time safe, smaller, lighter, and faster container-based alternative. This change updates the project's primary documentation to guide users toward the successor framework.

(repo-wide) · high confidence

Updated Xcode project configuration and test schemes

The Resolver.xcodeproj has been regenerated to support Xcode 12.5, including new project and test info plists, workspace settings, and build schemes. The test scheme now explicitly enables code coverage, and the project structure includes references to cyclic dependency and injected property wrapper tests.

Resolver.xcodeproj · medium confidence

Test coverage

Initial test suite for Resolver dependency injection; Initial test suite for Resolver dependency injection framework.

Dependencies

Add Swift Package Manager support and update CocoaPods version

The Resolver library now supports installation via Swift Package Manager (SPM), introducing a new Package.swift manifest and a resolved dependency file (Package.resolved) that pins the swift-docc-plugin. The library is configured to build as static, dynamic, or automatic libraries and targets iOS 12, macOS 10.14, tvOS 13, watchOS 8, and visionOS 1. Additionally, the CocoaPods podspec has been updated to version 1.5.1 to align with the latest release.

(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 55 → 54 (-0.9)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 69 → 69 (+0.0)
  • Maturity 50 → 50 (+0.0)
  • Readiness 43 → 43 (+0.4)
  • Security 81 → 81 (+0.0)

Resolved (2)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (4)

  • Coverage not measured — Swift suite
  • Three distinct register overloads exist with similarly named factory types (ResolverFactory, ResolverFactoryResolver, ResolverFactoryArgumentsN). It is unclear what differentiates these factory types (e.g., argument count vs. resolution strategy), leading to potential confusion for users choosing the correct overload.
  • Two overloads of resolveProperties exist with similarly named mutator types (ResolverFactoryMutator vs ResolverFactoryMutatorArgumentsN). This mirrors the inconsistency in the register methods and suggests an arbitrary split in API design.
  • Two properties, application and cached, both return the same type ResolverScopeCache. This implies they are aliases or identical in behavior, which is confusing naming. If they are identical, one should be deprecated. If they differ, they should return distinct types or have distinct behaviors documented.

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

Survey your own repository

hmlongco/Resolver 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 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit d49d02cf6df2793885b4040242ec53990c563c76 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.