SilenceLove/HXPhotoPicker
42.8
Weak · 30 September 2026
85.1k
lines of production code
Swift
primary language
2
measurements over time
What this system is
HXPhotoPicker is a comprehensive iOS library that provides a customizable interface for browsing, selecting, and editing photos and videos from the device's photo library. It supports a wide range of media types, including images, videos, Live Photos, and GIFs, and offers built-in tools for cropping, filtering, adding text or stickers, and adjusting audio. The system is designed for modern iOS development, featuring native Swift concurrency support, extensive UI customization options, and compatibility with both Objective-C and SwiftUI environments.
How it got here
2017–2023 — Swift modernization and iOS 26 support
65 changes.
The project underwent a comprehensive rewrite to migrate the codebase from Objective-C to Swift, introducing modern concurrency patterns and modular architecture. Significant effort was dedicated to updating the user interface and internal logic for compatibility with iOS 26, including new glass-style UI components and RTL support. The period also saw the expansion of the photo editor and picker features, alongside the addition of Swift and SwiftUI example applications.
2024–2025 — Dependency removal and model refactoring
7 changes.
The project removed the Kingfisher dependency by refactoring asset models and implementing a dedicated GIF view, while introducing protocol-based animation transitions for greater customization. It also expanded support for HDR and LivePhotos, added Arabic localization, and updated privacy manifests to comply with Apple's requirements.
Features
Add Objective-C example app for HXPhotoPicker
An Objective-C example project (HXPhotoPickerExample) has been added, providing a complete iOS application structure including AppDelegate, ViewController, Info.plist, and bridging header. The app demonstrates how to integrate the photo picker library in an Objective-C environment, with standard permissions for camera, microphone, and photo library access configured.
Objective-C · high confidence
Add Objective-C example demonstrating Swift picker integration
The Objective-C example app now includes a dedicated view controller that demonstrates how to invoke the Swift-based photo picker from Objective-C code. This new entry point allows Objective-C developers to see a concrete implementation of configuring and presenting the Swift picker, bridging the two languages within the demo application.
Objective-C/Classes · high confidence
Add SwiftUI example app for photo picking
A new SwiftUI example application has been added to demonstrate the HXPhotoPicker library. This example includes a main grid view for displaying selected photos and videos, a full-screen photo browser for previewing and deleting assets, and a configuration sheet for adjusting picker settings. It also provides asset views that handle different media types, including videos, GIFs, and Live Photos.
SwiftUI · high confidence
Added Arabic localization for the launch screen
An Arabic (ar.lproj) localization file for the app's launch screen has been added. This enables the launch screen interface to be displayed in Arabic for users with that language preference.
Swift/ar.lproj · high confidence
Added LRC lyrics file for the song "Shi Jian Mei Hao Yu Ni Huan Huan Kou Kou"
A new LRC-formatted lyrics file has been added to the Swift/Music directory for the track "Shi Jian Mei Hao Yu Ni Huan Huan Kou Kou" by artist Nida Anita. This file contains synchronized timestamped lyrics, enabling time-synced lyric display for this specific song within the music application.
Swift/Music · high confidence
Added Xcode schemes for HXPhotoPicker, HXPhotoPickerExample, and SwiftUIExample
The project now includes shared Xcode schemes for the HXPhotoPicker framework, the main HXPhotoPickerExample app, and the SwiftUIExample app. These schemes define build, test, launch, profile, analyze, and archive actions, enabling developers to directly build, run, and test these targets from the Xcode IDE.
HXPhotoPickerExample.xcodeproj/xcshareddata · high confidence
Added Xcode workspace configuration for Swift Package Manager
A new Xcode workspace file (contents.xcworkspacedata) has been added to the .swiftpm directory. This file configures the workspace to reference the local package, enabling developers to open the Swift package directly in Xcode for easier debugging and development workflows.
.swiftpm · high confidence
Added device orientation detection and Info.plist
The library now includes a new DeviceOrientationHelper class that uses the device's accelerometer to detect and notify changes in orientation (portrait, landscape left/right, etc.), and an empty Info.plist file has been added to the Sources directory.
Sources · high confidence
Added iOS example app workspace and launch screen
The Swift-based example application now includes a configured Xcode workspace that references the main project and CocoaPods dependencies, along with a standard launch screen storyboard to display a white background during app startup.
HXPhotoPickerExample.xcworkspace, Swift/Base.lproj · high confidence
Added localization for Amharic, Bengali, Dhivehi, Persian, Filipino, Hausa, Hebrew, Hindi, Indonesian, Italian, Japanese, and Korean
The HXPhotoPicker now supports users in Amharic (am-ET), Bengali (bn-BD), Dhivehi (dv), Persian (fa), Filipino (fil), Hausa (ha-NG), Hebrew (he), Hindi (hi), Indonesian (id), Italian (it), Japanese (ja), and Korean (ko). This update adds the corresponding Localizable.strings files to the HXPhotoPicker.bundle, ensuring that interface elements, error messages, and album category names are displayed in these languages.
Sources/HXPhotoPicker/Resources/HXPhotoPicker.bundle · high confidence
Adds Swift concurrency support and array batch operations for photo assets
This change introduces new extension methods to the HXPhotoPicker library to improve developer experience and performance. It adds async/await support for presenting the photo picker and preview controllers on iOS 13+, allowing callers to use modern Swift concurrency patterns instead of delegates or closures. Additionally, it provides batch processing utilities for arrays of PhotoAssets, including methods to encode/decode assets to Data, retrieve multiple images or video URLs concurrently with progress callbacks, and fetch local file URLs for selected resources.
Sources/HXPhotoPicker/Picker/Extension · high confidence
Adds image editing capabilities including color temperature adjustment
The photo editor now supports adjusting color temperature (warmth) in addition to existing filters like brightness, contrast, saturation, exposure, highlights, shadows, vignette, and sharpening. This is implemented via a new CIImage extension that applies Core Image filters, including CITemperatureAndTint for warmth adjustments, CIColorControls for basic tonal changes, and CIPixellate for mosaic effects.
Sources/HXPhotoPicker/Editor/Extension · high confidence
Adds utility extensions for UIKit types and image normalization
This change introduces a suite of Swift extensions for UIKit classes, including UIColor, UIView, FileManager, UIViewController, CGSize, String, UIDevice, UIFont, and UIImage. These additions provide convenient shortcuts for common tasks such as accessing frame properties, retrieving system paths, presenting alerts, calculating text dimensions, and detecting device characteristics. Notably, the UIImage extension adds a \normalizedImage\ method that corrects image orientation to ensure consistent display, addressing issues where editing images with non-standard orientations resulted in incorrect rotation.
Swift/Classes/Extension · high confidence
Comprehensive configuration API for photo picker customization
The photo picker now exposes a suite of new configuration structs (including AlbumListConfiguration, PhotoListConfiguration, PreviewViewConfiguration, and PickerBottomViewConfiguration) that allow you to fully customize the appearance and behavior of the picker interface. You can now control specific UI elements such as album list cell styling, photo grid layout, bottom toolbar button colors, and preview view settings, including support for dark mode variants and theme color integration across all components.
Sources/HXPhotoPicker/Picker/Config · high confidence
Configurable image loading and selection UI via new protocol-based configuration
The photo picker now allows developers to replace the default image loading implementation with custom providers (such as Kingfisher or SDWebImage) by conforming to the new HXImageViewProtocol, and to customize the appearance of the photo selection checkboxes (size, colors, border, style) through SelectBoxConfiguration. This decouples image rendering from the core library and exposes visual styling options for the selection UI.
Sources/HXPhotoPicker/Core/Config · high confidence
Introduces new photo preview and editing workflow
The preview module has been refactored to support a more robust photo and video preview experience. A new \PhotoPeekViewController\ handles live photo and video previews with progress indicators, while the main \PhotoPreviewViewController\ now uses a \UICollectionView\ to display assets, supporting Live Photos, HDR, and video playback. The preview interface includes a toolbar for editing, original image toggling, and asset selection, with delegate methods allowing customization of the editor configuration and asset handling.
Sources/HXPhotoPicker/Picker/Controller/Preview · high confidence
Introduces structured error handling and model types for the photo picker
This change adds new model files to the picker's data layer, introducing specific error enums (AssetError, LivePhotoError, PhotoError) to provide detailed, localized failure reasons for operations like exporting, downloading, and iCloud syncing. It also defines the PhotoAssetCollection model for managing album metadata and asset enumeration, and establishes core type definitions in PickerTypes, including the PickerAssetOptions OptionSet for filtering media types (photos, videos, LivePhotos, HDR) and the MediaSubType enum for distinguishing specific asset formats.
Sources/HXPhotoPicker/Picker/Model · high confidence
Introduction of PhotoBrowser class for image preview
The \PhotoBrowser\ class has been added to the \Sources/HXPhotoPicker/Picker/Controller/Browser\ directory, providing a new controller for displaying image previews. This class exposes public properties and handlers for managing page indices, assets, and various user interactions such as cell clicks, long presses, and scrolling, along with lifecycle events and transition animations.
Sources/HXPhotoPicker/Picker/Controller/Browser · high confidence
New Swift example controllers for photo picker configuration and browsing
The example application now includes new Swift view controllers in the Controller directory to demonstrate advanced usage of the photo picker library. These additions provide dedicated configuration screens for avatar picking, editor settings, and color customization, alongside a home screen for navigation and a photo browser for previewing assets. This allows users to easily explore and integrate features such as custom cell types, network image loading, and detailed picker configuration options.
Swift/Classes/Controller · high confidence
New camera UI components for focus, preview, and bottom controls
The camera view layer now includes dedicated views for the bottom control bar (CameraBottomView), the tap-to-focus indicator (CameraFocusView), and the video preview with gesture handling (CameraNormalPreviewView). These components provide the visual interface for capturing photos and videos, handling pinch-to-zoom and tap-to-focus gestures, and displaying the live camera feed with orientation adjustments.
Sources/HXPhotoPicker/Camera/View · high confidence
New centralized configuration and default assets for the photo editor
The photo editor now exposes a new \EditorConfiguration\ struct that allows users to customize text, images, colors, layout, and behavior (such as rotation, status bar visibility, and button states) in a single place. Additionally, default resources for filters, chartlets, and music are now provided via utility methods, enabling immediate use of built-in editing features without external asset dependencies.
Sources/HXPhotoPicker/Editor/Config · high confidence
New chartlet preview and selection UI components
Added three new view classes to the photo editor's chartlet module: \EditorChartletPreviewView\ displays a draggable, resizable preview of an image with a triangular pointer that adapts to screen edges; \EditorChartletViewCell\ renders individual chartlet items with a blur-effect selection background; and \EditorChartletViewListCell\ provides a scrollable grid of these items, handling image downloads and notifying the delegate when a user selects an image.
Sources/HXPhotoPicker/Editor/View/Chartlet · high confidence
New editor result and asset data models
The editor now exposes structured result types for edited media. \EditedResult\ is a unified enum wrapping \ImageEditedResult\ and \VideoEditedResult\, which provide access to the edited image/video, local file URLs, and associated adjustment data. \ImageEditedData\ and \VideoEditedData\ capture specific editing parameters such as filters, crop sizes, and video music settings. \EditorAsset\ serves as the input container, holding the original asset type and the resulting \EditedResult\ after processing.
Sources/HXPhotoPicker/Editor · high confidence
New editor sub-views for chartlets, masks, music, and text stickers
The editor now includes dedicated view controllers for managing chartlet (sticker album) browsing, mask selection, music search and playback, and text sticker creation. These new components integrate with the main editor to allow users to browse and apply sticker collections, select visual masks, search and attach background music to videos, and add customizable text overlays, expanding the editor's content creation capabilities.
Sources/HXPhotoPicker/Editor/Controller · high confidence
New filter editing interface with customizable adjustments
The filter editor now features a dedicated UI for adjusting individual filter parameters. Users can modify settings such as brightness, contrast, exposure, saturation, warmth, vignette, sharpen, highlights, and shadows via sliders. The interface supports customization of text labels and image resources for these adjustments, and includes logic to handle layout changes between portrait and landscape orientations.
Sources/HXPhotoPicker/Editor/View/Filter · high confidence
New model classes for appearance, language, export presets, and logging
The library introduces several new model types in the Core/Model directory to support configuration and internal logic. AppearanceStyle allows users to choose between system-following, normal, or dark UI themes. CustomLanguage and LanguageType enable explicit language selection and custom localization bundles, supporting a wide range of languages including Spanish and Portuguese. ExportPreset and VideoExportParameter provide structured options for video export quality and resolution. Additionally, IndicatorType defines loading indicator styles, ImageContentType and FileType categorize media, HXLog provides conditional debug logging, and PhotoPanGestureRecognizer handles specific pan interactions.
Sources/HXPhotoPicker/Core/Model · high confidence
New mosaic editing toolbar with mosaic and smear tools
The photo editor now includes a dedicated toolbar for applying mosaic effects, featuring two distinct modes: 'mosaic' and 'smear'. Users can switch between these modes via toggle buttons, with visual feedback indicating the active selection. An undo button is also provided to reverse the last action, though it remains disabled until an action is performed. The layout adapts to device orientation and type (iPad vs. iPhone), ensuring appropriate button sizing and positioning for both portrait and landscape modes.
Sources/HXPhotoPicker/Editor/View/Mosaic · high confidence
New photo and video editor model layer with audio, filter, and music support
The editor's model layer has been restructured with new files defining the data structures and logic for media editing. EditorChartlet.swift introduces models for stickers (images/GIFs) and their UI titles. EditorPlayAuido.swift adds an audio player class that handles playback and syncs on-screen lyrics to the video timeline. EditorType.swift provides configuration for aspect-ratio tools and implements Codable serialization for edited image and video results. PhotoEditorFilter.swift defines the filter system, including handler types, parameter structures, and a comprehensive set of adjustable image adjustments (brightness, contrast, exposure, saturation, etc.). VideoEditorMusic.swift adds support for adding background music to videos, including LRC lyric parsing, metadata extraction (song name, artist), and time-based lyric lookup.
Sources/HXPhotoPicker/Editor/Model · high confidence
New text and brush editing views for photo editor
The photo editor now includes dedicated UI components for adding and styling text overlays and brush strokes. This change introduces \EditorStickerTextView\ and its supporting extensions to handle text input, color selection (including custom colors via \UIColorPickerViewController\ on iOS 14+), and background color toggling. It also adds \EditorBrushBlockView\, \EditorBrushColorView\, and \EditorBrushSizeView\ to provide a color palette, size slider, and visual feedback for brush tools. These views enable users to customize text appearance and apply freehand brush strokes with adjustable colors and sizes directly within the editor interface.
Sources/HXPhotoPicker/Editor/View/Text · high confidence
New video editing UI components for trimming, music, and volume control
The video editor now includes a complete set of new user interface views for managing video clips and audio. This adds a timeline control view with draggable handles for trimming video duration, a music selection view that supports searching, playing, and displaying lyrics for background tracks, and a volume control panel for adjusting both music and original sound levels independently. These components replace the previous implementation, providing a more structured and customizable interface for video editing tasks.
Sources/HXPhotoPicker/Editor/View/Video · high confidence
Swift API entry points and camera location integration
The library now exposes Swift-native async/await entry points for the photo picker, editor, and camera capture features via the \HXPhotoPicker\ class, allowing developers to use modern concurrency patterns instead of delegate-based callbacks. Additionally, a new \CameraViewController+Location\ extension enables automatic GPS metadata attachment to photos by integrating \CoreLocation\ when the appropriate usage descriptions are present in the app's Info.plist.
Sources/HXPhotoPicker/Core · high confidence
Swift example app adds network reachability monitoring
The Swift example project now includes a Reachability utility class to monitor network connectivity status (WiFi, cellular, or unavailable) and post notifications when the connection state changes. This is supported by new project configuration files, including an AppDelegate that initializes the UI, a bridging header importing GPUImage filters, and an Info.plist defining required camera, photo library, location, and microphone permissions.
Swift · high confidence
Swift interoperability layer for HXPhotoPicker example app
The Objective-C/SwiftPhotoPicker example directory now includes a set of Swift wrapper classes (SwiftAssetURLResult, SwiftPhotoAsset, SwiftPicker, SwiftPickerConfiguration, SwiftPickerResult) that bridge the existing HXPhotoPicker Objective-C API to Swift. This allows Swift developers using the example app to configure the picker, handle selection results, and retrieve media assets (images, videos, LivePhotos) using native Swift types and closures, while internally mapping to the underlying Objective-C implementation.
Objective-C/SwiftPhotoPicker · high confidence
Architecture
AssetManager refactored into modular Swift extensions
The AssetManager utility has been restructured from a single monolithic file into a set of focused Swift extensions (AssetManager+AVAsset, AssetManager+Image, AssetManager+LivePhoto, etc.). This change improves code organization and maintainability by separating concerns for different asset types (images, videos, live photos) and operations (URLs, data, export sessions), while preserving the existing public API surface for asset retrieval and iCloud handling.
Sources/HXPhotoPicker/Picker/Util · high confidence
Editor view refactored into modular extensions
The \EditorAdjusterView\ implementation has been restructured by splitting its logic into distinct Swift extensions (ContentView, Croper, Edit, FrameView, Mirror, Rotate, ScreenRotation, ScrollView, Video). This change improves code organization and maintainability for the photo/video editing interface without altering the external API or user-facing features.
Sources/HXPhotoPicker/Editor+View/View · high confidence
Photo picker view refactored into modular extensions
The \PhotoPickerView\ implementation has been restructured by splitting its logic into distinct Swift extensions (Asset, Camera, Cell, CollectionView, Editor, Function, Preview) and introducing a custom \PhotoPickerSwitchLayout\ for collection view scrolling behavior. This change improves code organization and maintainability without altering the public API or user-facing features of the photo picker.
Sources/HXPhotoPicker/Picker/PickerView · high confidence
Behavioural changes
Add SwiftyGif-based GIF image view implementation
The Sources/ImageView location now includes a new GIFImageView component that renders animated GIFs using the SwiftyGif library instead of the previously used Kingfisher dependency. This implementation conforms to the HXImageViewProtocol and handles GIF data loading, animation control, and cleanup, providing a dedicated rendering path for GIF content within the photo picker core.
Sources/ImageView · high confidence
Added privacy manifest declaring accessed APIs
HXPhotoPicker now includes a PrivacyInfo.xcprivacy file to comply with Apple's privacy requirements. This manifest declares the use of file timestamp APIs (reason code 3B52.1) and user defaults APIs (reason code CA92.1), while explicitly stating that no data is collected and no tracking is performed.
Sources/HXPhotoPicker/Resources · high confidence
Album list cells rewritten in Swift with RTL and dark mode support
The album list UI components (AlbumViewBaseCell, AlbumViewCell, PhotoAlbumCollectionCell, PhotoAlbumCollectionViewCell, and PhotoAlbumViewCell) have been rewritten in Swift. This update adds support for right-to-left (RTL) layouts, ensuring proper mirroring of album covers and selection indicators in RTL languages, and introduces full dark mode compatibility by dynamically adjusting text, background, and separator colors based on the system appearance. The new implementation also improves album cover loading reliability and allows for easier customization of cell appearance through configuration objects.
Sources/HXPhotoPicker/Picker/View/Cell/Album · high confidence
Camera configuration becomes fully customizable
The new CameraConfiguration struct introduces extensive customization options for the camera interface, allowing users to adjust aspect ratios (including custom sizes), text localization via custom language arrays, UI colors (tint and focus colors), capture modes (press vs. click), video recording limits, and camera hardware settings like position and flash mode.
Sources/HXPhotoPicker/Camera/Config · high confidence
Camera module rewritten with new architecture and async support
The camera capture interface has been completely refactored to support modern Swift concurrency patterns, introducing async/await methods for initiating captures and handling results. The internal architecture has been restructured to remove Metal dependencies, replacing them with a new \CameraManager\ that handles AVFoundation sessions, and a modular \CameraController\ that coordinates the view hierarchy. This change also introduces a dedicated result preview screen (\CameraResultViewController\) for reviewing photos and videos before final submission, and adds support for customizing the camera interface, including aspect ratios, colors, and language files.
Sources/HXPhotoPicker/Camera/Controller · high confidence
Core extension utilities for RTL, iOS 26, and media handling
The library adds a suite of core extension files to support Right-to-Left (RTL) layout mirroring for views and layers, adapt to iOS 26 UI changes (such as \UIBarButtonItem\ background handling), and improve media processing. These extensions include robust video thumbnail generation via \AVAsset\, HEIC file detection, image normalization to correct orientation, and helper methods for localized strings and device metrics.
Sources/HXPhotoPicker/Core/Extension · high confidence
Editor transition now supports HDR image display
The editor view controller transition animation now preserves High Dynamic Range (HDR) image quality during navigation. By setting \preferredImageDynamicRange\ to \.high\ on the preview image view for iOS 17 and later, the transition ensures that HDR images are displayed correctly without being downgraded to standard dynamic range during the push or present animation.
Sources/HXPhotoPicker/Editor/Transition · high confidence
Editor view adds native image processing and orientation utilities
The editor view now includes a set of new Swift extensions to handle image data natively, removing the need for external caching libraries for these specific tasks. \EditorView+AVAsset.swift\ adds logic to detect video orientation from track transforms, ensuring videos display correctly. \EditorView+CIImage.swift\ and \EditorView+UIImage.swift\ provide built-in methods for converting between CoreImage and UIImage, applying Gaussian blurs, performing source-over compositing, and exporting images to PNG, JPEG, or HEIC formats with configurable quality. Additionally, \EditorView+UIView.swift\ adds a utility to sample pixel colors from view layers, and \EditorView+CGFloat.swift\ provides angle/radian conversion helpers.
Sources/HXPhotoPicker/Editor+View/Extension · high confidence
Generated CocoaPods support files for HXPhotoPicker example
The project now includes the standard CocoaPods target support files for the HXPhotoPicker example app. This adds the necessary build configuration (xcconfig), framework installation scripts, umbrella headers, and module maps to correctly link and embed the HXPhotoPicker framework during compilation. It also includes the generated info plist and acknowledgements files to satisfy iOS packaging requirements for third-party dependencies.
Pods/Target Support Files/Pods-HXPhotoPickerExample · high confidence
Generated CocoaPods support files for SwiftUIExample
The project now includes the standard CocoaPods target support files for the SwiftUIExample application. This adds the necessary build configuration (xcconfig), framework installation scripts, umbrella headers, and module maps required to integrate and build vendored dependencies, specifically including the HXPhotoPicker framework in both Debug and Release configurations.
Pods/Target Support Files/Pods-SwiftUIExample · high confidence
HXPhotoPicker pod project structure updated
The \Pods/Pods.xcodeproj\ project file has been regenerated to reflect the current state of the HXPhotoPicker dependency. This update includes the build configuration for the library's source files, such as the photo picker, editor, and camera view controllers, and explicitly adds the \PrivacyInfo.xcprivacy\ resource file to the build resources, ensuring compliance with iOS privacy manifest requirements.
Pods/Pods.xcodeproj · high confidence
HXPhotoPickerExample project structure updated for Swift and modern iOS
The HXPhotoPickerExample project has been restructured to support Swift, incorporating numerous Swift source files (such as PhotoPickerController, PhotoBrowser, and various configuration views) alongside Objective-C components. The project now links against modern iOS frameworks including PhotosUI and AVKit, and includes resources for stickers and media, reflecting an upgrade to the example app's architecture and capabilities.
HXPhotoPickerExample.xcodeproj · medium confidence
Initialized Xcode workspace configuration
The HXPhotoPickerExample project now includes a properly configured Xcode workspace structure. This adds the workspace data file, enables the 32-bit warning check, and sets the build system to the latest version with SwiftUI Previews disabled, ensuring consistent project settings for developers opening the example app.
HXPhotoPickerExample.xcodeproj/project.xcworkspace · high confidence
Introduce new photo picker controller architecture and split-view support
The photo picker module has been restructured with a new base view controller (PhotoBaseViewController) and a refactored main controller (PhotoPickerController) that delegates lifecycle and selection events to a dedicated delegate protocol. This change introduces a new PhotoSplitViewController to manage the album and preview panes on iPad, ensuring proper layout and orientation handling. Additionally, the library now supports RTL layouts and allows customization of the split-view separator line color for both light and dark modes.
Sources/HXPhotoPicker/Picker/Controller/Photo · high confidence
Introduces new data-fetching and selection models for photo picker
The photo picker now uses new \PhotoFetchData\ and \PhotoPickerData\ classes to manage asset retrieval and selection state. \PhotoFetchData\ handles fetching camera roll and album collections with configurable media-type predicates, while \PhotoPickerData\ manages the selected assets array, enforcing selection limits, single/multi-mode constraints, and file-size restrictions. This refactors how the picker interacts with the Photos framework and tracks user selections.
Sources/HXPhotoPicker/Picker/Data · high confidence
New album list UI components and iOS 26 compatibility
The album picker now uses new view classes (AlbumGlassTitleView, AlbumListView, AlbumSectionHeaderView, AlbumTitleView, PhotoAlbumHeaderView) to render the album selection interface. AlbumGlassTitleView is available on iOS 26 and provides a glass-style navigation title with a dropdown menu for album selection, while the other views handle the album list display, section headers, and title styling. The changes also address a data out-of-bounds issue in AlbumGlassTitleView when album permissions are restricted and no photos are selected, and ensure cover images are cropped to consistent sizes for a uniform appearance.
Sources/HXPhotoPicker/Picker/View/Album · high confidence
New protocol-based animation transition interfaces for photo browser and picker
The library introduces a new set of protocols and interactive transition classes in the Transition directory to standardize how view controller animations are handled. Specifically, it adds \PhotoBrowserAnimationTransitioning\ and \PhotoPickerControllerAnimationTransitioning\ protocols, along with their corresponding interactive transition implementations (\PhotoBrowserInteractiveTransition\ and \PhotoPickerControllerInteractiveTransition\). This allows for more flexible and configurable gesture-driven dismissals and presentations for both the photo browser and the picker controller, enabling developers to customize transition behaviors such as trigger ranges and interaction states.
Sources/HXPhotoPicker/Picker/Protocol/Transition · high confidence
New protocol-based asset fetching architecture for photo picker
The photo picker now uses a new protocol-based architecture (\PhotoFetchAsset\ and \PhotoFetchAssetCollection\) to fetch and organize media assets. This change introduces configurable support for HDR photos, Live Photos (including mute and disable options), and GIFs, while also handling the removal of selected assets when they are deleted from the library. Users will see improved handling of specific media types and more robust album enumeration logic.
Sources/HXPhotoPicker/Picker/Protocol/Fetch · high confidence
New structured result types for photo picker selections
The photo picker now exposes dedicated result models (AssetResult, AssetURLResult, PickerResult) that provide structured access to selected media. Users can retrieve images, videos, and URLs with optional compression and file configuration, and LivePhoto content is explicitly exposed via AssetURLResult.LivePhoto, allowing apps to handle static and live media consistently.
Sources/HXPhotoPicker/Picker · high confidence
Photo picker UI and album navigation restructured for iOS 26 and customization
The photo picker's album selection and list interfaces have been restructured to support iOS 26 and enhanced customization. Album navigation now uses dedicated view controllers (AlbumViewController, PhotoAlbumViewController, PhotoMyAlbumViewController) that respect RTL layout settings and adapt their appearance (translucent bars, title attributes, dark mode colors) based on configuration. The photo list view controller (PhotoPickerListViewController) now supports swipe-to-select gestures and dynamic asset filtering. A new filter interface (PhotoPickerFilterViewController) allows users to filter assets by type (photo, video, GIF, Live Photo, edited) with theme-aware colors. The page view controller (PhotoPickerPageViewController) now segments content by asset type (All, Video, Photo, GIF, Live Photo) using a segmented control on iOS 26 or a custom header on earlier versions, with each segment displaying its own filtered list. Camera integration remains configurable but is now isolated in a dedicated extension file.
Sources/HXPhotoPicker/Picker/Controller/Picker · high confidence
PhotoAsset model refactored into modular extensions with HDR and LivePhoto support
The PhotoAsset model has been restructured into distinct Swift extensions (Codable, Editor, Equatable, FileSize, Image, Local, Network, Request, URL, Video) to improve code organization and maintainability. This change introduces native support for HDR photo decoding and preview, allowing users to view High Dynamic Range images directly within the picker. It also enhances LivePhoto handling by ensuring correct media subtypes are assigned and supporting LivePhoto-specific operations like muting and disabling playback. Additionally, the serialization logic for PhotoAsset has been updated to use a simplified Codable structure, and image retrieval now correctly prioritizes edited results when available.
Sources/HXPhotoPicker/Picker/Model/PhotoAsset · high confidence
PhotoPicker UI components refactored into extensible Swift protocols
The UI layer for the photo picker has been restructured from concrete implementations to a set of public Swift protocols (such as PhotoPickerList, PhotoAlbumList, and PhotoToolBar). This change allows developers to provide custom implementations for core UI elements like the photo grid, album list, and toolbar, enabling deeper customization of the picker's appearance and behavior while maintaining the existing configuration interface.
Sources/HXPhotoPicker/Picker/Protocol/UI · high confidence
PhotoPicker core utilities restructured for iOS 26 and modern APIs
The core utility layer has been reorganized into dedicated modules: \HXBaseViewController\ now handles iOS 26-specific scroll edge effects and orientation notifications; \AssetPermissionsUtil\ and \AssetSaveUtil\ provide modern, async-compatible APIs for requesting photo and camera permissions and saving assets (including Live Photos) to custom albums; \ImageResource\ centralizes all UI icons with support for system SF Symbols on iOS 13+; \PhotoManager+Download\ implements a robust, resumable download session for media assets; \PhotoManager+Language\ expands localization support to over 18 languages with custom bundle injection; and \PhotoTools\ consolidates file caching, camera preview handling, and alert presentation. This refactoring removes legacy dependencies, improves memory management, and ensures compatibility with iOS 26 design requirements.
Sources/HXPhotoPicker/Core/Util · high confidence
Redesigned photo picker UI with new preview views and iOS 26 compatibility
The photo picker interface has been completely rewritten in Swift, introducing dedicated view controllers for camera capture, denied authorization, and asset filtering. Preview functionality is now handled by specialized views for photos, videos, and Live Photos, supporting features like HDR, Live Photo muting, and disabling. The UI is fully adapted for iOS 26, utilizing native menu systems for filters and glass-style buttons on iOS 26, while maintaining compatibility with earlier versions through configuration options for colors, images, and text.
Sources/HXPhotoPicker/Picker/View · high confidence
Redesigned photo picker cells with granular LivePhoto and HDR controls
The photo picker's cell architecture has been restructured into a modular hierarchy (base, selectable, and preview variants) to support finer-grained control over media types. Users can now explicitly disable Live Photos and HDR in the preview interface via dedicated toggle buttons, and Live Photos in the selection grid are played on-demand to improve performance. Additionally, a new glass-style toolbar for LivePhoto controls has been introduced for iOS 26, and video previews now display playback controls.
Sources/HXPhotoPicker/Picker/View/Cell · high confidence
Redesigned photo picker transition animations
The photo picker's presentation and dismissal animations have been completely rewritten to provide smoother, more interactive visual transitions. The new implementation replaces the previous animation logic with custom animator classes that handle both standard and interactive (gesture-driven) transitions for the photo browser and picker controller. Users will notice improved fluidity when opening and closing the photo browser, including better handling of drag-to-dismiss gestures and more consistent visual feedback during navigation.
Sources/HXPhotoPicker/Picker/Transition · high confidence
Redesigned toolbar with iOS 26 support and customizable UI components
The photo picker toolbar has been completely rewritten to support iOS 26, introducing a new \PhotoToolBarGlassView\ for iOS 26+ that uses \UIToolbar\ with specific height calculations, while retaining the \PhotoToolBarView\ for earlier versions which now uses \UIVisualEffectView\ for its background. The update adds a new \PhotoPreviewListView\ for displaying a scrollable list of selected photos in preview and browser modes, replacing the previous static selection view in those contexts. All toolbar text, icons, and colors are now fully customizable via configuration objects, and the UI properly adapts to dark mode and RTL layouts. Additionally, a new \PhotoPermissionPromptView\ guides users to settings when limited photo library access is detected.
Sources/HXPhotoPicker/Picker/View/ToolBar · high confidence
Refactored asset model structures to remove Kingfisher dependency
The LocalAsset and NetworkAsset model files have been rewritten to remove the dependency on the Kingfisher library. This change introduces new public structs (LocalImageAsset, LocalVideoAsset, LocalLivePhotoAsset, NetworkImageAsset, NetworkVideoAsset) with explicit properties for URLs, cache keys, and loading modes, replacing the previous implementation that relied on Kingfisher's internal caching mechanisms. Users will see a structural change in how asset data is defined and serialized, ensuring that network image caching logic is now handled internally by the picker rather than delegating to Kingfisher, which resolves issues where default cache keys caused preview animation stuttering.
Sources/HXPhotoPicker/Picker/Model/LocalAsset · high confidence
Replaced third-party progress HUD with custom animated indicators and added video playback controls
The library's progress HUD implementation has been replaced with a set of custom, self-contained views (ProgressHUD, ProgressCircleView, ProgressIndefiniteView, ProgressCricleJoinView) that provide animated circular progress and indicator modes without external dependencies. Additionally, a new video player UI layer was introduced, including a PlayButton with animated state transitions, a SliderView for scrubbing and buffer display, and a VideoPlaySliderView that manages time labels and playback state, enabling in-app video preview and editing controls.
Sources/HXPhotoPicker/Core/View/ProgressHUD · high confidence
Smoother drawing curves and corrected image orientation in editor
The photo editor now produces smoother freehand drawing lines by implementing a Catmull-Rom spline algorithm, and it automatically corrects image orientation before editing to prevent the final output from appearing rotated or upside down.
Sources/HXPhotoPicker/Editor+View/Util · high confidence
Video editor model and compositor refactored to fix crop offset and support audio stickers
The video editing module has been restructured to resolve an issue where content became offset after using the circular crop box and rotating the image before re-entering the editor. This change introduces new model classes (EditorStickerAudio, EditorVideoFactor) and types to support audio stickers and refined export configurations, while the underlying EditorVideoCompositor now handles video orientation and cropping logic more robustly to ensure visual consistency.
Sources/HXPhotoPicker/Editor+View/Model · high confidence
iOS 26 compatibility and expanded touch targets for photo picker views
The photo picker's user interface has been updated to support iOS 26 and improve interaction precision. Custom collection and table views now disable the new iOS 26 edge effects to maintain consistent visual styling. The selection indicator view has been adjusted to account for iOS 26 layout changes, and a new expand button view has been introduced with an enlarged hit area to make it easier for users to tap.
Sources/HXPhotoPicker/Core/View · high confidence
Test coverage
Added test localization strings for photo and video features
A new Localizable.strings file has been added to the custom localization bundle, containing Chinese translations for various photo and video editing, camera, and album access messages. All string values are suffixed with '-test', indicating these are placeholder or test-specific translations intended to verify localization loading and UI text rendering for features such as camera permissions, video editing limits, and album browsing.
Swift/Resources · high confidence
Dependencies
HXPhotoPicker pod support files updated to version 5.0.5
The HXPhotoPicker CocoaPods support files have been regenerated to reflect version 5.0.5. This update includes the framework's Info.plist, module map, umbrella header, and build configurations, which now link against the Photos, PhotosUI, and UIKit frameworks and enable compiler flags for camera, location, core, editor, and picker features.
Pods/Target Support Files/HXPhotoPicker · high confidence
HXPhotoPicker version 5.0.5 release with modular subspecs and SPM support
The HXPhotoPicker dependency has been updated to version 5.0.5. This release introduces a modular architecture via CocoaPods subspecs (Core, Picker, Editor, Camera, etc.), allowing users to include only the components they need. It adds support for Swift Package Manager (SPM) via a new Package.swift file and enforces a minimum deployment target of iOS 10. The podspec also defines specific subspecs for image view providers (SwiftyGif, Kingfisher, SDWebImage) and includes a privacy manifest resource bundle.
(dependencies) · high confidence
Housekeeping
Initial project configuration and documentation
The repository has been initialized with essential configuration files, including \.swiftlint.yml\ for code style enforcement, \.travis.yml\ for CI integration, and \.codecov.yml\ for coverage reporting. The \HXPhotoPickerExample.entitlements\ file defines necessary permissions for camera, microphone, photos, and location access. A comprehensive \README.md\ documents the library's features, installation methods (Swift Package Manager, CocoaPods), and usage examples, while \tmp.xcconfig\ and \.gitignore\ handle build exclusions and version control hygiene.
(repo-wide) · 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 45 → 43 (-2.1)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 80 → 78 (-2.6)
- Architecture 94 → 85 (-8.3)
- Maturity 52 → 53 (+0.5)
- Readiness 21 → 19 (-2.0)
- Security 95 → 95 (+0.0)
- Event Sourcing 63 → 63 (+0.0)
Resolved (7)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (11 lines × 2) (Swift/Classes/Controller/PickerResultViewController.swift)
- Duplicated block (12 lines × 4) (Swift/Classes/Controller/PhotoBrowserViewController.swift)
- Duplicated block (14 lines × 3) (Swift/Classes/Controller/PhotoBrowserViewController.swift)
- Members sharing a duplicated core (4 members, 50+ identical tokens) (Swift/Classes/Controller/PhotoBrowserViewController.swift)
- MethodTooLong: CameraViewController.cameraResultViewController (Sources/HXPhotoPicker/Camera/Controller/CameraViewController.swift)
New (406)
- AVAsset.videoOrientation (cognitive 26) (Sources/HXPhotoPicker/Core/Extension/Core+AVAsset.swift)
- AVAsset.videoOrientation (cyclomatic 26) (Sources/HXPhotoPicker/Core/Extension/Core+AVAsset.swift)
- AlbumGlassTitleView.makeAlbumData (cognitive 18) (Sources/HXPhotoPicker/Picker/View/Album/AlbumGlassTitleView.swift)
- AlbumViewController.changeSubviewFrame (cognitive 17) (Sources/HXPhotoPicker/Picker/Controller/Album/AlbumViewController.swift)
- AlbumViewController.initItems (cognitive 26) (Sources/HXPhotoPicker/Picker/Controller/Album/AlbumViewController.swift)
- Array.getURLs (cognitive 19) (Sources/HXPhotoPicker/Picker/Extension/Picker+Array.swift)
- AssetManager.requestImageURL (cognitive 22) (Sources/HXPhotoPicker/Picker/Util/AssetManager.swift)
- AssetManager.requestImageURL (cyclomatic 16) (Sources/HXPhotoPicker/Picker/Util/AssetManager.swift)
- AssetManager.requestLivePhoto (cognitive 23) (Sources/HXPhotoPicker/Picker/Util/AssetManager.swift)
- AssetManager.requestLivePhoto (cyclomatic 16) (Sources/HXPhotoPicker/Picker/Util/AssetManager.swift)
- AssetManager.requestVideoURL (cognitive 18) (Sources/HXPhotoPicker/Picker/Util/AssetManager.swift)
- CIImage.apply (cognitive 41) (Sources/HXPhotoPicker/Editor+View/Extension/EditorView+CIImage.swift)
- CIImage.apply (cyclomatic 26) (Sources/HXPhotoPicker/Editor+View/Extension/EditorView+CIImage.swift)
- CameraBottomView.tapGestureRecognizerClick (cognitive 16) (Sources/HXPhotoPicker/Camera/View/CameraBottomView.swift)
- CaptureVideoPreviewView.startSession (cognitive 19) (Sources/HXPhotoPicker/Picker/View/CaptureVideoPreviewView.swift)
- ClassTooLong: PhotoToolBarGlassView (Sources/HXPhotoPicker/Picker/View/ToolBar/PhotoToolBarGlassView.swift)
- ClassTooLong: PickerInteractiveTransition (Sources/HXPhotoPicker/Picker/Transition/PickerInteractiveTransition.swift)
- DeniedAuthorizationView.configColor (cognitive 17) (Sources/HXPhotoPicker/Picker/View/DeniedAuthorizationView.swift)
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Double.time (cognitive 56) (Sources/HXPhotoPicker/Editor/View/Video/EditorVideoControlView.swift)
- …and 386 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
SilenceLove/HXPhotoPicker 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 ca5f4200f3afb2f54ad83722a0fbafb6a001d28f — 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.