EhPanda-Team/EhPanda
50.5
Adequate · 30 September 2026
27.2k
lines of production code
Swift
primary language
2
measurements over time
What this system is
EhPanda is an iOS application designed for browsing, reading, and managing galleries from E-Hentai and ExHentai. It provides features for searching, filtering, and tracking watched or favorite content, alongside a dedicated reading interface with support for live text and automatic page advancement. The app handles user authentication via cookie management, persists local state and reading progress using Core Data with CloudKit sync, and supports multiple languages including English, Japanese, and Chinese variants.
How it got here
2020–2021 — TCA migration and internationalization
35 changes.
The project underwent a major architectural shift to the Composable Architecture (TCA), restructuring core views and state management while migrating the data layer to CoreData with CloudKit support. This period also focused on extensive internationalization, adding full localization for Japanese, Chinese, Korean, and German, alongside new features like domain fronting and a share extension.
2022 — TCA migration and UI refactoring
21 changes.
The project migrated its architecture to the Composable Architecture, replacing singletons with injectable dependency clients and restructuring state management. This period also involved significant refactoring of data models, the introduction of new gallery and search UI components, and the addition of Traditional Chinese localization.
2023–2024 — TCA migration and settings overhaul
14 changes.
This period focused on migrating the application's core views, including Settings, Home, and Detail sections, to the Composable Architecture (TCA) for improved state management and testability. Significant work involved restructuring the Settings interface with new components for account, general, and reading configurations, while also introducing dedicated views for archives, comments, and previews within the gallery detail context.
Features
Add Logs management view in Settings
Users can now view, inspect, and delete application logs directly from the Settings section. The new Logs screen displays a list of log files with their date ranges and record counts, allows tapping a log to view its detailed contents, and supports swiping to delete individual files. An option is also provided to open the file app for broader file management.
EhPanda/View/Setting/Logs · high confidence
Add Share Extension to open links in the app
A new Share Extension has been added, allowing users to share URLs from other apps directly into this application. When a user shares a web link, the extension intercepts the URL, replaces its scheme with 'ehpanda', and opens the main app with the modified link.
ShareExtension · high confidence
Add database migration and drop functionality
Introduces a new Migration screen that allows users to prepare the database and, if an error occurs, drop the existing database to reset the state. The feature is implemented using the Composable Architecture, with a dedicated reducer handling the asynchronous database operations and a SwiftUI view displaying loading and error states.
EhPanda/View/Migration · high confidence
Added Korean language support
Users can now use the app in Korean. This change introduces the initial Korean localization files (InfoPlist.strings and Localizable.strings) for the EhPanda app, covering UI strings, settings, error messages, and permission descriptions.
EhPanda/App/ko.lproj · high confidence
Added Quick Search feature for managing custom search terms
Users can now create, edit, and delete custom search terms (words) via a new Quick Search interface. This feature, implemented in the Search Support module using the Composable Architecture (TCA), allows users to maintain a list of quick-access search queries that can be triggered directly from the list view. The implementation includes a new QuickSearchReducer for state management and a QuickSearchView for the user interface, supporting operations like appending new words, editing existing ones, deleting individual items or batches, and reordering the list.
EhPanda/View/Search/Support · high confidence
Added Simplified Chinese localization for app permissions and core UI strings
The app now includes a Simplified Chinese (zh-Hans) localization bundle, providing translations for system permission descriptions (Face ID and photo library access) and a comprehensive set of user-facing strings for the home, search, settings, and reading interfaces. This enables Simplified Chinese users to see the app's navigation, error messages, and configuration options in their native language.
EhPanda/App/zh-Hans.lproj · high confidence
Added Traditional Chinese (Hong Kong) localization
The app now includes a Traditional Chinese (Hong Kong) language pack, providing translated strings for the user interface, settings, error messages, and system permission descriptions (such as Face ID and Photo Library access).
EhPanda/App/zh-Hant-HK.lproj · high confidence
Added Traditional Chinese (Taiwan) localization
The app now includes a Traditional Chinese (Taiwan) language option. This update adds the necessary localization files (InfoPlist.strings and Localizable.strings) to support the zh-Hant-TW locale, enabling users to see the interface, settings, and system prompts in Traditional Chinese.
EhPanda/App/zh-Hant-TW.lproj · high confidence
Added Traditional Chinese (zh-Hant) localization
The app now includes a complete Traditional Chinese translation for the user interface. This new language pack covers all major screens and features, including navigation tabs (Home, Favorites, Search, Settings), account management (Login, Logout), general settings (Language, Auto-lock, Tag extensions), reading views, error messages, and system permission descriptions (Face ID, Photo Library).
EhPanda/App/zh-Hant.lproj · high confidence
Detail page restructured with Composable Architecture and new sub-views
The Detail page logic has been migrated to the Composable Architecture (TCA), introducing a new DetailReducer that manages state for gallery details, user ratings, and comments. This change adds dedicated sub-views for Gallery Infos (displaying metadata like ID, token, and URLs with copy-to-clipboard support) and Torrents (listing magnet links with download and share capabilities). The main DetailView now coordinates these sections, allowing users to view detailed gallery information and manage torrent downloads directly from the detail interface.
EhPanda/View/Detail · high confidence
Domain fronting support for network requests
The network layer now supports domain fronting, allowing the app to route requests through different hostnames while maintaining the original target domain in the HTTP Host header. This is implemented via new \DFExtensions\, \DFRequest\, \DFStreamHandler\, \DFURLProtocol\, and \DomainResolver\ modules that handle IP resolution, custom stream handling, and certificate validation bypass for specific domains. This feature enables users to access content in regions where direct access to the gallery site may be restricted or blocked.
EhPanda/Network · high confidence
Favorites view re-architected with Composable Architecture and Quick Search
The Favorites section has been migrated to the Composable Architecture (TCA), introducing a new \FavoritesReducer\ to manage state and side effects. This change adds a Quick Search feature accessible via a toolbar button or the search bar, allowing users to filter their favorites by keyword with tag suggestions. The UI now uses \GenericList\ for gallery display and supports device-specific navigation patterns (sheet on iPad, navigation link on iPhone) for viewing gallery details.
EhPanda/View/Favorites · high confidence
German localization added for app permissions and UI strings
Users will now see German translations for system permission prompts (Face ID, photo library access) and a comprehensive set of UI strings across the app, including navigation tabs, search, settings, and error messages.
EhPanda/App/de.lproj · high confidence
Initial project scaffolding and configuration
The repository is initialized with core configuration files including an AltStore source manifest for iOS installation, an MIT license, and a README. The project structure includes SwiftLint and SwiftGen configurations, while initial boilerplate SwiftUI files (ContentView, EhPandaApp, Persistence) and an Info.plist are removed to clear the template state.
(repo-wide) · high confidence
Introduce Archives view with TCA-based gallery fund synchronization
Added a new Archives view and reducer that displays a grid of available gallery archives and allows users to select and download them. The implementation migrates this feature to the Composable Architecture (TCA) using the \@Reducer\ and \@ObservableState\ macros, handling archive fetching, error states, and loading indicators. A key behavioral addition is the automatic synchronization of gallery funds (credits and points) upon successful archive retrieval, ensuring the user's balance is updated in the background via database client calls.
EhPanda/View/Detail/Archives · high confidence
Introduce Previews view for gallery browsing
Added a new Previews view and its associated reducer to display gallery images in an adaptive grid layout. This feature allows users to browse page thumbnails, with lazy loading triggered as they scroll, and provides navigation into a dedicated reading mode for individual pages.
EhPanda/View/Detail/Previews · high confidence
Introduce Watched content list with TCA-based state management
The Watched section of the Home view now uses a dedicated Composable Architecture (TCA) reducer and view to manage the display of watched galleries. Users can browse their watched content, apply filters, perform quick searches with tag suggestions, and view details. The implementation handles pagination, loading states, and caching via the database client, while supporting both phone and iPad layouts with appropriate navigation patterns.
EhPanda/View/Home/Watched · high confidence
Introduce dedicated Comments view and reducer for gallery interactions
Added a new CommentsView and CommentsReducer to handle the display and management of gallery comments. This change introduces specific UI capabilities for viewing comment lists with swipe-to-vote actions (thumbs up/down), editing comments via a sheet, and handling deep links to other galleries or comments. The reducer manages the state for these interactions, including navigation to a nested Detail view, progress updates, and UI feedback like scroll opacity effects and progress HUDs.
EhPanda/View/Detail/Comments · high confidence
Introduce dedicated search interface for gallery details
Added a new DetailSearchView and its corresponding DetailSearchReducer to provide a dedicated search experience within the gallery detail context. This feature allows users to perform keyword searches, browse paginated gallery lists, and access quick search and filter sheets directly from the detail view, with results cached to the local database.
EhPanda/View/Detail/DetailSearch · high confidence
Japanese localization added for app strings and permissions
This change introduces the Japanese language localization for the EhPanda app. It adds the \ja.lproj\ directory containing \InfoPlist.strings\ for system permission descriptions (Face ID and Photo Library) and \Localizable.strings\ with 906 entries covering UI text for features such as page jumping, quick search, toplists, reading settings, and error messages.
EhPanda/App/ja.lproj · high confidence
New Filters and NewDawn support views
Added FiltersView and FiltersReducer to manage search, global, and watched gallery filters with persistence, and introduced NewDawnView to display a stylized greeting screen with sun graphics.
EhPanda/View/Support · high confidence
New History section with search and clear functionality
The Home view now includes a History section, allowing users to view their gallery history, filter results via a search bar, and clear the entire history list. This feature is implemented using the Composable Architecture, with dedicated reducer and view files handling state management, database interactions, and UI components like the searchable list and clear confirmation dialog.
EhPanda/View/Home · high confidence
New detail view components for tags, ratings, and comments
Added four new SwiftUI components to the detail view area: TagDetailView displays tag descriptions, images, and links; RatingView renders star ratings with half-star precision; PostCommentView provides a text editor interface for posting comments; and LinkedText enables interactive tapping on URLs within text blocks.
EhPanda/View/Detail/Components · high confidence
New gallery cell components for list and detail views
The app introduces five new SwiftUI view components for displaying gallery items: GalleryCardCell, GalleryDetailCell, GalleryHistoryCell, GalleryRankingCell, and GalleryThumbnailCell. These cells provide distinct visual layouts for different contexts, such as a card-style view with animated backgrounds, a detailed list view with tag clouds and metadata, a compact history entry, a ranked list item, and a thumbnail view with category labels. They handle image loading, title truncation, rating display, and tag translation integration.
EhPanda/View/Support/Components/Cells · high confidence
New reading support infrastructure with Live Text, auto-play, and gesture handling
The reading view now includes a new set of support components that enable Live Text analysis (using Vision to detect and highlight text in images), automatic page advancement via a configurable timer, and refined gesture controls for navigation, zooming, and panel dismissal. A new \AdvancedList\ view manages page scrolling and position tracking, while \PageHandler\ adjusts page indexing for dual-page modes. These changes provide a more interactive reading experience with text recognition and automated navigation.
EhPanda/View/Reading/Support · high confidence
New settings components and views for EhPanda
The app introduces several new UI components within the Settings area: an AboutView displaying version info, contacts, and contributor lists; a LaboratorySettingView with a glass-effect toggle for bypassing SNI filtering; a ReadingSettingView allowing users to adjust reading direction, prefetch limits, landscape mode, and zoom scales; and a WebView component for handling in-app web navigation and login flows.
EhPanda/View/Setting/Components · high confidence
New support components for UI, navigation, and tag suggestions
This location introduces a suite of reusable SwiftUI components that enhance the app's interface and interaction capabilities. Users gain access to a tag suggestion system with namespace support and image previews, a generic list view that adapts between detail and waterfall (thumbnail) display modes, and dedicated views for category filtering, activity sharing, and page jumping. The update also includes standardized alert and error handling views, a tag cloud for browsing, and various toolbar and placeholder utilities to improve navigation and visual feedback.
EhPanda/View/Support/Components · high confidence
New tag translation and suggestion models
The app now includes a new set of data models for handling tag translations and suggestions. This introduces support for multiple languages (English, Japanese, Simplified Chinese, Traditional Chinese) with automatic detection of the user's preferred language. Tag translations are fetched from remote repositories and can be converted between traditional and simplified Chinese variants. The system also provides tag suggestions with weighted ranking based on namespace and keyword matching, and supports markdown parsing for tag descriptions and links.
EhPanda/Models/Tags · high confidence
New utility extensions for navigation, UI, and data handling
The app introduces a suite of new extension files in the Tools/Extensions directory to streamline development and enhance user experience. SwiftUINavigation\_Extension.swift adds helper methods for NavigationLink, confirmationDialog, and sheet presentations using enum-based state unwrapping, while AlertKit\_Extension.swift provides a dedicated jump-page alert view for quick navigation within content. ViewModifiers.swift introduces visual helpers like corner radius clipping, horizontal spacing, and synchronized bindings, alongside image processing modifiers (CornersModifier, WebtoonModifier) for the Kingfisher image loader. Reducer\_Extension.swift adds haptic feedback triggers and logging capabilities to the Composable Architecture reducers, and TTProgressHUD\_Extension.swift standardizes progress HUD configurations for loading, error, and success states. General Extensions.swift provides utility functions for data serialization, URL query manipulation, and string validation.
EhPanda/App/Tools/Extensions · high confidence
New utility helpers for app info, device detection, cookies, and markdown parsing
The app now includes a set of new utility structs in the Tools/Utilities folder to centralize common logic. AppUtil exposes the current version and build numbers, while DeviceUtil provides helpers to detect iPad vs. iPhone, screen dimensions, and orientation. CookieUtil verifies login status by checking for specific cookies on Ehentai and Exhentai domains. MarkdownUtil adds the ability to parse text, links, and images from Markdown strings using the CommonMark library. URLUtil generates structured URLs for searches, galleries, and filters, and UserDefaultsUtil simplifies reading app settings.
EhPanda/App/Tools/Utilities · high confidence
New utility tools and centralized configuration for EhPanda
This update introduces a suite of new helper utilities and a centralized configuration structure within the app's tools module. A new \ColorCodable\ extension enables SwiftUI colors to be serialized and deserialized, supporting persistent user-defined color settings. A \Defaults\ struct consolidates app-wide constants, including device-specific frame sizes, image aspect ratios, cookie keys, date formats, and URL endpoints for e-hentai/exhentai APIs. Additionally, new generic types like \IdentifiableBox\ and \EquatableVoid\ are added to support SwiftUI list requirements, while \EnvironmentKeys\ provides a new \inSheet\ environment value for managing sheet presentation state.
EhPanda/App/Tools · high confidence
Architecture
CoreData model definitions for gallery and app state entities
The database layer now includes explicit CoreData entity definitions for AppEnv, Gallery, GalleryDetail, and GalleryState. These files establish the schema for storing user settings, search filters, tag translation data, and gallery-specific state such as reading progress, comments, and image URL mappings (thumbnails, previews, original images). This provides the persistent storage foundation for the app's gallery viewing and management features.
EhPanda/Database/MODefinition · high confidence
Introduce Composable Architecture dependency clients for platform services
The app now uses the Composable Architecture's dependency injection pattern to manage access to core platform services, including app lifecycle, authorization, clipboard, cookies, database, device info, file operations, haptics, image handling, logging, UI state, URL parsing, and user defaults. This change replaces direct static or singleton calls with injectable clients, making these system interactions testable and decoupled from the rest of the application logic.
EhPanda/App/Tools/Clients · high confidence
Project structure reorganized to Composable Architecture (TCA)
The Xcode project has been restructured to adopt the Composable Architecture (TCA) pattern. This change introduces a new architecture where UI logic is separated into Reducers (e.g., HomeReducer, DetailReducer, SearchRootReducer) and side effects are handled by Clients (e.g., LibraryClient, CookieClient, DatabaseClient). The project now includes specific framework dependencies for TCA (ComposableArchitecture) and SwiftUI navigation, replacing previous state management approaches with a more predictable, unidirectional data flow.
EhPanda.xcodeproj · high confidence
Reading view restructured using the Composable Architecture (TCA)
The Reading view logic has been migrated to the Composable Architecture pattern, introducing a new \ReadingReducer\ to manage state and actions, and a \ReadingView\ that consumes this store. This change centralizes the handling of gallery data, image loading states, reading progress, and user interactions (such as gestures, page navigation, and settings) within a predictable, unidirectional data flow, replacing the previous implementation.
EhPanda/View/Reading · high confidence
Behavioural changes
Account settings page restructured with cookie management and navigation
The Account Setting view has been refactored to use the Composable Architecture (TCA) for state management, introducing a dedicated reducer to handle login, logout, and configuration flows. Users can now manage cookies for both Ehentai and Exhentai hosts, with the ability to copy cookie strings to the clipboard. The interface includes a segmented picker for selecting the gallery host, a toggle for the new dawn greeting, and navigation links to login, logout confirmation, account configuration, and tag management views.
EhPanda/View/Setting/AccountSetting · high confidence
Added Xcode scheme configuration for EhPanda
The project now includes a defined Xcode scheme (EhPanda.xcscheme) that configures how the app is built, tested, and launched. This setup enables parallel builds, specifies the primary app target and test bundle for the test action, and includes disabled command-line arguments for CoreData debugging (Concurrency, Migration, and SQL debug flags) in the launch configuration.
EhPanda.xcodeproj/xcshareddata · high confidence
Added empty entitlements file for EhPanda
The EhPanda project now includes an empty entitlements file (EhPanda.entitlements). This file currently contains no specific permissions or capabilities, serving as a placeholder for future entitlement configurations.
EhPanda · low confidence
App launch now waits for database migration and supports alternate icons
The app entry point has been updated to display a MigrationView overlay while the database migration state is not idle, ensuring the user interface waits for data preparation before showing the main TabBarView. Additionally, the Info.plist now registers multiple alternate app icons (Default, Developer, NotMyPresident, Stand With Ukraine 2022, and Ukiyoe) for both iPhone and iPad, allowing users to switch the app icon directly from the system settings or within the app.
EhPanda/App · high confidence
Core Data model updated to version 6 with renamed URL attributes
The Core Data model has been migrated to version 6, introducing specific attribute renames within the GalleryStateMO entity to improve clarity: 'thumbnails' is now 'thumbnailURLs', 'previews' is now 'previewURLs', and 'contents' is now 'imageURLs'. This change aligns the persistent store schema with the application's internal naming conventions for image and preview resources.
EhPanda/Database/Model.xcdatamodeld/Model 6.xcdatamodel · high confidence
Core data model for gallery and application state management
The application's local data storage now persists gallery metadata and user state using four Core Data entities: AppEnvMO for application settings and filters, GalleryMO for basic gallery listings, GalleryDetailMO for detailed gallery information including page count and ratings, and GalleryStateMO for tracking reading progress and cached content like thumbnails and comments.
EhPanda/Database/Model.xcdatamodeld/Model 5.xcdatamodel · high confidence
Core data model updated with new attributes for search, translation, and gallery details
The Core Data model (Model 4) has been updated to support new app features. The AppEnvMO entity now includes attributes for quick search words and a tag translator, enabling quick search functionality and tag translation capabilities. The GalleryDetailMO entity has been expanded with new fields including Japanese title (jpnTitle), parent URL, and various metadata fields like favored count, rating count, and size metrics, providing more detailed information for gallery items.
EhPanda/Database/Model.xcdatamodeld/Model 4.xcdatamodel · high confidence
CoreData migration framework and Model 5 to 6 migration policy
The app now includes a structured migration system for its local CoreData store, allowing seamless upgrades between schema versions (Model 1 through Model 7). This update introduces a new migration from Model 5 to Model 6, which specifically handles the conversion of string-based image and gallery URLs into URL objects for the Gallery, GalleryDetail, and GalleryState entities, ensuring data integrity during the upgrade process.
EhPanda/Database/Migration · high confidence
CoreData model migration to version 7 with new attributes and types
The application's persistent store schema has been updated to Model 7, introducing several structural changes to support new features. The AppEnv entity now includes dedicated attributes for quick search words, search filters, and watched filters. URL storage has been standardized by switching from String to the native URI type for gallery and cover URLs. The Gallery entity now stores tags directly, while the GalleryState entity has been significantly expanded to track image URLs, original image URLs, preview configurations, and thumbnail URLs, replacing previous binary content storage. Additionally, the model version identifier has been updated to reflect this migration.
EhPanda/Database/Model.xcdatamodeld · high confidence
EhSetting page rebuilt using the Composable Architecture
The EhSetting page has been rewritten to use the Composable Architecture (TCA), introducing a new EhSettingReducer to manage state and effects for fetching, submitting, and performing actions on e-hentai/exhentai settings. This change replaces the previous implementation with a structured, testable architecture, ensuring UI updates are driven by state changes and handling asynchronous operations like profile deletion and setting submissions through explicit effects.
EhPanda/View/Setting/EhSetting · high confidence
Gallery models refactored and split into dedicated files
The gallery data models have been reorganized by splitting the previous monolithic structure into separate, dedicated files (Category, Gallery, GalleryArchive, GalleryComment, GalleryDetail, GalleryState, GalleryTorrent, and Language). This change introduces specific model types for gallery details, comments, and torrent information, while also renaming internal properties in GalleryState for clarity (e.g., \thumbnails\ to \thumbnailURLs\, \previews\ to \previewURLs\, \contents\ to \imageURLs\).
EhPanda/Models/Gallery · high confidence
General settings view and logic migrated to Composable Architecture
The General Settings screen has been rebuilt using the Composable Architecture (TCA), introducing a dedicated reducer to manage state for cache management, tag translation extensions, and security settings. Users will see the same configuration options—such as clearing web image caches, managing custom tag translations, and adjusting auto-lock policies—but the underlying logic now uses TCA patterns like dependency injection for system interactions (e.g., opening settings, checking passcodes) and explicit state management for asynchronous operations like calculating disk usage.
EhPanda/View/Setting/GeneralSetting · high confidence
Introduce CoreData-based data model for gallery and app state
The application now uses a CoreData model (Model.xcdatamodel) to persist data, replacing previous JSON-based storage. This model defines four entities: AppEnvMO for application settings and user preferences, GalleryMO for basic gallery metadata (title, cover, rating, gid), GalleryDetailMO for detailed gallery information (jpnTitle, uploader, page count, torrent info), and GalleryStateMO for tracking reading progress, comments, previews, and tags. This change supports home, detail, reading, history, tags, previews, and comments functions by providing a structured, persistent backend.
EhPanda/Database/Model.xcdatamodeld/Model.xcdatamodel · high confidence
Introduce structured error handling and support models
The app now uses a centralized \AppError\ enum to manage and display user-facing error states (such as network failures, parsing issues, or IP bans) with localized descriptions and specific UI symbols. Additionally, new support models have been added to handle EhSetting configurations (including browsing country localization and profile management) and Live Text processing (bounding box calculations for text extraction).
EhPanda/Models/Support · high confidence
Migrate Home Toplists and Frontpage to Composable Architecture 1.x
The Toplists and Frontpage home sections have been rewritten to use the Composable Architecture (TCA) 1.x API, replacing the previous implementation. This update introduces new \ToplistsReducer\ and \FrontpageReducer\ files that manage state and side effects using TCA 1.x patterns, including the \@Reducer\ macro, \@ObservableState\, and modern effect handling. The corresponding views (\ToplistsView\ and \FrontpageView\) have been updated to bind to these new stores, ensuring consistent behavior for features like gallery fetching, pagination, filtering, and navigation across both sections.
EhPanda/View/Home/Toplists · high confidence
Migrate to Composable Architecture 1.7 and refactor app state management
The app's data flow has been upgraded to Composable Architecture (TCA) 1.7, introducing several structural changes to how state and effects are handled. The \ReducerProtocol\ has been renamed to \Reducer\, and \EffectTask\ to \Effect\, aligning with the latest TCA API. A new \Heap\ property wrapper was added to manage mutable state within the \AppRouteReducer\, specifically for the \detailState\ to prevent recursive navigation crashes. The \AppDelegateReducer\ was introduced to handle launch-time initialization tasks like database preparation and cookie syncing, while the \AppLockReducer\ now manages app locking logic based on scene phase changes. Additionally, deprecated initializers and methods (such as \init(value:)\ and \eraseToEffect()\) have been updated to their modern equivalents, and binding actions are now handled first to ensure correct state updates.
EhPanda/DataFlow · high confidence
Migration to CoreData with CloudKit support
The application database layer has been replaced with a new implementation using CoreData and NSPersistentCloudKitContainer, introducing automatic schema migration capabilities via a custom CoreDataMigrator. This change enables persistent storage with cloud synchronization and provides a structured way to handle database versioning and store rebuilding, replacing the previous JSON-based property storage system.
EhPanda/Database · high confidence
New TCA-based login flow with glass UI and WebView integration
The login screen in Settings has been rewritten using the Composable Architecture (TCA) to manage state and side effects. Users now experience a login interface featuring a glassmorphism design for text fields and the submit button, along with haptic feedback during the login process. The flow supports navigating to a WebView for authentication via a globe icon in the toolbar, handles focus management between username and password fields, and provides visual loading states and error feedback upon completion.
EhPanda/View/Setting/Login · high confidence
Persistent data models refactored into separate files
The persistent storage models in the \EhPanda/Models/Persistent\ directory have been split from a single monolithic file into distinct, dedicated files (\AppEnv.swift\, \Filter.swift\, \Greeting.swift\, \Setting.swift\, \User.swift\). This change improves code organization and maintainability by isolating the definitions for application environment state, search filters, user greetings, user settings, and account information, while preserving the existing data structures and encoding/decoding logic.
EhPanda/Models/Persistent · high confidence
Reduced app archive size via binary thinning and release notes filtering
The actions-tool now includes a shell script that reduces the size of iOS app archives by stripping bitcode, removing debug symbols, and thinning Mach-O binaries to the arm64 architecture. Additionally, a new Swift utility filters release notes to include only the first 100 items, streamlining the changelog output.
actions-tool · high confidence
Removal of legacy Core Data model
The legacy Core Data model file (EhPanda.xcdatamodel) containing the 'Item' entity and its 'timestamp' attribute has been removed from the project. This change eliminates the previous data model definition, likely as part of a migration to a new model version or a shift away from Core Data for this specific entity.
EhPanda.xcdatamodeld · high confidence
Search interface restructured with dedicated root view and quick search integration
The Search module has been refactored to introduce a new \SearchRootView\ that acts as the entry point, managing search history keywords, history galleries, and quick search words. This change separates the main search logic into a distinct \SearchReducer\ and \SearchView\, allowing for a cleaner navigation flow. Users will now see a suggestions panel in the root view displaying recent history and quick search options, and the quick search feature is now accessible via a sheet from both the root and search views, providing a more integrated experience for finding content.
EhPanda/View/Search · high confidence
Settings interface restructured with new appearance options
The Settings screen has been reorganized into distinct sections (Account, General, Appearance, Reading, Laboratory, About) using a new TCA-based architecture. In the Appearance section, users can now select alternate app icons (including themed options like 'ukiyo-e' and 'developer'), customize the list display mode, control tag visibility and maximum count in lists, and toggle the display of Japanese titles in galleries.
EhPanda/View/Setting · high confidence
Standardized English localization strings
The app now uses dedicated localization files (Constant.strings, InfoPlist.strings, and Localizable.strings) for English text, replacing previous hard-coded strings. This change centralizes UI text, permission descriptions, and contributor acknowledgements, ensuring consistent English phrasing across the interface and settings.
EhPanda/App/en.lproj · high confidence
Tab bar navigation behavior refined for iPad and app lock integration
The TabBar view and its reducer have been refactored to improve iPad usability and integrate with the app lock feature. The TabBarReducer now explicitly prevents the 'Setting' tab from being selected on iPad devices, addressing unexpected navigation behaviors on that platform. Additionally, the TabBarView now passes app lock state (blur radius and lock status) to all tab content views and the new dawn sheet, ensuring consistent blurring and lock-screen overlay behavior across the entire application interface.
EhPanda/View/TabBar · high confidence
Updated app strings and translation contributor list
The generated localization file has been updated to reflect changes in the app's copyright year (now 2025), the list of code-level contributors, and the translation contributors. This ensures that the 'About' and 'Acknowledgements' sections of the app display the correct current team members and partner links.
EhPanda/App/Generated · high confidence
Workspace configuration files added
The Xcode workspace configuration has been updated by adding the \contents.xcworkspacedata\, \IDEWorkspaceChecks.plist\, and \WorkspaceSettings.xcsettings\ files. These changes establish the standard workspace structure and settings for the project, ensuring consistent IDE behavior and workspace integrity for developers.
EhPanda.xcodeproj/project.xcworkspace · medium confidence
Test coverage
Added parser tests for ban intervals, settings, and greetings; Added test fixture for Favorites Compact List parsing; Added test fixtures for gallery detail and multi-page viewer parsing; Added test fixtures for parser edge cases; Added test infrastructure for gallery and list parsers; Added test utility helpers for HTML parsing and wait synchronization; Added unit tests for gallery and list parsers.
Dependencies
Updated Swift Package dependencies
The project's resolved package dependencies have been updated, including upgrades to the Swift Composable Architecture (1.25.2), Kingfisher (7.12.0), Swift Navigation (2.6.0), and Swift Sharing (2.7.4), among others.
(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 51 → 51 (-0.4)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 88 → 83 (-5.0)
- Architecture 87 → 89 (+1.8)
- Maturity 40 → 40 (+0.0)
- Readiness 60 → 59 (-1.1)
- Security 45 → 45 (+0.0)
- Domain Modelling 100 → 100 (+0.0)
Resolved (11)
- Change coupling: AccountSettingView.swift ↔ GeneralSettingView.swift (EhPanda/View/Setting/AccountSetting/AccountSettingView.swift)
- Change coupling: FrontpageView.swift ↔ SearchView.swift (EhPanda/View/Home/Frontpage/FrontpageView.swift)
- Change coupling: FrontpageView.swift ↔ ToplistsView.swift (EhPanda/View/Home/Frontpage/FrontpageView.swift)
- Change coupling: QuickSearchView.swift ↔ EhSettingView.swift (EhPanda/View/Search/Support/QuickSearchView.swift)
- Change-coupling hub: FavoritesView.swift → FrontpageView.swift, PopularView.swift, ToplistsView.swift, WatchedView.swift, SearchRootView.swift, SearchView.swift (EhPanda/View/Favorites/FavoritesView.swift)
- Change-coupling hub: HistoryView.swift → FavoritesView.swift, FrontpageView.swift, PopularView.swift, ToplistsView.swift, WatchedView.swift, SearchView.swift, AccountSettingView.swift, GeneralSettingView.swift (EhPanda/View/Home/History/HistoryView.swift)
- Change-coupling hub: PopularView.swift → FrontpageView.swift, ToplistsView.swift, WatchedView.swift, SearchView.swift, TabBarView.swift (EhPanda/View/Home/Popular/PopularView.swift)
- Change-coupling hub: WatchedView.swift → FrontpageView.swift, ToplistsView.swift, SearchRootView.swift, SearchView.swift (EhPanda/View/Home/Watched/WatchedView.swift)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Off-boarding risk: anonymized user #1
New (119)
- AppReducer.body (cognitive 56) (EhPanda/DataFlow/AppReducer.swift)
- AppReducer.body (cyclomatic 44) (EhPanda/DataFlow/AppReducer.swift)
- AppRouteReducer.body (cognitive 24) (EhPanda/DataFlow/AppRouteReducer.swift)
- AppRouteReducer.body (cyclomatic 27) (EhPanda/DataFlow/AppRouteReducer.swift)
- ArchivesReducer.body (cognitive 29) (EhPanda/View/Detail/Archives/ArchivesReducer.swift)
- ArchivesReducer.body (cyclomatic 28) (EhPanda/View/Detail/Archives/ArchivesReducer.swift)
- Change coupling: HistoryView.swift ↔ SearchView.swift (EhPanda/View/Home/History/HistoryView.swift)
- Change coupling: HistoryView.swift ↔ ToplistsView.swift (EhPanda/View/Home/History/HistoryView.swift)
- Change-coupling hub: FavoritesView.swift → FrontpageView.swift, HistoryView.swift, ToplistsView.swift, SearchView.swift (EhPanda/View/Favorites/FavoritesView.swift)
- Change-coupling hub: FrontpageView.swift → HistoryView.swift, ToplistsView.swift, SearchView.swift (EhPanda/View/Home/Frontpage/FrontpageView.swift)
- Change-coupling hub: PopularView.swift → FavoritesView.swift, FrontpageView.swift, HistoryView.swift, ToplistsView.swift, WatchedView.swift, SearchView.swift, TabBarView.swift (EhPanda/View/Home/Popular/PopularView.swift)
- Change-coupling hub: WatchedView.swift → FavoritesView.swift, FrontpageView.swift, HistoryView.swift, ToplistsView.swift, SearchRootView.swift, SearchView.swift (EhPanda/View/Home/Watched/WatchedView.swift)
- CommentsReducer.body (cognitive 28) (EhPanda/View/Detail/Comments/CommentsReducer.swift)
- CommentsReducer.body (cyclomatic 38) (EhPanda/View/Detail/Comments/CommentsReducer.swift)
- DetailSearchReducer.body (cognitive 29) (EhPanda/View/Detail/DetailSearch/DetailSearchReducer.swift)
- DetailSearchReducer.body (cyclomatic 29) (EhPanda/View/Detail/DetailSearch/DetailSearchReducer.swift)
- Duplicated block (10 lines × 2) (EhPanda/App/Tools/Extensions/ViewModifiers.swift)
- Duplicated block (10 lines × 3) (EhPanda/View/Detail/DetailSearch/DetailSearchView.swift)
- Duplicated block (10 lines × 3) (EhPanda/View/Favorites/FavoritesView.swift)
- Duplicated block (10 lines × 3) (EhPanda/View/Home/Frontpage/FrontpageView.swift)
- …and 99 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
EhPanda-Team/EhPanda 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 37b979965cf7c4778877c795e8df60c2c0ff6eb3 — 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.