pmusolino/Wormholy
58.7
Adequate · 30 September 2026
2.5k
lines of production code
Swift
primary language
2
measurements over time
What this system is
Wormholy is an iOS network debugging library that intercepts and records HTTP requests for inspection. It provides a SwiftUI-based interface for viewing, filtering, and searching network traffic, along with detailed performance metrics and status code statistics. The system supports exporting captured requests in various formats and integrates with modern build tools like Swift Package Manager.
How it got here
2018 — Swift 5.7 migration and demo app
7 changes.
The project migrated to Swift 5.7 and iOS 16, reorganizing the package structure into Swift and Objective-C subspecs while dropping support for tvOS and watchOS. A new WormholyDemo application was introduced to replace the previous framework target, providing a concrete example of library usage with networking utilities and UI components.
2022 — SPM integration and network metrics
6 changes.
The project refactored the Objective-C SDK to support Swift Package Manager integration while enhancing network request capture with detailed performance metrics and cache policy handling. Significant updates included migrating UI components to SwiftUI, adding shake-to-activate functionality, and introducing utilities for exporting and sharing request data.
2024–2025 — UI overhaul and view controller accuracy
4 changes.
This period focused on modernizing the WormholySwift user interface with a new SwiftUI-based request list featuring search and status code filtering, alongside a dedicated stats view. Significant backend improvements were made to accurately detect the current view controller across complex UI hierarchies, ensuring correct attribution of network requests. These changes were supported by expanded test coverage for redirect handling and view controller logic.
Features
Add shake-to-activate and UI helper utilities
Users can now trigger the Wormholy network inspector by shaking their device, provided the shake feature is enabled in the configuration. This is implemented via a new \ShakeDetectionViewController\ that listens for motion events. Additionally, the library introduces several Swift extensions and helper classes in this location to support the UI: \CustomActivity\ for sharing functionality, \WHTextView\ for text highlighting and range conversion, \WHDate\ for formatted time durations, \WHString\ for string prefixing, and \WHBundle\ to correctly resolve the resource bundle in both SPM and CocoaPods environments.
Sources/WormholySwift/Subclasses · high confidence
Added Networking demo components
The WormholyDemo/Networking area now includes the core networking implementation for the demo app, featuring a DataFetcher singleton that manages URLSession configuration and executes API calls (get, post, photos, and error scenarios) against the jsonplaceholder.typicode.com base URL. This change introduces Routing.swift to define URL paths and parameters, HTTPValidation.swift to enforce 200-299 status codes, and Config.swift to store the base API URL and app domain.
WormholyDemo/Networking · high confidence
Added demo app launch screen and main interface
The WormholyDemo project now includes a LaunchScreen storyboard and a Main storyboard. The main interface provides a user with four buttons to trigger demo actions: fetching posts, creating a new random post, testing a wrong URL, and fetching photos.
WormholyDemo/Base.lproj · high confidence
Introduction of WormholyDemo sample application
A new demo application has been added to showcase the Wormholy library. The project includes an AppDelegate that configures the library to store a maximum of 100 API requests, a ViewController that automatically generates network traffic by periodically fetching random posts and photos, and utility helpers for generating random data. The demo app is configured as a standard iOS application bundle with support for multiple interface orientations.
WormholyDemo · high confidence
New Stats view and status code filtering in the requests list
Users can now view detailed request statistics, including success/failure rates, average response times, data usage, and HTTP method breakdowns, by selecting the new 'Stats' option from the 'More' menu in the Requests list. Additionally, the Requests list now supports filtering by HTTP status code range via a new \StatusCodeFilterView\, allowing users to quickly isolate specific response categories.
Sources/WormholySwift/UI · high confidence
New request export and sharing utilities
The library introduces a new set of utility classes in the Utils module to handle exporting and sharing collected HTTP requests. \RequestModelBeautifier\ now formats request data into human-readable text, cURL commands, and Postman collection (v2.1) formats. \ShareUtils\ leverages these formatters to provide a share sheet that allows users to export requests as flat text, shell scripts, or Postman JSON, including a custom activity to save files directly to the desktop.
Sources/WormholySwift/Utils · high confidence
Behavioural changes
Improved logic for detecting the current view controller
The library now uses a new extension to more accurately identify the active view controller in complex UI hierarchies. This logic specifically handles nested navigation controllers, tab bar controllers (including the 'more' navigation controller for large tab sets), modally presented view controllers, and SwiftUI hosting controllers, ensuring that network requests are correctly attributed to the visible screen.
Sources/WormholySwift/Extensions · high confidence
Migrate UI colors to SwiftUI and restructure configuration files
The library's color handling has been updated to use SwiftUI's \Color\ type instead of UIKit's \UIColor\, introducing a new \Colors.swift\ file that defines specific hex colors for HTTP status code categories (2xx, 3xx, 4xx, 5xx) and provides a helper function to retrieve the appropriate color. Additionally, the main \Wormholy.swift\ file has been renamed to \Config.swift\ and reorganized to focus on configuration constants, such as the \fireWormholy\ notification name, while removing other legacy code.
Sources/WormholySwift/Support Files · high confidence
Network request capture now includes detailed metrics and respects cache policies
Wormholy now captures comprehensive network performance metrics (such as duration, byte counts, and timing intervals) for each request, which are displayed in the request detail view. Additionally, the library now correctly honors URLRequest cache policies, skipping requests that rely solely on cached data (ReturnCacheDataElseLoad or ReturnCacheDataDontLoad) to avoid redundant recording. The internal storage and request handling have been refactored for main-actor compliance to ensure thread safety during UI updates.
Sources/WormholySwift · high confidence
New request list UI with status code filtering and search
The request list interface has been updated to a new SwiftUI-based design that includes a search bar for filtering requests by text and a status code filter view allowing users to toggle visibility of specific HTTP status ranges (1xx through 5xx). The request cells now display the HTTP method, status code with color-coded styling, and request duration, while the underlying text handling supports dynamic dark mode colors and search result highlighting.
Sources/WormholySwift/UI/Subviews · high confidence
Reconfigured project to use WormholyDemo app
The project structure has been reconfigured to use the WormholyDemo app as the primary target, replacing the previous Wormholy-iOS framework target. This change updates the build configuration to include the demo app's source files (such as AppDelegate, ViewController, and networking utilities) and adjusts the test target to run against the demo application.
Wormholy.xcodeproj · medium confidence
Refactored Objective-C SDK to support Swift Package Manager integration
The WormholyObjC source files have been updated to conditionally import the Swift runtime depending on the build system. When built via Swift Package Manager (indicated by the SWIFT\_PACKAGE macro), the code now references the WormholySwift module directly; otherwise, it falls back to the traditional Wormholy-Swift.h umbrella header. This change ensures the Objective-C components (such as NSURLSessionConfiguration swizzling and the library constructor) correctly locate the Wormholy class regardless of whether the SDK is integrated via SPM or legacy methods.
Sources/WormholyObjC · high confidence
Removal of Wormholy.plist configuration file
The Wormholy.plist file, which previously contained bundle configuration settings such as development region, executable name, and copyright information, has been removed from the project. This change eliminates the manual plist-based configuration in favor of the project's new build system or package management approach.
Configs · high confidence
Request model now tracks detailed network metrics and supports reactive UI updates
The RequestModel has been converted from a struct to a class conforming to ObservableObject, enabling real-time UI updates in SwiftUI views via @Published properties. It now captures granular network metrics, including request/response start and end dates, and byte counts for headers and bodies before and after encoding/decoding. Additionally, the model includes a new 'startDate' field and a 'copy' method to safely update these properties from background threads.
Sources/WormholySwift/Models · high confidence
Updated Xcode project schemes for Carthage compatibility and demo app integration
The project's Xcode schemes have been reconfigured to support Carthage builds by disabling the tvOS and watchOS schemes, which are no longer included in the distribution. Additionally, the macOS scheme has been renamed to the demo app scheme, updating the build targets to launch the WormholyDemo application and its associated tests instead of the framework, while the iOS scheme has been updated to the latest Xcode version format.
Wormholy.xcodeproj/xcshareddata · high confidence
Test coverage
Added tests for redirect handling and view controller logic
Added test coverage for redirect behavior in \RedirectTest.swift\, which validates standard URLSession redirect following and custom delegate blocking. Also added \UIViewControllerExtensionTests.swift\ to verify the \currentViewController\ extension logic across presented view controllers, navigation controllers, tab bars, and child view controllers, as well as a test for the \clearRequests\ completion-based API.
Tests · high confidence
Dependencies
Wormholy 2.4.0: iOS 16+ requirement and Swift 5.7 SPM structure
Wormholy has been updated to version 2.4.0, raising the minimum iOS deployment target to 16.0 and requiring Swift 5.7. The package structure has been reorganized into two subspecs, \WormholySwift\ and \WormholyObjC\, with the Objective-C component depending on the Swift component. This change also updates the GitHub repository URL and adds explicit support for SwiftUI and UIKit frameworks.
(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 63 → 59 (-4.1)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 98 → 97 (-1.0)
- Architecture 73 → 92 (+18.4)
- Maturity 57 → 58 (+0.4)
- Readiness 51 → 39 (-12.4)
- Security 100 → 100 (+0.0)
Resolved (2)
- Documentation: no contributor guidance (README.md)
- Off-boarding risk: anonymized user #1
New (10)
- Ambiguous initialization lifecycle. Two methods with similar prefixes ('swifty') suggest setup or bootstrapping, but it is unclear if they are mutually exclusive, sequential, or redundant. 'Load' often implies static initialization or class loading, while 'Initialize' implies runtime setup. Without clear documentation, a developer might call both, neither, or the wrong one.
- Coverage not measured — Swift suite
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Duplicated block (17–18 lines × 2) (Sources/WormholySwift/UI/RequestsView.swift)
- Duplicated block (24 lines × 3) (Sources/WormholySwift/UI/RequestDetailView.swift)
- Edited copy of a member (29 corresponding lines) (Sources/WormholySwift/UI/RequestDetailView.swift)
- Off the main sequence: WormholySwift
- Off-boarding risk: anonymized user #1
- StatsView.body (cognitive 30) (Sources/WormholySwift/UI/StatsView.swift)
- StatsView.body (cyclomatic 16) (Sources/WormholySwift/UI/StatsView.swift)
Changes since last survey
- 2 commits — 2 feature/other, 0 fixes
By area
- (repo) — 1 commit
- Sources/WormholySwift — 1 commit
Notable commits
- change: Apply linter formatting to Wormholy.swift
- change: Merge pull request #173 from sher-khan/feature/clear-requests
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
pmusolino/Wormholy 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 4f3a7a40d858726ddf2220b59364000bd481783a — 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.