Skip to content
CAI
Software that uses CAICheck a score

danielsaidi/OnboardingKit

58.7

Adequate · 1 October 2026

2.8k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

OnboardingKit is a Swift library that provides customizable UI components and flow management for building onboarding experiences in iOS applications. It supports various presentation types, including conditional, delayed, and slideshow-based flows, across multiple Apple platforms. The package includes automation scripts for building, testing, and releasing, and is distributed via Swift Package Manager.

How it got here

2019–2021 — SPM integration and demo overhaul

5 changes.

The project established Swift Package Manager support for multi-platform availability and restructured its internal build configuration. Concurrently, the demo application was completely rebuilt and rebranded to showcase the library's onboarding capabilities through a new flow-based UI.

2022–2025 — OnboardingKit feature expansion and tooling

7 changes.

This period focused on expanding the OnboardingKit library with comprehensive UI components, flow management, and conditional presentation logic. It also introduced automation scripts to streamline Swift package development, testing, and release workflows across multiple platforms.

Features

Added Swift Package Manager workspace configuration

The project now includes the necessary \.swiftpm\ directory structure to support Swift Package Manager (SPM) integration. This adds the Xcode workspace configuration files (\contents.xcworkspacedata\ and \IDEWorkspaceChecks.plist\) required for SPM to correctly resolve and build the package within Xcode.

.swiftpm · high confidence

Introduces comprehensive Swift package automation scripts

Adds a suite of new shell scripts to the \scripts/\ directory to streamline Swift package development and release workflows. The \build\ and \test\ scripts automate building and testing targets across iOS, macOS, tvOS, watchOS, and xrOS platforms. Documentation generation is handled by \docc\ (per-platform) and \docc-multiplatform\ (combined output), supporting static hosting configuration. Release management is centralized in the \release\ script, which orchestrates git validation (\release-validate-git\), package validation with optional SwiftLint (\release-validate-package\), and version bumping. Utility scripts include \package-name\ and \package-platforms\ for introspecting \Package.swift\, \l10n-gen\ for generating Swift code from string catalogs, and \sync-from\/\sync-to\ for synchronizing script sets between repositories.

scripts · high confidence

New onboarding flow components and state management

The OnboardingKit now includes a new set of views and state types to simplify building onboarding experiences. OnboardingFlowContainer provides a wrapper that centers content and manages navigation buttons in the bottom safe area, while OnboardingFlowCenteredContent handles padding and centering of page content. OnboardingFlowState offers an observable class to manage page indices and navigation logic, and OnboardingFlowPageInfo defines the protocol for page information.

Sources/OnboardingKit/Flows · high confidence

New onboarding presentation types and utilities

OnboardingKit introduces new onboarding behaviors: Conditional onboarding (presented only when a condition is true), Delayed onboarding (triggered after a set number of attempts), and CorrectBehavior onboarding (shown after repeated incorrect user actions). It also adds OnboardingPage for page info, OnboardingUsp for unique selling points, and a View extension for easier onboarding presentation.

Sources/OnboardingKit · high confidence

New onboarding views and styles for intro screens, slideshows, and progress lists

The OnboardingKit views module now includes a comprehensive set of new UI components for building onboarding flows. This adds the OnboardingIntroScreen for displaying app essentials and USPs, the OnboardingSlideshow for timed, auto-advancing slide presentations with progress indicators, and the OnboardingVerticalProgressList for step-by-step vertical progress tracking. It also introduces the OnboardingPageView for standard swipeable page navigation, the OnboardingPrimaryButton with support for new glass-style variants on visionOS and iOS 26+, and the OnboardingUspList/UspListItem for rendering feature highlights. These views are fully customizable via dedicated style types (e.g., OnboardingIntroScreenStyle, OnboardingSlideshowStyle, OnboardingVerticalProgressListStyle) and environment values, and the page/slideshow views are implemented to work across iOS, visionOS, macOS, tvOS, and watchOS.

Sources/OnboardingKit/Views · high confidence

New preview components for OnboardingKit

Added PreviewBackground and PreviewPage SwiftUI views to the OnboardingKit Previews module. PreviewBackground provides a gradient background with safe-area handling for previewing onboarding flows, while PreviewPage displays a sample onboarding page with page index information and styling. These components support the preview system for the onboarding kit.

Sources/OnboardingKit/Previews · high confidence

Behavioural changes

Demo app rebranded to OnboardingKit with new onboarding flow demonstrations

The demo application has been renamed from 'Tutti' to 'OnboardingKit' and rebuilt to showcase the library's capabilities. The new demo features a main menu for presenting various onboarding types, including conditional, delayed, and correct-behavior popovers, as well as a welcome screen. It also introduces new flow demonstrations using OnboardingFlowContainer to support both page views and slideshows, replacing the previous demo structure.

Demo/Demo · high confidence

Demo app updated with onboarding slideshow and splash view

The Demo application has been updated to include a new onboarding experience. This change introduces specific UI components, including \WelcomeScreen\, \DemoOnboardingScreen\, and \DemoOnboardingPage\, along with supporting logic in \Demo+Onboarding.swift\ and \Demo+Image.swift\. The project now links against the \OnboardingKit\ framework to power this new flow, replacing the previous generic demo structure with a more specific tutorial-style onboarding sequence.

Demo/Demo.xcodeproj · high confidence

Replaced old demo app with a fresh Xcode workspace

The previous demo application has been removed and replaced with a new, minimal Xcode workspace configuration. This change updates the project structure to use a standard workspace setup, ensuring the demo app is correctly recognized and built by Xcode without legacy configuration artifacts.

Demo/Demo.xcodeproj/project.xcworkspace · medium confidence

Test coverage

Added unit tests for OnboardingPage behavior

Added test coverage for the OnboardingKit's OnboardingPage component, verifying the correctness of the isFirstPage, isLastPage, and isCurrentPage properties across various page index and total page count scenarios. A new TestUtils.swift file was also introduced to provide a TestUserDefaults helper class for the test suite.

Tests · high confidence

Dependencies

Swift Package Manager support with multi-platform availability

The library is now available via Swift Package Manager, allowing users to integrate OnboardingKit into their projects. The package supports iOS 17, macOS 15, tvOS 17, watchOS 10, and visionOS 1, and depends on PageView version 0.2.0. Additionally, internal build scripts utilize Swift Argument Parser for localization tooling.

(dependencies) · high confidence

Housekeeping

Updated local Xcode user settings for the demo project

The demo project's local Xcode configuration has been updated to include a new breakpoints list and a shared scheme management file. These changes adjust the local development environment settings, such as breakpoint storage and scheme ordering, without affecting the shared project structure or the application's runtime behavior.

Demo/Demo.xcodeproj/xcuserdata · 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 61 → 59 (-1.9)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (-0.3)
  • Architecture 100 → 100 (+0.0)
  • Maturity 64 → 64 (+0.0)
  • Readiness 63 → 59 (-3.6)
  • Security 46 → 46 (+0.0)

Resolved (3)

  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (6)

  • Ambiguous method naming with unclear distinction. 'tryPresent' and 'present' have nearly identical signatures and likely similar intents (triggering a presentation flow). Without documentation, it is unclear if 'try' implies a conditional check (e.g., only present if not already shown) while 'present' forces it, or if they are redundant aliases. This creates cognitive load for the consumer.
  • Coverage not measured — Swift suite
  • Duplicated block (8 lines × 2) (Demo/Demo/DemoOnboardingPage.swift)
  • Duplicated block (8 lines × 2) (Demo/Demo/DemoOnboardingPage.swift)
  • Inconsistent optional handling in initializers. 'OnboardingSlideshowConfiguration' uses optional parameters for core timing logic (slideDuration, timeTickIncrement), implying defaults are applied internally. 'OnboardingSlideshowStyle' also uses optionals for visual properties. While not strictly a naming conflict, the inconsistency in why parameters are optional (logic defaults vs. visual fallbacks) across similar configuration objects suggests a lack of unified pattern for 'Configuration' vs 'Style' objects. More critically, 'OnboardingSlideshowConfiguration' has 'timeTickIncrement' while 'OnboardingSlideshowStyle' has no timing params, but 'OnboardingSlideshowProgressView' takes 'slideshowProgress: Double' directly. The separation of timing config and progress view state is fragmented.
  • Outdated: swift-argument-parser

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

Survey your own repository

danielsaidi/OnboardingKit 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 64c54277c289fa1f8ddf5b07f1401e08c7222711 — 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.