uias/Pageboy
61.4
Adequate · 1 October 2026
2.9k
lines of production code
Swift
primary language
2
measurements over time
What this system is
Pageboy is a lightweight iOS and tvOS framework built on UIPageViewController that manages page-based navigation with support for horizontal and vertical orientations, infinite scrolling, and custom transitions. It provides features such as automatic scrolling, directional locking, and robust handling of rapid page changes, while ensuring thread safety through Swift 6 strict concurrency. The system includes comprehensive test coverage and example applications for iOS, tvOS, and macOS Catalyst to demonstrate its capabilities.
How it got here
2017 — Initial release and SPM integration
10 changes.
This period covers the initial release of the Pageboy framework, establishing its core architecture, source structure, and comprehensive test suite. It also introduces Swift Package Manager support, restructures the workspace for modern tooling, and sets up Fastlane automation for CI and releases.
2018 — Swift 6 concurrency and auto-scrolling
6 changes.
This period focused on refactoring the Pageboy library to ensure strict concurrency safety for Swift 6, including namespace changes and main actor annotations. It also introduced a new auto-scrolling feature with configurable timing and interaction handling, alongside various utility extensions and workspace configuration updates.
2019–2022 — Catalyst, tvOS, and stability improvements
7 changes.
This period focused on expanding platform support by adding Mac Catalyst and tvOS targets to the example application, including specific UI adaptations like toolbars and status views. Concurrently, the core library was stabilized by fixing crashes during rapid page transitions and improving memory management through weak reference tracking.
Features
Add Catalyst support to Example app
The Example project now includes a dedicated iOS target that supports Apple Catalyst, allowing the demo application to run on macOS. This change introduces macOS-specific source files, such as SceneDelegate and PageboyTouchBar, and configures the Xcode project to build and embed the Pageboy framework for the macOS platform alongside the existing iOS and tvOS targets.
Sources/Examples.xcodeproj · high confidence
Add Mac Catalyst support to the Example app
The Example iOS app now supports Mac Catalyst, enabling users to run the demo on macOS with platform-specific UI elements. This includes a custom navigation controller that correctly forwards status bar and home indicator state to its top view controller, a transparent navigation bar with a subtle separator, and Catalyst-specific controls: a Mac toolbar with Next/Previous page buttons and a Touch Bar with corresponding chevron items for paging through content.
Sources/iOS/Extras · high confidence
Add tvOS example app
The tvOS example application has been added, providing a complete implementation of the Pageboy library for Apple TV. This includes the app entry point, a page view controller demonstrating paging with five child view controllers, and all necessary asset catalogs for app icons and top shelf images.
Sources/tvOS · high confidence
Added Xcode workspace configuration for Swift Package Manager
A new workspace file (contents.xcworkspacedata) has been added to the .swiftpm directory, enabling the package to be opened and edited directly within Xcode. This change facilitates local development and debugging by providing a standard Xcode workspace structure for the Swift Package Manager project.
.swiftpm · high confidence
Added shared UI components for the Example app
New shared Swift files have been added to the Sources/Shared directory to support the Example application. These include GradientBackgroundViewController for rendering gradient backgrounds, PageboyStatusView for displaying pagination status (page count, position, and current page) with specific font sizing for tvOS, and a UIColor extension defining primary and secondary colors used by the example.
Sources/Shared · high confidence
Initial Fastlane automation for testing and GitHub releases
Added Fastlane configuration to automate the iOS build pipeline. The new setup includes a 'test' lane that runs unit tests using Scan on an iPhone 15 simulator, and a 'deploy' lane that executes tests, reads the version from the project's xcconfig file, and publishes a new release to the uias/Pageboy GitHub repository via the GitHub API, followed by a Slack notification.
fastlane · high confidence
Initial project structure and source file registration
The Pageboy framework project has been initialized with a new \project.pbxproj\ file that registers the core source files, including \PageboyViewController.swift\, its associated extensions (such as \PageboyViewController+AutoScrolling.swift\ and \PageboyViewController+Transitioning.swift\), model classes like \Page.swift\, and protocol definitions for the data source and delegate. This change establishes the build configuration for the framework, linking these components into the \Pageboy.framework\ target and setting up the necessary group structure for extensions, models, and protocols.
Sources/Pageboy.xcodeproj · high confidence
Initial release of Pageboy page view controller framework
Introduces Pageboy, a lightweight page view controller built on top of UIPageViewController. This release provides a structured API for managing page-based navigation, including properties for controlling navigation orientation (horizontal/vertical), inter-page spacing, and infinite scrolling. It includes a data source and delegate pattern for view controller management, automatic handling of scroll detection and position updates, and support for custom transitions. The framework also exposes standard UIScrollView interaction properties such as directional locking, bounce behavior, and touch constraints, along with a privacy manifest for App Store compliance.
Sources/Pageboy · high confidence
Introduction of auto-scrolling capability for PageboyViewController
This change introduces a new auto-scrolling feature to Pageboy, allowing pages to automatically advance after a set interval. The \PageboyAutoScroller\ class manages the timing logic, supporting short (5s), long (10s), or custom durations, and provides configuration options such as \cancelsOnScroll\ to pause auto-scrolling during user interaction and \restartsOnScrollEnd\ to control resumption behavior. The \PageboyViewController\ extension implements the \PageboyAutoScrollerHandler\ protocol to trigger the actual page transitions, while public delegate protocols allow observers to monitor when scroll animations begin and finish.
Sources/Pageboy/AutoScrolling · high confidence
New utility extensions for UI and threading
This change introduces a suite of new utility extensions in the \Sources/Pageboy/Utilities/Extensions\ directory to support internal logic. Key additions include \DispatchQueue+main.swift\ for synchronous main-thread execution, \UIView+Localization.swift\ which utilizes this dispatch method to detect right-to-left layout direction, and helpers for safe \UIApplication\ access, \UIPageViewController\ scroll view retrieval, scroll interaction state, view animations, and auto-layout constraints.
Sources/Pageboy/Utilities/Extensions · high confidence
Behavioural changes
19 commits (2 fixes) modifying Artwork
A change to existing behaviour in Artwork — 19 commits (2 fixs), 2 files.
Artwork · medium confidence · unverified
Added Xcode schemes for iOS and tvOS targets
New Xcode scheme files have been added for the Pageboy iOS and Pageboy tvOS targets, enabling direct building, testing, launching, and archiving of these specific platform frameworks within the Xcode IDE.
Sources/Pageboy.xcodeproj/xcshareddata · high confidence
Added Xcode workspace checks configuration
The project now includes an IDEWorkspaceChecks.plist file to manage Xcode workspace settings, specifically enabling the Mac32BitWarning computation check. This ensures consistent workspace behavior when opened in Xcode 9.3 and later versions.
Pageboy.xcworkspace/xcshareddata · high confidence
Fixes crash during fast page transitions and improves view controller mapping
Pageboy now prevents crashes that occurred during rapid sequential page transitions by introducing a \PatchedPageViewController\ that guards against recursive \setViewControllers\ calls. Additionally, view controller mapping is improved via a new \IndexedObjectMap\ utility that uses weak references to track objects by index, ensuring valid keys and preventing memory leaks or invalid state during navigation.
Sources/Pageboy/Utilities · high confidence
Navigation direction and page types are now nested within PageboyViewController
The \NavigationDirection\ and \Page\ types, along with \PageIndex\, have been moved from the global namespace into the \PageboyViewController\ namespace. Users must now reference these types as \PageboyViewController.NavigationDirection\ and \PageboyViewController.Page\ (e.g., \PageboyViewController.Page.next\) instead of using the bare names. This change also introduces \@MainActor\ annotations to these types to support strict concurrency checking.
Sources/Pageboy/Model · high confidence
Pageboy 5.0 requires iOS 14/tvOS 14 and adds Swift 6 strict concurrency support
Pageboy 5.0 raises the minimum deployment target to iOS 14 and tvOS 14, dropping support for earlier versions. It introduces full support for Swift 6 strict concurrency, ensuring thread safety in modern Swift environments. The \PageboyViewController.deletePage()\ method now accepts a completion closure to notify callers when the operation finishes. Additionally, the \UIViewController.parentPageboy\ property has been removed, and a fix ensures that \PageboyViewController.currentPosition\ remains valid during navigation.
(repo-wide) · high confidence
Refactored page transition logic for Swift 6 concurrency safety
The transition handling code in the Pageboy library has been refactored to support Swift 6 strict concurrency. The internal \TransitionOperation\ class and its delegate protocol are now marked with \@MainActor\ to ensure thread safety, and the \CAAnimationDelegate\ methods use \nonisolated\ markers with \Task\ blocks to safely marshal callbacks back to the main actor. This change improves memory safety and prevents data races during page animations without altering the visible transition styles (push, fade, moveIn, reveal) or their configuration.
Sources/Pageboy/Transitioning · high confidence
Swift 6 concurrency compatibility and new scroll cancellation delegate
The Pageboy protocols have been updated to conform to Swift 6 strict concurrency requirements by adopting the \AnyObject\ constraint and marking them with \@MainActor\. Additionally, a new \didCancelScrollToPage\ delegate method has been added to \PageboyViewControllerDelegate\, allowing users to detect when a scroll to a new page is interrupted and the view controller returns to the previous page.
Sources/Pageboy/Protocols · high confidence
Workspace restructured to include Swift Package and local projects
The Pageboy workspace has been updated to explicitly reference the Swift Package (Package.swift), the Pageboy configuration file (Pageboy.xcconfig), and the local Xcode projects for both the Examples and the Pageboy library itself. This change consolidates the workspace structure to support the new Swift Package Manager integration alongside the existing local project references.
Pageboy.xcworkspace · high confidence
iOS example app now supports Catalyst and modern scene lifecycle
The iOS example application has been updated to support macOS Catalyst, adding a native toolbar for the Mac experience while maintaining the standard navigation bar on iOS. The app has also migrated to the modern UIScene lifecycle (SceneDelegate) to comply with current iOS requirements, replacing the legacy AppDelegate-based window setup.
Sources/iOS · high confidence
Test coverage
Added comprehensive test suite for PageboyViewController; Added test helper components for Pageboy testing.
Dependencies
Introduce Swift Package Manager support and update Ruby dependencies
The project now supports installation via Swift Package Manager, defined in a new Package.swift that targets iOS and tvOS 14 and configures Swift 5 and 6 language modes. Additionally, a Gemfile and Gemfile.lock have been added to manage Ruby dependencies, including fastlane, danger, and danger-swiftlint, establishing a standardized tooling environment for CI and linting.
(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 68 → 61 (-6.3)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 97 → 97 (+0.0)
- Architecture 94 → 98 (+3.5)
- Maturity 66 → 66 (+0.0)
- Readiness 60 → 45 (-15.2)
- Security 67 → 77 (+10.0)
Resolved (1)
- Documentation: no contributor guidance (README.md)
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/Pageboy 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 88e392f32e9135f6a6e54667acc9ed04e54c71b7 — 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.