Skip to content
CAI
Software that uses CAICheck a score

longitachi/ZLPhotoBrowser

54.5

Adequate · 30 September 2026

42k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

ZLPhotoBrowser is a pure Swift iOS library for selecting and editing photos and videos. It provides a customizable camera interface, an image editor with undo/redo capabilities, and gesture-driven dismissal animations. The system supports multiple languages and integrates with both UIKit and SwiftUI environments.

How it got here

2015–2017 — Swift migration and v5.0 release

8 changes.

This period focused on migrating the ZLPhotoBrowser library from Objective-C to Swift, culminating in the release of version 5.0.0 with Swift Package Manager support. The work involved removing legacy Objective-C code and storyboard files while restructuring the project into a pure Swift framework and adding SwiftUI example targets.

2019–2020 — Swift migration and internationalization

17 changes.

The project underwent a comprehensive migration to Swift and modern iOS architecture, introducing a customizable camera component and robust undo/redo capabilities for the image editor. This period also focused heavily on global accessibility, adding extensive localization support for numerous languages and ensuring compliance with privacy regulations.

2021–2025 — Internationalization and SwiftUI integration

5 changes.

This period focused on expanding the library's global reach by adding localization support for Spanish (Latin America), Brazilian Portuguese, Turkish, and Arabic. Additionally, a new SwiftUI-based demo application was introduced to provide a concrete reference for integrating the photo browser framework in modern Swift projects.

Features

Add English localization strings for ZLPhotoBrowser

The ZLPhotoBrowser library now includes a complete set of English user-facing text strings, covering camera controls, album navigation, permission alerts, video selection constraints, and UI labels. This enables the photo browser interface to display correctly in English for users.

Sources/ZLPhotoBrowser.bundle/en.lproj · high confidence

Add SwiftUI demo app for photo browsing

A new SwiftUI-based example application has been added to demonstrate the ZLPhotoBrowser library. This demo includes a main view that presents a photo library picker and displays selected images in a grid, along with a preview capability, providing a concrete reference for integrating the framework in SwiftUI projects.

SwiftUIExample · high confidence

Added Arabic localization for the photo browser

Introduced Arabic language support for the ZLPhotoBrowser interface by adding a new Localizable.strings file. This update provides translations for UI elements including camera controls, album navigation, editing tools, permission alerts, and system album categories, ensuring the app displays correctly for Arabic-speaking users.

Sources/ZLPhotoBrowser.bundle/ar.lproj · high confidence

Added Dutch language support

Users can now see the photo browser interface in Dutch. This change adds a new localization file (Localizable.strings) containing translations for UI elements such as album names, camera controls, permission alerts, and editing options.

Sources/ZLPhotoBrowser.bundle/nl.lproj · high confidence

Added French and Indonesian language support

The photo browser now includes localized user interface strings for French (fr) and Indonesian (ms), covering core actions like capturing photos, editing, and saving, as well as permission alerts and album category labels.

Sources/ZLPhotoBrowser.bundle/fr.lproj, Sources/ZLPhotoBrowser.bundle/ms.lproj · high confidence

Added German, Indonesian, Italian, and Vietnamese localization strings

The ZLPhotoBrowser bundle now includes new Localizable.strings files for German (de.lproj), Indonesian (id.lproj), Italian (it.lproj), and Vietnamese (vi.lproj). These files provide translations for the photo browser's UI elements, including camera controls, album labels, permission alerts, and video selection constraints, enabling the library to display interface text in these languages.

Sources/ZLPhotoBrowser.bundle/de.lproj · high confidence

Added Japanese (ja-US) localization for the photo browser

The ZLPhotoBrowser library now includes a Japanese language bundle (ja-US.lproj/Localizable.strings). This adds translations for all user-facing strings, including camera controls, album navigation, permission alerts, video selection limits, and system album categories, allowing the interface to display in Japanese for users in that locale.

Sources/ZLPhotoBrowser.bundle/ja-US.lproj · high confidence

Added Korean localization for ZLPhotoBrowser

This change introduces a new Korean language resource file (ko.lproj/Localizable.strings) containing 85 localized strings for the photo browser interface. Users will now see Korean text for UI elements such as camera controls, album filters (e.g., 'Panoramas', 'Live Photos'), permission alerts, and editing options, improving accessibility for Korean-speaking users.

Sources/ZLPhotoBrowser.bundle/ko.lproj · high confidence

Added Russian language support for ZLPhotoBrowser

Introduced a new Russian localization file (ru.lproj/Localizable.strings) containing 85 translated strings for the photo browser interface. This update covers UI labels for camera and album interactions, editing tools, permission alerts, video selection constraints, and system album categories, enabling the library to display in Russian for users.

Sources/ZLPhotoBrowser.bundle/ru.lproj · high confidence

Added Simplified and Traditional Chinese localization strings

The ZLPhotoBrowser bundle now includes Localizable.strings files for Simplified Chinese (zh-Hans) and Traditional Chinese (zh-Hant). This adds user-facing text for camera controls, album navigation, permission alerts, video editing options, and system album categories in both Chinese variants, enabling the library to display its interface in these languages.

Sources/ZLPhotoBrowser.bundle/zh-Hans.lproj, Sources/ZLPhotoBrowser.bundle/zh-Hant.lproj · high confidence

Added Spanish (Latin America) and Brazilian Portuguese localization files

The app now includes dedicated Localizable.strings files for Spanish (es-419) and Brazilian Portuguese (pt-BR), providing translated UI text for camera, album, editing, and permission prompts in these regions.

Sources/ZLPhotoBrowser.bundle/es-419.lproj, Sources/ZLPhotoBrowser.bundle/pt-BR.lproj · high confidence

Added Turkish language support

The library now includes a Turkish localization, providing translated strings for the user interface. This covers labels for camera and album actions (e.g., "Kamera", "Albüm"), editing tools (e.g., "Parlaklık", "Kontrast"), system permission alerts, video selection constraints, and album category names (e.g., "Panoramalar", "Live Photo'lar"), ensuring the app displays correctly in Turkish.

Sources/ZLPhotoBrowser.bundle/tr.lproj · high confidence

Added Xcode workspace configuration for Swift Package Manager

A new contents.xcworkspacedata file has been added to the .swiftpm/xcode/package.xcworkspace directory, establishing the workspace structure for the Swift Package. This change enables the package to be opened and edited directly within Xcode, facilitating a smoother development and debugging experience for users integrating this library.

.swiftpm · high confidence

Added workspace to manage Example, SwiftUIExample, and library targets

The project now includes a new workspace that groups the main library project with separate Xcode projects for the standard Example app and a new SwiftUIExample app. This structure allows users to easily build and run both the UIKit-based demo and the new SwiftUI demo alongside the core library.

ZLPhotoBrowser.xcworkspace · high confidence

Example project restructured with embedded dependencies and demo features

The Example project has been reorganized to include the Kingfisher and SnapKit libraries directly within the project sources rather than relying solely on external package management, and adds new demo capabilities including a WeChat Moments-style interface, image sticker support, and a language picker. The project configuration now embeds the ZLPhotoBrowser framework and includes localization files for Spanish and Portuguese, while the workspace settings have been updated to reflect the new project structure.

Example/Example.xcodeproj · high confidence

Image editor now supports undo and redo for all editing operations

The image editor now tracks every user action—such as drawing, erasing, cropping, applying filters, adjusting brightness/contrast/saturation, and adding or modifying stickers—allowing users to reverse or reapply changes. This is implemented via a new \ZLEditorManager\ that records \ZLEditorAction\ instances (including state snapshots for stickers and clip/adjust parameters) and exposes undo/redo methods to the \ZLEditImageViewController\, which updates the UI and re-renders the image accordingly after each undo or redo step.

Sources/Edit · high confidence

Introduce ZLCustomCamera for a fully customizable camera experience

The library now includes a new \ZLCustomCamera\ component that allows developers to integrate a camera interface with a fully customizable UI. This component exposes public properties and blocks for layout configuration, button styling, and callbacks (such as \takeDoneBlock\ and \cancelBlock\), enabling users to tailor the camera's appearance and behavior to their specific app design rather than relying on a fixed default interface.

Sources/Camera · high confidence

New album list UI components and configuration classes

The framework introduces new UI components for the album list interface, including ZLAlbumListCell, ZLAlbumListController, and ZLEmbedAlbumListView, which handle the display and selection of photo albums. It also adds ZLAlbumListModel to manage album data and ZLCameraConfiguration to centralize camera-specific settings. These changes support a more structured and customizable album browsing experience.

Sources/General · high confidence

Removals

Removal of Main.storyboard

The Main.storyboard file has been deleted from the project. This removes the legacy interface definition that previously contained the navigation controller and the main view controller with the photo selection button, indicating a shift away from using this specific storyboard for the app's primary UI layout.

ZLPhotoBrowser/Base.lproj · high confidence

Removal of legacy Objective-C photo browser components

The ZLPhotoBrowser/PhotoBrowser directory has removed a comprehensive set of legacy Objective-C files, including the core view controllers (ZLPhotoActionSheet, ZLPhotoBrowser, ZLShowBigImgViewController), supporting utilities (ZLPhotoTool, ZLSelectPhotoModel), and UI helpers (ToastUtils, ZLAnimationTool, ZLNoAuthorityViewController). This cleanup eliminates the underlying implementation of the photo selection and browsing interface, indicating a shift away from the previous Objective-C architecture.

ZLPhotoBrowser/PhotoBrowser · high confidence

Removal of legacy photo browser cell implementations

The \ZLPhotoBrowser/cells\ directory has been completely removed, deleting the source code and Interface Builder files for \ZLBigImageCell\, \ZLCollectionCell\, and \ZLPhotoBrowserCell\. This eliminates the legacy UI components used for displaying large images, collection grid items, and the album list rows, indicating a structural shift in how the photo browser renders its content.

ZLPhotoBrowser/PhotoBrowser/cells · high confidence

Removed legacy demo application entry points

The legacy demo application files (AppDelegate, ViewController, and main.m) within the ZLPhotoBrowser directory have been removed. This cleanup eliminates the old sample code that previously demonstrated how to integrate the library, leaving only the core framework components.

ZLPhotoBrowser · high confidence

Behavioural changes

64 commits (0 fixes) modifying ZLPhotoBrowser.xcodeproj/project.xcworkspace/xcuserdata

A change to existing behaviour in ZLPhotoBrowser.xcodeproj/project.xcworkspace/xcuserdata — 64 commits, 1 file.

ZLPhotoBrowser.xcodeproj/project.xcworkspace/xcuserdata · medium confidence · unverified

Added privacy manifest and updated project configuration

The library now includes a PrivacyInfo.xcprivacy file declaring that no private APIs are accessed, no data is collected, and tracking is disabled, ensuring compliance with modern App Store privacy requirements. Additionally, the Info.plist has been restructured to use build settings for versioning and bundle type, and the project header has been updated to import the ZLWeakProxy implementation.

Sources · high confidence

Example app migrated to iOS 13+ scene lifecycle and Swift

The Example app has been updated to support modern iOS lifecycle management by adopting the UIScene-based architecture (including SceneDelegate and Main.storyboard) for iOS 13 and later, while maintaining a legacy UIWindow-based initialization for earlier versions. The project source code has been converted to Swift, introducing a new AppDelegate structure and custom alert controller implementations, alongside updated asset catalogs and dependency integrations like Kingfisher.

Example/Example · high confidence

New gesture-driven dismiss animations for image preview and thumbnail views

The animation subsystem now supports interactive, gesture-driven dismissal for the image preview and thumbnail interfaces. Users can pull down on the image preview to dismiss it with a scaling animation, and swipe from the screen edge on the thumbnail view to dismiss the entire controller. These changes introduce new interactive transition classes (ZLImagePreviewDismissInteractiveTransition, ZLThumbnailDismissInteractiveTransition, etc.) to handle these specific user interactions.

Sources/Animation · high confidence

Refactor extension utilities to use ZLPhotoBrowserWrapper

The framework's extension utilities (such as those for UIImage, UIColor, PHAsset, and Bundle) have been refactored to use the ZLPhotoBrowserWrapper type. This change standardizes how these extensions access their base objects, ensuring consistent behavior across the library and supporting the framework's migration to a pure Swift implementation.

Sources/Extensions · high confidence

Xcode project upgraded to version 12 and converted to a Swift framework

The ZLPhotoBrowser project configuration has been updated to Xcode 12 (LastUpgradeVersion 1200, objectVersion 54). The build target has shifted from an application bundle (ZLPhotoBrowser.app) to a framework (ZLPhotoBrowser.framework), and the source files have been converted from Objective-C (.m/.h) to Swift (.swift). Additionally, the workspace reference has been corrected to properly locate the project.

ZLPhotoBrowser.xcodeproj · high confidence

Test coverage

Added XCTest suite for ZLPhotoBrowser on Linux

Added the necessary XCTest infrastructure to support running unit tests on Linux platforms. This includes the main test entry point (LinuxMain.swift), the XCTest manifest for test discovery (XCTestManifests.swift), and a basic functional test case (ZLPhotoBrowserTests.swift) that verifies the ZLPhotoBrowser module loads correctly.

Tests · high confidence

Dependencies

Initial release of ZLPhotoBrowser 5.0.0 with Swift Package Manager support

This change introduces the first official release of ZLPhotoBrowser version 5.0.0, adding support for Swift Package Manager via a new Package.swift manifest alongside the existing CocoaPods podspec. The library is defined as a pure Swift implementation targeting iOS 10.0 and Swift versions 5.0 through 5.2, requiring frameworks such as UIKit, Photos, PhotosUI, AVFoundation, CoreMotion, and Accelerate. It includes privacy manifest resources and bundles, marking the transition to a fully Swift-based architecture for this photo and video selection library.

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

Lenses

  • Code Health 87 → 88 (+0.6)
  • Architecture 93 → 86 (-6.8)
  • Maturity 58 → 59 (+0.6)
  • Readiness 53 → 40 (-13.0)
  • Security 67 → 67 (+0.0)

Resolved (8)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Hotspot: Sources/Edit/ZLClipImageViewController.swift (Sources/Edit/ZLClipImageViewController.swift)
  • Hotspot: Sources/Edit/ZLEditImageViewController.swift (Sources/Edit/ZLEditImageViewController.swift)
  • Hotspot: Sources/Edit/ZLEditVideoViewController.swift (Sources/Edit/ZLEditVideoViewController.swift)
  • Hotspot: Sources/General/ZLImagePreviewController.swift (Sources/General/ZLImagePreviewController.swift)
  • Hotspot: Sources/General/ZLPhotoPreviewController.swift (Sources/General/ZLPhotoPreviewController.swift)
  • Hotspot: Sources/General/ZLThumbnailViewController.swift (Sources/General/ZLThumbnailViewController.swift)

New (10)

  • Coverage not measured — Swift suite
  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
  • Duplicated block (14 lines × 2) (Example/Example/SnapKit/Debugging.swift)
  • Duplicated block (8 lines × 2) (Example/Example/Kingfisher/General/KingfisherError.swift)
  • Low cohesion: Builder (LCOM4 17) (Example/Example/Kingfisher/General/KF.swift)
  • Projects may be oversized for their cohesion
  • Typo in base class name: 'ZLBaseStickertState' contains a trailing 't' (Stickert vs Sticker). This is inconsistent with the naming convention of its subclasses (ZLImageStickerState, ZLTextStickerState) and the general domain terminology.
  • ZLGeneralDefine.swift.canAddModel (cognitive 20) (Sources/General/ZLGeneralDefine.swift)
  • ZLLanguageType.key (cognitive 22) (Sources/General/ZLLanguageDefine.swift)
  • ZLLanguageType.key (cyclomatic 35) (Sources/General/ZLLanguageDefine.swift)

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

Survey your own repository

longitachi/ZLPhotoBrowser 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 726f75af93771990425d516f423316c63800a0e6 — 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.