khoren93/SwiftHub
52.8
Weak · 30 September 2026
13.7k
lines of production code
Swift
primary language
2
measurements over time
What this system is
SwiftHub is an iOS client for the GitHub API that enables users to browse repositories, view issues and pull requests, and manage user profiles. It supports authentication via OAuth, personal access tokens, and basic auth, while providing features like code line analysis, language breakdowns, and activity event feeds. The application includes a comprehensive settings interface for theme and language customization, along with tools for inviting friends and managing app preferences.
How it got here
2017–2018 — Initial project scaffolding and core feature implementation
44 changes.
This period established the foundational architecture of the SwiftHub iOS application, including project initialization, dependency management via CocoaPods, and the creation of reusable UI components and networking layers. It focused on implementing core GitHub API integrations for browsing repositories, users, issues, and pull requests, while also introducing essential features like authentication, theming, and multi-language support.
2019–2020 — GraphQL integration and feature expansion
14 changes.
The project integrated the GitHub GraphQL API to enhance data retrieval for repositories, users, and search, while adding new modules for contacts, branches, releases, and code line statistics. This period also focused on expanding internationalization with Italian and Traditional Chinese support and improving test coverage for core models and view models.
Features
Added Armenian and Russian language support
The app now includes localized strings for Armenian (hy.lproj) and Russian (ru.lproj), covering UI elements across the home tab, login, notifications, repository and user details, search, settings, and the 'What's New' screen.
SwiftHub/Resources/hy.lproj, SwiftHub/Resources/ru.lproj · high confidence
Added Commits screen for browsing repository history
Users can now view a paginated list of commits for a specific repository. The screen displays commit messages, author avatars, and relative timestamps, and allows users to tap a commit to open its details in a web view or tap an author avatar to view their profile.
SwiftHub/Modules/Commits · high confidence
Added Firebase and Google Mobile Ads configuration files
The SwiftHub app now includes configuration files for Google services. The main Info.plist has been updated with keys for Google Mobile Ads (GADApplicationIdentifier) and usage descriptions for Contacts and Photo Library permissions, which are required for the invite friends and media features. Additionally, a new GoogleService-Info.plist file has been added to the Resources folder, containing project-specific identifiers for Firebase (such as API key, project ID, and bundle ID) and test ad unit IDs for banners and interstitials.
SwiftHub · high confidence
Added GraphQL queries for repository, user, and search data
Introduced new GraphQL query definitions in the Networking layer to support repository details, user profiles, and search functionality. The Repository query fetches comprehensive metadata including language statistics, star/fork counts, and license information. The User queries retrieve profile details, pinned repositories, organization memberships, and contribution calendars for both the current viewer and specific users. The Search queries enable paginated discovery of repositories and users, including starred status and primary language data.
SwiftHub/Networking/GraphQL/Queries · high confidence
Added Italian language support
The app now includes a new Italian localization, allowing Italian-speaking users to see the interface in their native language. This update adds translations for all major app sections, including navigation tabs, login screens, repository details, search filters, settings, and user profiles.
SwiftHub/Resources/it.lproj · high confidence
Added Pull Requests list view with open/closed filtering
Users can now view a list of pull requests for a repository, filtered by open or closed status via a segmented control. The list displays pull request titles, relative timestamps, author information, and associated labels. Tapping a pull request opens its details screen, while tapping the author's avatar navigates to their user profile.
SwiftHub/Modules/Pull Requests · high confidence
Added Releases module to view repository release history
Users can now view a paginated list of releases for a repository. This new module displays release tags, names, publication dates, and descriptions in a table view, supports pull-to-refresh and infinite scroll for loading more items, and allows users to tap a release to open its details in a web view or tap the author avatar to view the user's profile.
SwiftHub/Modules/Releases · high confidence
Added Simplified Chinese localization
The app now supports Simplified Chinese (zh-Hans). Users can switch their interface language to Chinese in Settings, and all UI elements—including navigation titles, button labels, toast messages, and the 'What's New' screen—will be displayed in Simplified Chinese.
SwiftHub/Resources/zh-Hans.lproj · high confidence
Added Traditional Chinese (zh-Hant) localization
Users can now see the app interface in Traditional Chinese. This change adds the Localizable.strings file for the zh-Hant locale, providing translations for common UI elements, navigation titles, login screens, repository details, search filters, settings, and user profile sections.
SwiftHub/Resources/zh-Hant.lproj · high confidence
Added app logo asset
The Sketch directory now includes a new SVG file for the application logo, providing the visual asset for the brand identity.
Sketch · high confidence
Added centralized font extension for SwiftHub UI styling
A new UIFont extension (UIFont+SwiftHub.swift) has been added to provide standardized font configurations for the application's user interface. This change introduces static helper methods to retrieve specific font styles, including navigation titles, main titles, and descriptions, ensuring consistent typography across the app. Additionally, it includes a utility method to list all available system font names, which may support dynamic font selection or debugging features.
SwiftHub/Extensions/UIFont · high confidence
Added image tinting capability via filled(withColor:) extension
The UIImage extension now includes a filled(withColor:) method that allows users to tint an image with a specific color. This is achieved by creating a new image context, applying the specified color as a fill, and using the original image's alpha channel as a mask to restrict the color to the visible pixels of the image.
SwiftHub/Extensions/UIImage · high confidence
Added issue and pull request conversation views
Users can now view and interact with comments on issues and pull requests through new conversation screens. This change introduces \IssueCommentsViewController\ and \PullRequestCommentsViewController\ (along with their view models), which integrate the MessageKit library to display comment threads. The implementation supports refreshing the comment list and handles user selection and URL navigation within the conversation context.
SwiftHub/Modules/Issue Details · high confidence
Added launch screen and initial split view controller for iPad support
The app now includes a dedicated LaunchScreen storyboard that displays the app icon during startup, and a new Main storyboard that initializes with an InitialSplitViewController. This structural change in the Main storyboard serves as the entry point for the split view interface, enabling the application to support iPad multitasking layouts.
SwiftHub/Modules/Main/Base.lproj · high confidence
Added number formatting and localization extensions
Added new Foundation extensions to support user-facing formatting and localization. The Int extension now includes a kFormatted method to display large numbers (such as repository star counts) in a compact, human-readable format (e.g., 1.5K), as well as methods to convert bytes and kilobytes into file-size strings. The StaticString extension provides convenience methods for localized string retrieval and formatting.
SwiftHub/Extensions/Foundation · high confidence
Added repository contents browsing screen
Users can now view the file and directory structure of a repository. This change introduces the Contents module, including a table view that lists files and folders with appropriate icons, supports navigating into subdirectories, and allows opening non-directory items in a source viewer or external web links.
SwiftHub/Modules/Contents · high confidence
Added theme selection capability
Users can now choose from a list of available color themes to customize the app's appearance. This change introduces a new Theme module containing a table view that displays all supported themes; selecting a theme immediately applies the new color scheme and logs the selection for analytics.
SwiftHub/Modules/Theme · high confidence
Adds common UI components and base view controllers
Introduces a suite of reusable UI components and base controllers in the Common module, including themed wrappers for standard UIKit elements (Button, Label, TextField, TableView, etc.), a ChatViewController for messaging, a WebViewController for in-app browsing, and base Table/Collection view controllers with built-in pull-to-refresh and infinite scrolling support.
SwiftHub/Common · high confidence
Expanded data models for GitHub API and GraphQL integration
The app now supports a broader range of GitHub data by introducing new model files for Branches, Comments, Commits, Committer details, Content, Events, Issues, Languages, Licenses, Milestones, Notifications, Pull Requests, Releases, and Users. These models enable features such as viewing repository branches, browsing commit history with file diffs, reading issue and pull request conversations via MessageKit, and displaying detailed user profiles including pinned repositories and contribution calendars. The models are generated using JSONExport and ObjectMapper, with specific initializers added to parse data from both the REST API and GraphQL endpoints.
SwiftHub/Models · high confidence
Initial English localization for SwiftHub
The app now includes its first English language support, providing user-facing text for core navigation (Home, Search, Profile, Settings), authentication flows (Basic, Personal Access Token, OAuth), repository details, issues, search filters, and settings options like night mode and theme selection. This addition enables users to interact with the interface in English for the first time.
SwiftHub/Resources/en.lproj · high confidence
Initial GraphQL API integration for GitHub data
The app now uses the GitHub GraphQL API to fetch repository, user, and search data, supplementing the existing REST API. This change introduces a new Apollo-based networking layer in SwiftHub/Networking/GraphQL, including generated query types (e.g., RepositoryQuery, SearchRepositoriesQuery), an RxSwift extension for Apollo client operations, and a GraphApi service that handles authentication and data mapping. Users benefit from more efficient and flexible data retrieval for features like repository details, user profiles, and search results.
SwiftHub/Networking/GraphQL · high confidence
Initial fastlane configuration for iOS automation
Added fastlane configuration files (Appfile, Fastfile, Snapfile, SnapshotHelper.swift) to automate iOS build, test, and release processes. The Fastfile defines lanes for setting up dependencies, running tests, generating localized screenshots with FrameIt, submitting beta builds to TestFlight, and deploying to the App Store. It also includes lanes for incrementing build numbers and version numbers (patch, minor, major). The Snapfile configures screenshot capture for specific devices (iPhone 8 Plus, iPhone 13 Pro Max, iPad Pro 12.9-inch 5th gen) and languages (en-US, zh-Hans, ru).
fastlane · high confidence
Initial project configuration and source structure
The SwiftHub Xcode project is initialized with a complete source file structure, including ViewControllers, ViewModels, and Models for features such as repository browsing, user profiles, issues, pull requests, and notifications. The project configuration includes references to localizable strings, JSON test fixtures, and GraphQL schema files, establishing the foundational architecture for the application.
SwiftHub.xcodeproj · high confidence
Introduce Search module with trending and keyword search capabilities
The Search module now allows users to view trending repositories and users (with daily, weekly, and monthly filters) and perform keyword searches. The interface includes segmented controls to switch between repositories and users, toggle between trending and search modes, and sort results by criteria such as stars, forks, followers, or update date. The view supports infinite scrolling for pagination and displays star counts in a K-formatted style.
SwiftHub/Modules/Search · high confidence
Introduce repository listing with starring status and pull-to-refresh
The Repositories module now displays a list of repositories with support for pull-to-refresh and infinite scrolling. Each repository cell shows the star count in a K-formatted style and includes a star button that reflects the user's starring status (starred vs. unstarred), with the button hidden when the user is not logged in or the status is unavailable. The view adapts its title and header image based on the context (user repositories, starred, watching, or forks).
SwiftHub/Modules/Repositories · high confidence
Introduced centralized configuration module for app settings and API endpoints
Added a new \Configs.swift\ file that centralizes application constants, including API base URLs (GitHub, Trending, Star History, Skyline), authentication scopes, UI dimensions, and third-party service identifiers (Mixpanel, AdMob). This change provides a single source of truth for network endpoints and app metadata, enabling easier management of staging vs. production environments and third-party integrations.
SwiftHub/Configs · high confidence
Introduces new reusable table view cell components with theme support
The app now includes a new base \TableViewCell\ and a \DefaultTableViewCell\ implementation in the common table view cells module. These components provide a standardized layout for list items, featuring a left image, title, detail text, secondary detail, attributed detail, and a badge, all bound to a new \TableViewCellViewModel\. The cells are integrated with the app's theming system, allowing colors for text, images, and backgrounds to adapt dynamically to light and dark modes.
SwiftHub/Common/Table View Cells · high confidence
Introduction of centralized app managers and analytics infrastructure
The app now includes a new set of manager classes in the SwiftHub/Managers directory to handle core functionality. This introduces a centralized AnalyticsManager that tracks user events and app interactions using both Mixpanel and Firebase Analytics. An AuthManager has been added to manage user authentication state and tokens via the iOS Keychain. Additional managers include ContactsManager for accessing user contacts, ThemeManager for supporting light and dark modes with customizable accent colors, ReachabilityManager for monitoring network status, and LibsManager for initializing third-party libraries such as Firebase, AdMob, and FLEX. A WhatsNewManager is also present to display release notes to users.
SwiftHub/Managers · high confidence
Localized screenshot titles and keywords for FrameIt
Added localized title and keyword strings for the search, repository details, and settings screens in English, Russian, and Chinese (Simplified), and configured FrameIt to apply specific keyword colors to each screen in the generated app store screenshots.
fastlane/screenshots · high confidence
Login screen now supports OAuth, Personal Access Token, and Basic Authentication
The Login module has been implemented with a segmented interface allowing users to authenticate via three methods: OAuth (using ASWebAuthenticationSession for iOS 13+), Personal Access Token, and Basic Authentication. The LoginViewController manages the UI for these distinct flows, while the LoginViewModel handles the specific logic for each, including token storage via AuthManager and subsequent user profile retrieval.
SwiftHub/Modules/Login · high confidence
New API protocol defining GitHub data access methods
The Networking layer introduces a new \SwiftHubAPI\ protocol that defines the contract for accessing GitHub data. This protocol specifies methods for retrieving repository details, user information, issues, pull requests, and events, as well as actions for authentication, starring repositories, and following users. It also includes endpoints for trending repositories and developers, language statistics, and code line counts, establishing the foundational interface for the app's data fetching capabilities.
SwiftHub/Networking · high confidence
New Branches list screen for repositories
Users can now view a paginated list of branches for a repository. This new module includes a table view that displays branch names and icons, supports pull-to-refresh and infinite scroll for loading more branches, and allows users to select a branch to navigate away from the list.
SwiftHub/Modules/Branches · high confidence
New Contacts module with invite functionality
The app now includes a new Contacts module that allows users to view their device contacts, search for specific entries, and invite friends via SMS. The feature uses RxSwift for reactive data binding and integrates with the system's Contacts framework to fetch data. When a user selects a contact, the app presents an SMS composition view to send an invitation, logging the success or failure of the action for analytics purposes.
SwiftHub/Modules/Contacts · high confidence
New Events module with segmented filtering for user and repository activity
The app now includes a dedicated Events screen that displays a chronological feed of GitHub activity. For user profiles, the view features a segmented control allowing users to toggle between 'Received' and 'Performed' events, while this filter is hidden for repository and organization views. The list displays various event types (such as pushes, issues, pull requests, and stars) with contextual badges and action text, and tapping an event's actor navigates to their profile.
SwiftHub/Modules/Events · high confidence
New Issues list screen with open/closed filtering and label display
Users can now view a dedicated Issues list for a repository, segmented into 'Open' and 'Closed' tabs. The list displays issue titles, relative timestamps, comment counts, and associated labels with colored badges. Tapping an issue opens its details, while tapping the author's avatar navigates to their profile.
SwiftHub/Modules/Issues · high confidence
New Language Selection Screen in Settings
Users can now choose their preferred app language from a dedicated screen within the Settings module. This new feature displays a list of available languages with localized names, allows selection via a checkmark indicator, and saves the choice to update the app's display language immediately upon confirmation.
SwiftHub/Modules/Settings Language · high confidence
New Languages selection screen with save and search capabilities
The Languages module now provides a dedicated screen allowing users to browse, search, and select a preferred programming language for repositories. This new feature includes a table view with a search bar to filter languages by name, a 'Select All' option to reset the preference, and a Save button that persists the chosen language to user defaults. The implementation introduces a new ViewModel handling the filtering and selection logic, a custom table cell for displaying language items, and analytics logging for language changes.
SwiftHub/Modules/Languages · high confidence
New Lines Count feature with language breakdown chart
Users can now view a detailed breakdown of code lines by language for a repository. This module introduces a new screen displaying a pie chart that visualizes the distribution of lines across different programming languages, with a central summary showing total lines, files, blanks, comments, and code lines. The feature fetches this data via an API call and allows users to tap on chart segments to see specific details for each language.
SwiftHub/Modules/Lines Count · high confidence
New RxSwift extensions for pull-to-refresh, image loading, and data operators
This change introduces a new set of RxSwift extensions in the SwiftHub project to enhance reactive UI interactions and data handling. Users benefit from built-in support for pull-to-refresh controls via \KafkaRefresh+Rx\, simplified image loading for \UIImageView\ through \Kingfisher+Rx\, and utility operators like \filterNil\, \not\, and \reachedBottom\ for \Observable\ and \UIScrollView\. These additions streamline the implementation of common patterns such as infinite scrolling and two-way data binding in the app's interface.
SwiftHub/Extensions/RxSwift · high confidence
New Settings cell types for toggles and standard items
The Settings module now includes dedicated UI components for standard settings rows and toggle switches. A new \SettingCell\ provides a standardized layout with a 30x30 icon, centered image, and hidden detail labels for simple list items. Additionally, a \SettingSwitchCell\ introduces a toggle switch control that binds to a view model, allowing users to enable or disable specific settings directly from the list.
SwiftHub/Modules/Settings/Cells · high confidence
New Settings screen with account, project, and preference management
A new Settings module has been introduced, providing a centralized hub for user account management, application preferences, and support information. Users can now view their profile, log out, and manage their 'My Projects' section, which displays links to SwiftHub, FlutterHub, and flutter\_zxing repositories. The screen also includes preference toggles for enabling/disabling banners and switching between light and dark night modes, alongside options to change the app theme, language, and contact details. Additionally, users can clear the Kingfisher cache (with size display) and access Acknowledgements and 'What's New' information.
SwiftHub/Modules/Settings · high confidence
New Source screen for viewing and customizing code syntax
A new Source screen has been added, allowing users to view source code with syntax highlighting. The screen includes a toolbar with buttons to toggle language and theme pickers, enabling users to customize the appearance of the code display. Additionally, a history button is provided to open the file's revision history in an external web service.
SwiftHub/Modules/Source · high confidence
New UIView extensions for borders, rounding, and blurring
Users can now easily apply visual styles to views through new helper methods. The \UIView+Borders\ extension allows adding single-sided borders (top, bottom, left, right) with customizable colors, depths, and insets, while \UIView+SwiftHub\ adds methods to round corners (including full circular clipping), render views as images, and apply or remove blur effects.
SwiftHub/Extensions/UIView · high confidence
New notifications screen with filtering and mark-as-read
The app now includes a dedicated Notifications module that displays a list of notifications with support for filtering by unread, participating, or all statuses via a segmented control. Users can mark all notifications as read with a single tap, and tapping a notification cell navigates to the associated user or repository details.
SwiftHub/Modules/Notifications · high confidence
Repository details screen now displays language breakdown and supports web view navigation
The Repository Details screen has been enhanced to show a visual breakdown of programming languages used in a repository, featuring a progress bar and a scrollable list of language names with color indicators. Additionally, users can now open the repository's homepage and the repository details themselves in an external web view, providing an alternative way to browse content outside the app.
SwiftHub/Modules/Repository Details · high confidence
User profile now displays a contributions calendar and expanded profile details
The User Details screen has been enhanced to show a user's contribution history via a new ContributionsCell that renders a calendar image, alongside additional profile information cells for created/updated dates, starred repositories, watching status, events, company, blog, and a profile summary. The view controller and view model have been updated to bind these new data points and handle interactions for following, viewing repositories, and viewing followers/following lists.
SwiftHub/Modules/User Details · high confidence
Users module introduces follow status display and multi-mode user lists
The Users module now displays whether a user is following another in search results, indicated by a follow button in the user cell that changes its icon and opacity based on the following state. Additionally, the module supports multiple viewing modes (followers, following, watchers, stargazers, contributors) for both users and repositories, allowing users to browse these lists with pull-to-refresh and infinite scrolling capabilities.
SwiftHub/Modules/Users · high confidence
Behavioural changes
3 commits (0 fixes) modifying iThoughtsX
A change to existing behaviour in iThoughtsX — 3 commits, 3 files.
iThoughtsX · medium confidence · unverified
Add code line count feature and support for personal access tokens
The networking layer now supports fetching the number of code lines for repositories via a new Codetabs API integration, allowing users to view line-count statistics. Additionally, the authentication system has been updated to support personal access tokens, enabling users to authenticate using this method alongside existing options.
SwiftHub/Networking/Rest · high confidence
Added Xcode project schemes for app and test targets
The project now includes explicit Xcode schemes for the main SwiftHub application, the unit tests (SwiftHubTests), and the UI tests (SwiftHubUITests). These schemes define how each target is built, launched, and tested within the IDE, ensuring that the test targets are correctly configured to run against the app and that build actions are scoped appropriately for each target.
SwiftHub.xcodeproj/xcshareddata · high confidence
Initial app launch, navigation, and staging environment configuration
The application now initializes its core infrastructure upon launch, including setting up the API provider (switching to stubbed networking in staging mode) and enabling the IQKeyboardManager. It introduces a centralized Navigator to manage scene transitions across the app's various screens (such as Home, Search, Repository Details, and Settings) and displays a toast notification to inform users when their internet connection status changes. Additionally, the app applies a specific green dark theme and clears user sessions when running in the staging configuration.
SwiftHub/Application · high confidence
Replaced custom tab bar with standard UITabBarController and added iPad split-screen support
The main navigation has been refactored to use the standard iOS UITabBarController instead of the previous custom animated tab bar controller, providing a more native look and feel with support for light and dark themes via UITabBarAppearance. The new HomeTabBarController dynamically configures tabs based on authentication status (showing Login when unauthenticated) and integrates with the WhatsNewKit library to display update notifications. Additionally, an InitialSplitViewController has been introduced to enable split-view support for iPad devices.
SwiftHub/Modules/Main · high confidence
Theme-aware color extensions for UI components
The app now uses a centralized theme service to determine UI colors, allowing the interface to adapt to the user's selected theme (e.g., light or dark mode). New static methods on UIColor (primary, secondary, separator, text) retrieve colors based on the current theme configuration, and a brightness-adjusted color helper is added to support dynamic visual adjustments.
SwiftHub/Extensions/UIColor · high confidence
Test coverage
Added UI tests for core app screens; Added unit tests for User and TrendingUser models; Added unit tests for UsersViewModel; Initial test suite scaffolding for SwiftHub.
Dependencies
Initial CocoaPods dependency configuration for SwiftHub
The project now uses CocoaPods to manage its dependencies, replacing previous manual or alternative management methods. The new Podfile defines the iOS 15 platform target and integrates a comprehensive suite of libraries for networking (Moya, Apollo), reactive extensions (RxSwift ecosystem), UI components (Kingfisher, Hero, SnapKit, MessageKit), and services (Firebase Analytics, Firebase Crashlytics, Google Mobile Ads SDK, Mixpanel). It also includes development tools like SwiftLint and R.swift, along with testing frameworks (Quick, Nimble).
(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 52 → 53 (+0.5)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 89 → 89 (-0.1)
- Architecture 97 → 97 (-0.4)
- Maturity 57 → 57 (+0.0)
- Readiness 24 → 26 (+1.2)
- Security 100 → 100 (+0.0)
- Domain Modelling 100 → 100 (+0.0)
Resolved (2)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
New (5)
- Duplicated block (18 lines × 3) (SwiftHub/Networking/GraphQL/Apollo+Rx.swift)
- Duplicated block (5 lines × 2) (SwiftHub/Models/User.swift)
- Duplicated block (6 lines × 2) (SwiftHub/Modules/Issues/IssuesViewController.swift)
- Low cohesion: Reactive (LCOM4 8) (SwiftHub/Managers/ThemeManager.swift)
- Low cohesion: UIView (LCOM4 5) (SwiftHub/Common/View.swift)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
khoren93/SwiftHub 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 58d85c58f0d43e406cb78ddbca37e953e6ee0df8 — 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.