Skip to content
CAI
Software that uses CAICheck a score

uias/Tabman

41.3

Weak · 30 September 2026

5.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

Tabman is an iOS library that provides customizable tab bars for page-based view controllers, integrating with the Pageboy framework to manage content paging. It supports various bar styles, including native system-like bars and custom button layouts, with features for auto-hiding, automatic safe area insetting, and granular animation control. The system includes built-in indicators, badges, and utilities for smooth visual transitions and layout management.

How it got here

2017 — Swift 6 and iOS 14 modernization

10 changes.

The project was updated to require iOS 14 and support Swift 6, accompanied by a comprehensive restructuring of the Xcode project and workspace. This period also established modern development workflows through Swift Package Manager support, Fastlane automation, and standardized privacy manifests.

2018 — Bar architecture refactoring and customization

17 changes.

This period focused on a comprehensive refactoring of the Tabman bar's internal architecture, introducing modular protocol-based layouts, dedicated scroll and update handlers, and granular animation controls. It significantly expanded customization options by adding new bar button types, indicator styles, and layout modes, while also introducing utilities for interpolation and safe area handling to improve integration with native UIKit components.

2019–2020 — AutoInsetter and SPM migration

7 changes.

This period focused on introducing the AutoInsetter module to automatically manage scroll view insets and adding a customizable TMBadgeView component for bar buttons. The team also migrated the example project to Swift Package Manager and Xcode 12, rewriting the demo app to showcase modern usage patterns and new features like manual auto-hiding triggers.

Features

Add bar math utilities and weak container helper

The Tabman bar utility layer now includes a new BarMath class providing helper functions to calculate local index ranges and progress values based on scroll positions, alongside a WeakContainer generic class to safely hold weak references to objects, supporting internal bar layout and interaction logic.

Sources/Tabman/Bar/Utility · high confidence

Add manual trigger support for auto-hiding bars

Developers can now configure the auto-hiding bar to remain visible until explicitly shown, rather than relying solely on automatic time-based dismissal. This is achieved by passing a \.manual\ trigger when creating a hiding bar, which disables the internal dismiss timer and requires calling \show(animated:completion:)\ to display the bar again.

Sources/Tabman/Bar/BarExtensions/AutoHidingBar · high confidence

Add privacy manifest and update framework metadata

The Tabman framework now includes a PrivacyInfo.xcprivacy file declaring no data collection or tracking, alongside a new Info.plist and header file to standardize framework metadata and versioning.

Sources/Tabman · high confidence

Add system bar extension for native-style tab bars

Introduces the \TMSystemBar\ extension, allowing users to embed a \TMBar\ within a view that mimics the appearance and behavior of a native \UINavigationBar\ or \UITabBar\. This new component automatically handles edge extension to the safe area, applies appropriate background styles (using system material blur on iOS 13+ and extra light blur on earlier versions), and manages separator lines to blend seamlessly with the system UI.

Sources/Tabman/Bar/BarExtensions/SystemBar · high confidence

Added color and rectangle interpolation utilities

New extension methods have been added to UIColor and CGRect to support smooth interpolation between two values. UIColor now includes methods to interpolate between two colors with a specified percentage, handling both iOS 13+ dynamic color traits and older versions. CGRect gains an interpolate method to calculate intermediate frames based on a progress value, enabling smoother animations for bar elements.

Sources/Tabman/Bar/Extensions · high confidence

Automated documentation generation and publishing pipeline

Added a new set of shell scripts in .scripts to automate the build and deployment of project documentation. The pipeline uses Jazzy to generate API docs, processes markdown files (including sanitizing image paths), and automatically commits and pushes the updated documentation to the gh-pages branch upon changes.

.scripts · high confidence

Initial Fastlane automation setup for testing and deployment

Added Fastlane configuration files (Appfile and Fastfile) to automate the iOS build and release process. The setup defines a 'test' lane that runs unit tests using the 'Tabman' scheme and a 'deploy' lane that pushes a new version to CocoaPods and GitHub, utilizing the version defined in the project's xcconfig file and targeting the 'main' branch.

fastlane · high confidence

Introduce AutoInsetter for automatic scroll view insetting

The AutoInsetter module has been added to automatically manage content insets and offsets for scroll views within view controllers. This new engine calculates and applies insets based on safe areas and custom specifications, handling specific logic for table and collection views to ensure content remains visible and scroll indicators are correctly positioned without manual intervention.

Sources/Tabman/AutoInsetter · high confidence

Introduction of TMBadgeView with customizable appearance and animations

A new TMBadgeView component has been added to display badge indicators on bar buttons. This view supports customizable text, font, and colors (including a default red tint and white text), and allows users to adjust the padding around the badge text via a contentInset property. It also includes built-in fade and scale animations for showing and hiding the badge.

Sources/Tabman/Bar/BarButton/Badge · high confidence

New TMBarItemable protocol and UIKit extensions for tab bar items

The library introduces the \TMBarItemable\ protocol, allowing any object to define properties for tab bar items including title, image, selected image, badge value, and accessibility labels/hints. The concrete \TMBarItem\ class implements this protocol with automatic update notifications when properties change. Additionally, \UINavigationItem\ and \UITabBarItem\ are extended to conform to \TMBarItemable\, enabling native support for these UIKit components within Tabman bars.

Sources/Tabman/Bar/BarItem · high confidence

New bar indicator types and customization options

This update introduces several new bar indicator styles for the Tabman library, including a chevron indicator (with small, medium, large, or custom sizes), a dot indicator (with similar size options), a block indicator (featuring square, rounded, or elliptical corner styles), and a line indicator (with configurable weight and corner styles). Additionally, a 'None' indicator type is added for cases where no visible indicator is desired. These new types provide more visual flexibility for tab bar customization.

Sources/Tabman/Bar/BarIndicator/Types · high confidence

New bar layout types and separator support

The library introduces new bar layout options, including a 'None' layout that displays only the indicator without visible buttons, and a 'ConstrainedHorizontal' layout that limits the number of visible buttons. Additionally, horizontal bar layouts now support vertical separators between buttons, which can be customized via width, color, and inset properties.

Sources/Tabman/Bar/BarLayout/Types · high confidence

New customizable bar button types with enhanced layout and styling options

This change introduces new bar button implementations (\TMLabelBarButton\, \TMTabItemBarButton\, and \TMBarButton.None\) that provide users with more control over tab bar appearance. \TMLabelBarButton\ now supports vertical alignment of text, distinct selected/unselected tint colors and fonts, and Dynamic Type support. \TMTabItemBarButton\ mimics the native \UITabBarItem\ look with vertically stacked image and label, adding features like image shrinking when unselected, separate selected images, and iOS 13 Dark Mode compatibility. The new \None\ button type allows for hidden buttons in the bar.

Sources/Tabman/Bar/BarButton/Types · high confidence

Shared Xcode scheme for Tabman framework

A shared Xcode scheme for the Tabman framework has been added to the project. This configuration enables developers to build, test, launch, profile, analyze, and archive the Tabman framework directly from Xcode without needing to manually configure these actions, streamlining the development and debugging workflow for the library.

Sources/Tabman.xcodeproj/xcshareddata · high confidence

Behavioural changes

13 commits (0 fixes) modifying .artwork

A change to existing behaviour in .artwork — 13 commits, 1 file.

.artwork · medium confidence · unverified

Added Example iOS scheme for Xcode

A new Xcode scheme named 'Example iOS' has been added to the project, enabling developers to build, run, test, profile, and archive the Example iOS application directly from the IDE.

Sources/Examples.xcodeproj/xcshareddata · high confidence

Added Xcode workspace configuration files

The Xcode workspace now includes standard configuration files to improve team consistency and source control integration. An IDEWorkspaceChecks.plist file has been added to prevent accidental workspace modifications, a WorkspaceSettings.xcsettings file enables automatic context creation, and a Tabman.xcscmblueprint file defines the source control working copy states for the main project and its dependencies (Pageboy and PureLayout).

Tabman.xcworkspace/xcshareddata · high confidence

Enhanced view controller extensions for safer layout and improved Tabman integration

This update adds several new Swift extensions to the Tabman framework to improve usability and stability. The \UIViewController\ extension now exposes \tabmanParent\ to easily access the parent \TabmanViewController\ and \tabmanBarItems\ to retrieve associated bar items for the current view controller index. Layout handling is improved with the \UIView+LayoutGuide\ extension, which provides safe-area-aware anchors (\safeAreaTopAnchor\, etc.) that gracefully fall back to standard view anchors on older iOS versions or jailbroken devices where \safeAreaLayoutGuide\ might be unavailable. Additionally, new extensions for \PageboyViewController\ provide \relativeCurrentPosition\ for orientation-aware position tracking and \barUpdateDirection\ to map Pageboy navigation directions to Tabman's internal update directions.

Sources/Tabman/Extensions · high confidence

Example iOS project restructured for Xcode 12 and SPM

The Example iOS project has been updated to support Xcode 12 and migrated to use Swift Package Manager (SPM) for dependency management. The project file now explicitly configures the build to embed the Tabman framework and includes updated project settings such as \LastSwiftUpdateCheck\ and \LastUpgradeCheck\ to reflect the new toolchain version.

Sources/Examples.xcodeproj · high confidence

Introduces configurable animation and transition styles for tab bars

The tab bar component now supports customizable animation behavior through the new \TMAnimation\ struct, which allows users to specify whether animations are enabled and set their duration. Additionally, the \TMTransitionStyle\ enum has been added to define how progress updates are rendered, offering options for smooth progressive transitions, animated snapping at thresholds, or no animation at all. These changes are exposed via the \TMBar\ protocol and its default implementation, enabling more granular control over the visual feedback when the selected tab changes.

Sources/Tabman/Bar · high confidence

New generic bar components for labels, fading, gestures, and title containers

This change introduces four new internal components in the generic bar layer: AnimateableLabel, which renders text via a Core Animation layer and supports dynamic type scaling; EdgeFadedView, which applies a gradient mask to create leading and trailing fade effects on scroll; GestureScrollView, a UIScrollView subclass that supports interactive, swipe-only, or no-scroll modes via swipe gesture recognizers; and ViewTitleViewContainer, a layout helper that constrains a child view to fill its bounds, used for navigation item title views.

Sources/Tabman/Bar/Generic · high confidence

New iOS Example App with Gradient Background and Tab Item Bar Support

The iOS example application has been completely rewritten to demonstrate modern usage patterns. It now features a main entry point that displays a gradient background behind the content, utilizing a new \GradientBackgroundViewController\ and custom color extensions. The example showcases two primary view controllers: a \ButtonBarExampleViewController\ for standard button bars, and a \TabItemBarExampleViewController\ which demonstrates the new \selectedImage\ support for \TMTabItemBarButton\ items using SF Symbols. The app also includes a dedicated launch screen storyboard and updated asset catalogs.

Sources/iOS · high confidence

Redesigned bar view architecture with new layout and scroll handling

The TMBarView component has been refactored to use a new internal layout grid (TMBarViewLayoutGrid) and dedicated scroll and update handlers (TMBarViewScrollHandler, TMBarViewUpdateHandler). This change introduces support for swipe scroll mode, customizable spacing between bar components, and improved handling of content insets and edge fades. It also adds the ability to pin accessory views to the bar edges so they remain visible during scrolling, and implements a new focus rect system to better manage indicator positioning and overscroll behavior.

Sources/Tabman/Bar/BarView · high confidence

Redesigned tab bar button interaction and state management

The tab bar button system has been refactored to support granular selection states (unselected, partial, selected) and improved visual feedback. Buttons now feature a dedicated background view with support for flat, blur, and custom styles, and can optionally fade their alpha when unselected. The interaction logic has been split into separate controllers for state and touch handling, enabling smoother transitions during page swipes and better accessibility support through updated labels and traits.

Sources/Tabman/Bar/BarButton · high confidence

Refactor bar layout into modular protocol-based architecture

The bar layout system has been restructured to use a protocol-driven design, introducing \TMBarLayoutParent\ and \TMBarLayoutInsetGuides\ to decouple layout logic from the view hierarchy. This change exposes new public configuration options on \TMBarLayout\, including a \ContentMode\ enum (supporting \.intrinsic\ and \.fit\) to control sizing behavior, an \Alignment\ enum (adding \.centerDistributed\ alongside leading, center, and trailing) for positioning, and a \transitionStyle\ property to manage animation styles for layout updates.

Sources/Tabman/Bar/BarLayout · high confidence

Refactored indicator layout into dedicated container and handler classes

The indicator view logic has been restructured to improve layout management. A new \TMBarIndicatorContainer\ now wraps the \TMBarIndicator\ and manages its initial Auto Layout constraints (leading, top, bottom, width). A separate \TMBarIndicatorLayoutHandler\ struct is responsible for updating these constraints when the indicator's position changes, decoupling the constraint updates from the view itself.

Sources/Tabman/Bar/BarIndicator · high confidence

Simplified Example project workspace configuration

The Example project's Xcode workspace configuration has been simplified by adding standard workspace data files. This ensures the workspace is correctly recognized by Xcode and Swift Package Manager, providing a cleaner setup for developers running the example code.

.swiftpm, Sources/Examples.xcodeproj/project.xcworkspace · medium confidence

Tabman 4.0.1 release with iOS 14 requirement and Swift 6 support

This release updates the project to require iOS 14 or above and adds support for Swift 6 (Xcode 16+). The version number has been bumped to 4.0.1, and the dependency on Pageboy has been updated to version 5.0.2. Documentation and configuration files, including the README, CHANGELOG, and Jazzy config, have been refreshed to reflect these changes.

(repo-wide) · high confidence

Tabman project structure reorganized and rebuilt

The Tabman Xcode project has been completely restructured, introducing a new set of source files and build configurations. This change adds support for new bar indicators (chevron, dot, block, line), a new hiding bar with triggers, and an auto-insetting engine for handling safe area insets. It also integrates the Pageboy framework as a dependency and includes a privacy manifest file.

Sources/Tabman.xcodeproj · medium confidence

Workspace configuration updated to include Example project

The Tabman workspace has been reconfigured to explicitly reference the Example project alongside the main Tabman source project. This change ensures that the example application is properly integrated into the workspace structure, allowing developers to build and run the example app directly from the workspace.

Tabman.xcworkspace · high confidence

Test coverage

Added mock implementations for Tabman bar testing; Added unit tests for TabmanViewController bar placement.

Dependencies

Add Swift Package Manager support and Ruby dependency manifests

The project now supports installation via Swift Package Manager (SPM), introducing a Package.swift that defines the Tabman library with a dependency on Pageboy 5.0.2 and compatibility with Swift 5 and 6. Additionally, a Gemfile and Gemfile.lock have been added to manage Ruby dependencies, specifically including fastlane, danger, danger-swiftlint, and jazzy for CI and documentation workflows.

(dependencies) · high confidence

Housekeeping

Added Xcode workspace configuration files

The project now includes the standard Xcode workspace structure, specifically the \contents.xcworkspacedata\ file that references the \Tabman.xcodeproj\ and the \IDEWorkspaceChecks.plist\ file to suppress the 32-bit warning in Xcode. This ensures the workspace is correctly recognized and configured by the IDE.

Sources/Tabman.xcodeproj/project.xcworkspace · 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 63 → 41 (-22.2)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 99 → 99 (+0.0)
  • Architecture 90 → 98 (+7.4)
  • Maturity 57 → 57 (+0.0)
  • Readiness 60 → 45 (-15.1)
  • Security 60 → 72 (+12.3)
  • Accessibility 21 (new)

Resolved (4)

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

New (2)

  • Coverage not measured — Swift suite
  • High CVE: [GHSA redacted] (Gemfile.lock)

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

Survey your own repository

uias/Tabman 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 30 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 b666020935dbd1c3fb5a97ad96f0fe7444c907a6 — 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-cb25ca4feafa.