JiongXing/PhotoBrowser
59.0
Adequate · 1 October 2026
24.2k
lines of production code
Swift
primary language
2
measurements over time
What this system is
JXPhotoBrowser is an iOS library that provides a customizable photo and video browser with support for infinite looping, auto-play, and configurable transition animations. It is implemented in Swift and supports integration via Swift Package Manager, CocoaPods, and Carthage. The system includes demo applications for both UIKit and SwiftUI to showcase its capabilities and configuration options.
Features
Add Carthage integration demo project
A new demo project (Demo-Carthage) has been added to demonstrate integrating JXPhotoBrowser via Carthage. It includes a minimal iOS 15+ app that embeds the JXPhotoBrowser.xcframework and verifies the integration at launch.
Demo-Carthage · high confidence
New OpenSpec agent skills for change management workflows
Added four new agent skills under \.agents/skills/\ to support the OpenSpec workflow: \openspec-apply-change\ for implementing tasks from a change, \openspec-archive-change\ for finalizing and archiving completed changes (including delta-spec syncing), \openspec-explore\ for interactive requirement investigation and design thinking, and \openspec-propose\ for generating complete change artifacts (proposal, specs, design, tasks) in one step. A \.openspec-target\ file was also created to register the 'codex' target for these skills.
.agents · high confidence
New SwiftUI demo app for JXPhotoBrowser
A new SwiftUI-based demo application has been added to showcase the JXPhotoBrowser library. The app includes a main content view with a photo banner (using a UIViewControllerRepresentable bridge to embed the UIKit browser), a full-screen photo browser presenter, and settings panels to control looping, autoplay, transition animations, and scroll direction. It demonstrates integrating the browser with SwiftUI via delegates and handling media resources (images and videos) with Kingfisher for caching and loading.
Demo-SwiftUI/Demo · high confidence
New SwiftUI demo project with Kingfisher and JXPhotoBrowser dependencies
A new SwiftUI-based demo application has been added to the repository, providing a sample project for developers. The project is configured to depend on the Kingfisher and JXPhotoBrowser Swift packages, and sets the iOS deployment target to 16.0.
Demo-SwiftUI/Demo.xcodeproj · high confidence
New UIKit demo application scaffold
A new Demo-UIKit sample application has been added, providing a standard iOS project structure with an AppDelegate and SceneDelegate. The project is configured to use CocoaPods for dependency management and targets iOS 15 as the minimum deployment version, ensuring compatibility with modern scene-based lifecycle management.
Demo-UIKit/Demo.xcodeproj · high confidence
New demo home page with configurable banner and browser settings
The demo application now includes a new HomePage featuring a top banner and a media collection view. Users can toggle infinite looping and auto-play for the banner via the BannerSettingsPanel, and customize the photo browser's transition animation (fade, zoom, or none) and scroll direction (horizontal or vertical) via the BrowserSettingsPanel. The page displays remote images and videos, with a dedicated VideoPlayerCell for playback and a VideoSaveService to handle saving videos to the photo library.
Demo-UIKit/Demo/HomePage · high confidence
Architecture
JXPhotoBrowser framework project structure and build configuration
The JXPhotoBrowser framework project has been restructured to include a complete Xcode project file, workspace, and scheme configuration. This change establishes the build settings for the framework, incorporating source files such as JXPhotoBrowserViewController, various animators (JXFadeAnimator, JXZoomPresentAnimator, etc.), and a PrivacyInfo.xcprivacy resource. The project is configured to build the JXPhotoBrowser.framework target, linking against UIKit, and sets up the necessary build phases for sources, frameworks, and resources.
JXPhotoBrowser.xcodeproj · high confidence
Behavioural changes
JXPhotoBrowser restructured for Swift with new cell protocol, overlays, and zoom transitions
The Sources directory has been completely rewritten in Swift, replacing the previous Objective-C implementation. The library now uses a \JXPhotoBrowserCellProtocol\ for custom cells instead of inheritance, and introduces a \JXPhotoBrowserOverlay\ protocol for adding UI components like the new \JXPageIndicatorOverlay\. Transition animations are now configurable via \JXPhotoBrowserTransitionType\ (fade, zoom, or none) and are implemented by dedicated animator classes (\JXFadeAnimator\, \JXZoomPresentAnimator\, \JXZoomDismissAnimator\). The main \JXPhotoBrowserViewController\ now supports vertical scrolling, infinite looping, and programmatic auto-play. A lightweight \JXImageCell\ is provided for simple image display, and a \PrivacyInfo.xcprivacy\ file has been added for App Store compliance.
Sources · high confidence
Test coverage
Added validation harness for browser lifecycle and rotation behavior
A new validation suite in Validation/Rotation introduces a standalone test host and automated scripts to verify the photo browser's state management during size transitions, dismissal, and rotation. The suite includes unit tests for data reloading and thumbnail restoration, UI tests for gesture interactions and navigation container dismissal, and video save tests to ensure temporary files are handled correctly. This allows developers to reproduce and verify fixes for rotation and lifecycle regressions without modifying the main project.
Validation · high confidence
Dependencies
JXPhotoBrowser 4.2.0: iOS 15 minimum, Swift 5.4, and Kingfisher 8.13.0
The JXPhotoBrowser library has been updated to version 4.2.0, raising the minimum deployment target to iOS 15 and requiring Swift 5.4. The dependency on Kingfisher has been updated to version 8.13.0, and the project now includes a \PrivacyInfo.xcprivacy\ resource bundle for compliance. These changes are reflected in the updated \Package.swift\, \JXPhotoBrowser.podspec\, and the new demo project dependency files (\Podfile\, \Package.resolved\).
(dependencies) · high confidence
Kingfisher pod updated to 4.2.0 with iOS 15+ support and cache improvements
The Kingfisher dependency in the Demo-UIKit project has been updated to version 4.2.0. This release raises the minimum deployment target to iOS 15 (reflecting the current Xcode minimum) and introduces improvements to the browser paging and state handling. Additionally, the update includes a fix for navigation container dismissal and adds support for Carthage integration.
Demo-UIKit/Pods · high confidence
Housekeeping
Archives OpenSpec change records and establishes agent workflow specifications
This change moves completed OpenSpec change records (browser lifecycle, rotation state, iOS minimum deployment, and video saving) into the \openspec/changes/archive/\ directory, effectively closing out those specific feature and fix tracks. Simultaneously, it initializes the OpenSpec project structure by adding \config.yaml\ and baseline specification files for the new \agent-workflow\ capability, which defines the rules for task routing, code investigation, and verification evidence for AI agents. This represents a shift in development process documentation rather than a change to the library's runtime behavior.
openspec · 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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 58 → 59 (+0.7)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 98 → 98 (+0.0)
- Architecture 93 → 99 (+5.2)
- Maturity 51 → 60 (+9.3)
- Readiness 40 → 40 (-0.3)
- Security 95 → 88 (-7.2)
Resolved (7)
- Documentation: no architecture or design documentation (README.md)
- Documentation: no licence statement (README.md)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No automated tests
- No tests found
- Test reliability not included
New (33)
- Coverage not measured — Swift suite
- Documentation: no project overview (README.md)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Hotspot: Sources/JXZoomImageCell.swift (Sources/JXZoomImageCell.swift)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- No assertions: testAnimatedNavigationContainerDismissRestoresThumbnail (Validation/Rotation/LifecycleUITests.swift)
- No assertions: testAnimatedNavigationDuringTransition (Validation/Rotation/RotationTests.swift)
- No assertions: testDirectionsSpacingAndLoopBoundary (Validation/Rotation/RotationTests.swift)
- No assertions: testDismissCancelPausesAutoplayThenResumes (Validation/Rotation/LifecycleUITests.swift)
- …and 13 more
Changes since last survey
- 16 commits — 7 feature/other, 9 fixes
By area
- (repo) — 3 commits
- Validation/Rotation — 3 commits
- (root) — 2 commits
- Demo-SwiftUI/Demo — 2 commits
- openspec/changes — 2 commits
- .agents/skills — 1 commit
- Demo-UIKit/Pods — 1 commit
- Documentation/Release-4.2.0.md — 1 commit
- Sources/JXPhotoBrowserViewController.swift — 1 commit
Notable commits
- fix: Merge commit '45315994694dd4c9c19fd40f40c5c5256d99f6bc' into codex/fix-rotation
- fix: Merge pull request #241 from Vinzius/fix/rotation
- fix: fix: coordinate browser lifecycle and video saving
- fix: fix: declare SwiftUI image loading actor isolation
- fix: fix: declare SwiftUI image loading actor isolation
- fix: fix: preserve in-flight page and sync cell geometry during rotation
- fix: fix: reconcile page and cell state during size transitions
- fix: fix: reconcile page and cell state during size transitions
- fix: release: prepare 4.2.0 and fix navigation container dismissal
- change: Merge remote-tracking branch 'origin/master'
- change: build: raise minimum deployment to iOS 15 and upgrade dependencies
- change: chore: establish Codex workflow with OpenSpec and CodeGraph
- change: docs: archive verified rotation repair and PR delivery
- change: docs: record rotation repair plan and validation status
- change: docs: record verified 4.2.0 publication
- change: release: finalize 4.2.0 release metadata
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
JiongXing/PhotoBrowser 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 57b8414d9b49faaa8f841fdc4887fa200af47eda — 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.