Skip to content
CAI
Software that uses CAICheck a score

Yummypets/YPImagePicker

50.8

Weak · 30 September 2026

7.7k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a customizable iOS image and video picker library that allows users to capture, browse, and edit media from the device library or camera. It provides comprehensive tools for photo and video processing, including applying filters, cropping with various shapes, trimming video, and selecting cover frames. The library features a unified configuration API for UI customization, supports multi-selection, and handles media permissions and export logic across iOS 15 and later.

How it got here

2017–2018 — Core architecture and feature expansion

16 changes.

This period established the foundational structure of the YPImagePicker library, introducing a centralized configuration API and robust model infrastructure for media handling. Significant features were added, including video trimming, cover selection, circle cropping, and a refined gallery interface with multi-selection capabilities. The work also involved modernizing the codebase by removing XIBs, updating dependencies to support iOS 15, and enhancing camera and video capture behaviors.

2021–2022 — Localization, performance, and iOS 17 support

7 changes.

This period focused on enhancing the image picker's usability and compatibility by adding comprehensive localization for 24 languages and supporting iOS 17's microphone permission API. Developers improved performance through lazy loading of album thumbnails and introduced new features such as a Core Image filter interface and minWidth filtering. The release also standardized the development environment by adding Xcode workspace configurations for both CocoaPods and Swift Package Manager.

Features

Added Xcode workspace configuration for Swift Package Manager

An Xcode workspace file (contents.xcworkspacedata) has been added to the .swiftpm directory, enabling the package to be opened and edited directly within Xcode. This change improves the development workflow by allowing developers to use Xcode's native tools for debugging and code navigation without relying solely on command-line SPM commands.

.swiftpm · high confidence

Added localized strings and asset catalog for the image picker

The Source/Resources directory now includes a complete set of localized strings (YPImagePickerLocalizable.strings) for the image picker interface in 20 languages, including Arabic, Bulgarian, Czech, Danish, German, English, Spanish, Persian, French, Hebrew, Indonesian, Italian, Japanese, Khmer, Korean, Norwegian, Dutch, Polish, Portuguese (Brazil and Portugal), Romanian, Russian, Swedish, Thai, Turkish, Vietnamese, and Chinese (Simplified and Traditional). Additionally, an Assets.xcassets catalog has been added containing UI icons for the picker, such as arrows, capture, crop, flash, loop, video, and multiple selection indicators.

Source/Resources · high confidence

Centralized configuration API for UI customization

The image picker now exposes a unified configuration object (YPImagePickerConfiguration) that allows you to customize the picker's appearance and behavior. You can adjust colors, fonts, icons, and wordings via dedicated sub-objects (YPColors, YPFonts, YPIcons, YPWordings), control library and video settings, enable or disable specific screens and steps (like filters or cropping), and manage multiple selection options. This replaces the previous scattered configuration approach with a single, structured entry point for tailoring the picker to your app's design.

Source/Configuration · high confidence

Initial project structure and source file registration

The Xcode project file is initialized, registering the core source files and resources for the YPImagePicker library. This includes the main picker view controllers, library and camera views, video processing and trimming components, filter screens, and various extension classes for UI and media handling. The project also links against the Stevia and PryntTrimmerView frameworks and includes localization strings for multiple languages.

YPImagePicker.xcodeproj · high confidence

New crop view with circle crop type and dark mode support

The crop interface has been rebuilt to support a new circle crop type alongside existing rectangle options, with the overlay and toolbar now adapting to dark mode colors. Users can now select a circular crop shape, and the visual appearance of the crop area and surrounding curtains respects the system's dark mode setting.

Source/Filters/Crop · high confidence

New model types and error handling infrastructure added

The library introduces several new model structures and error types to support media handling and debugging. YPMediaItem is now an enum wrapping YPMediaPhoto and YPMediaVideo classes, which expose properties for original/modified images, EXIF metadata, PHAsset references, and video data fetching. YPError provides a generic localized error type, while YPTrimError handles specific video trimming failures. Supporting models include YPLibrarySelection for tracking crop and scroll state during multi-selection, YPDragDirection for gesture handling, YPFlashMode for camera flash control, and YPLog for conditional debug logging based on configuration.

Source/Models · high confidence

New photo filter selection interface

Added a new photo filter view controller and supporting components that allow users to browse, preview, and apply Core Image filters to photos. The implementation includes a collection view for displaying filter thumbnails, a preview image view that supports long-press to compare with the original, and logic to apply selected filters asynchronously before saving the modified image.

Source/Filters/Photo · high confidence

The selections gallery now displays a horizontal collection of selected media items, allowing users to remove items via a dedicated remove button and edit photos or videos by tapping on them. The gallery layout snaps to center each item during scrolling, and the interface supports configuration for hiding the remove button, showing filters, and customizing navigation bar colors and fonts.

Source/SelectionsGallery · high confidence

Video capture now supports pinch-to-zoom and prevents screen sleep during recording

Users can now pinch to zoom the camera view when recording video, with the zoom level constrained by the new \maxCameraZoomFactor\ configuration option. Additionally, the device screen will no longer dim or lock while a video recording is in progress, ensuring the user can monitor the recording without interruption.

Source/Pages/Video · high confidence

Video trimming and cover selection interface

Users can now trim videos and select a cover image within the image picker. This change introduces the YPVideoFiltersVC screen, which integrates the PryntTrimmerView framework to allow precise video duration adjustment, and adds a thumb selector for choosing the cover frame. The interface supports customization via YPConfig for trimmer colors, duration limits, and button text (e.g., 'Trim', 'Cover', 'Done'), and includes a dedicated YPVideoView component to handle video playback, play/pause toggles, and background playback prevention.

Source/Filters/Video · high confidence

Behavioural changes

Added Xcode schemes for Example and YPImagePicker targets

The project now includes dedicated Xcode schemes for the \Example\ app and the \YPImagePicker\ framework, enabling developers to build, run, test, profile, and archive these specific targets directly from the IDE.

YPImagePicker.xcodeproj/xcshareddata · high confidence

Added Xcode workspace configuration files

The project now includes the standard Xcode workspace data file (contents.xcworkspacedata) referencing the main project, along with the IDEWorkspaceChecks.plist file to suppress the 32-bit warning. These files establish the basic workspace structure for the project.

YPImagePicker.xcodeproj/project.xcworkspace · medium confidence

Adds privacy manifest and enforces full-screen modal presentation

The library now includes a PrivacyInfo.xcprivacy file declaring no data collection or tracking, satisfying modern App Store requirements. Additionally, the image picker is forced to present modally as full-screen (overriding the default iOS 13 card-style presentation) to ensure consistent visual behavior across devices.

Source · high confidence

Camera interaction and capture behavior updates

The photo capture interface now supports pinch-to-zoom and exclusive touch handling for the shot and flip buttons to prevent simultaneous activation. Focus behavior has been refined to ignore taps when the camera is not ready, and the flash button is now correctly hidden on the front camera. Additionally, the system prevents crashes by guarding against photo capture when no active video connection exists, and respects the silent mode configuration to suppress shutter sounds.

Source/Pages/Photo · high confidence

Centralized permission management with iOS 17 microphone support

The library now uses a dedicated \YPPermissionManager\ to handle photo library, camera, and microphone access, introducing a consistent flow for checking and requesting permissions. A key behavioral update is the support for iOS 17's new microphone permission API, ensuring audio recording works correctly on the latest OS versions. Additionally, the photo library permission logic now explicitly grants access for users who have selected 'Limited Photos' access, preventing unnecessary permission prompts for users who have already granted partial access.

Source/Helpers/Permissions · high confidence

Example app now includes a launch screen and demonstrates minWidth filtering

The Example app has been updated to include a LaunchScreen storyboard and associated asset catalog, providing a branded splash screen on startup. Additionally, the example configuration now explicitly enables the minWidth setting (config.library.minWidthForItem), allowing users to see how the picker filters out images that do not meet a specified width threshold.

Example · high confidence

The gallery now uses a dedicated bottom pager component (YPBottomPager) to manage navigation between multiple content screens. This new UI layer includes a scrollable view with paging enabled and a header menu that dynamically displays tabs for each added controller, allowing users to switch between gallery sections via swipe or tap. The pager automatically adjusts the header visibility based on the number of active screens and respects the hidesBottomBar configuration.

Source/Pages/Gallery/BottomPager · high confidence

Lazy loading of album thumbnails improves list performance

The album list now loads thumbnails lazily, fetching them asynchronously only when a cell becomes visible. This change prevents the initial display of the albums list from blocking on image processing, resulting in a faster and more responsive user experience when opening the gallery.

Source/Pages/Gallery/Album · high confidence

The library gallery interface has been rebuilt using code-based layout (Stevia) with XIBs removed, introducing new components like YPAssetViewContainer and YPAssetZoomableView for asset preview. This change brings several behavioral updates: square cropping is now the default option, multiple selection can be initiated via long press, and album changes correctly preserve or reset selection states. Additionally, the gallery now supports pre-selecting items, enforces minimum/maximum item limits, and handles iCloud video fetching with improved export throttling to prevent memory pressure.

Source/Pages/Gallery · high confidence

New helper utilities for video processing, device orientation, and UI components

This change introduces several new helper classes in the Source/Helpers directory to support core image picker functionality. YPVideoProcessor now handles video cropping logic, including a fix to prevent crashes when video tracks are empty and support for non-square videos when the configuration allows it. YPDeviceOrientationHelper replaces the previous orientation detection method by leveraging the device's accelerometer for more reliable orientation tracking. Additionally, new files YPAlerts, YPLoadingView, YPLoaders, and YPPhotoSaver provide standardized UI components for alerts, loading states, and photo saving operations, while YPAccessibility introduces a protocol for setting accessibility information.

Source/Helpers · high confidence

Unified video export and improved library image handling

The image picker now consolidates all video export logic into a single centralized method, ensuring consistent application of compression settings, file type configurations, and length limits across the app. Additionally, the library browsing experience is enhanced by fetching low-resolution previews immediately while loading high-resolution images in the background, which reduces perceived loading times. The system also now caps the resolution of images retrieved from the library and camera to a configurable maximum size, helping to manage memory usage and improve performance.

Source/Helpers/Extensions · high confidence

Fixes

Added Xcode workspace configuration for CocoaPods integration

The project now includes a dedicated Xcode workspace (YPImagePicker.xcworkspace) that references both the main project and the Pods directory. This change consolidates the build environment, ensuring that dependencies managed by CocoaPods are correctly linked and accessible within the IDE, replacing the previous setup where the example or pod references might have been handled differently.

YPImagePicker.xcworkspace · high confidence

Dependencies

Update to YPImagePicker 5.4.0 with iOS 15 minimum and dependency upgrades

YPImagePicker has been updated to version 5.4.0, raising the minimum supported iOS deployment target to 15.0. This release upgrades the SteviaLayout dependency to version 6.2.2 and the PryntTrimmerView dependency to version 4.0.2. The package now includes a Swift Package Manager manifest (Package.swift) and a resolved package file, alongside updated CocoaPods specifications and an example Podfile to support these changes.

(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 49 → 51 (+2.2)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 95 → 95 (+0.0)
  • Architecture 94 → 85 (-8.7)
  • Maturity 53 → 53 (+0.0)
  • Readiness 17 → 27 (+9.9)
  • Security 100 → 100 (+0.0)

Resolved (6)

  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (6–8 lines × 2) (Source/Filters/Photo/YPFilter.swift)
  • Duplicated block (8 lines × 2) (Source/Filters/Photo/YPPhotoFiltersVC.swift)
  • Off-boarding risk: anonymized user #1

New (8)

  • Confusingly similar boolean flags with overlapping intent. onlySquare and isSquareByDefault exist in library config, while onlySquareImagesFromCamera exists in the root config. It is unclear if onlySquare applies to camera or library, or if they are mutually exclusive. The naming onlySquare vs onlySquareImagesFromCamera is inconsistent.
  • Duplicate configuration properties with inconsistent naming conventions (US vs UK spelling) and scope. The color is defined both in the global YPColors struct (as bottomMenuItemSelectedTextColor) and redundantly in the main YPImagePickerConfiguration struct (as bottomMenuItemSelectedTextColour).
  • Duplicate configuration properties with inconsistent naming conventions (US vs UK spelling) and scope. The color is defined both in the global YPColors struct (as bottomMenuItemUnselectedTextColor) and redundantly in the main YPImagePickerConfiguration struct (as bottomMenuItemUnSelectedTextColour).
  • Duplicated block (6 lines × 2) (Source/Helpers/Extensions/PHCachingImageManager+Extensions.swift)
  • Duplicated block (8 lines × 2) (Source/Filters/Video/YPVideoFiltersVC.swift)
  • MethodTooLong: YPLibraryVC.isLimitExceeded (Source/Pages/Gallery/YPLibraryVC.swift)
  • Off-boarding risk: anonymized user #1
  • Projects may be oversized for their cohesion

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

Survey your own repository

Yummypets/YPImagePicker 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 7148991d39861d22f9e409087ca98ec95789eae9 — 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.