Skip to content

synaptode/PhantomSwift

Repository files navigation

PhantomSwift Logo

PHANTOM SWIFT

The Elite, Zero-Dependency iOS Debugging & Diagnostic Toolkit

Version 1.1.1 MIT License Zero Dependencies 25 Modules DEBUG only Swift Versions Supported Platforms

PhantomSwift is an open-source iOS debugging library for Swift developers. It provides network inspection, memory leak detection, UI hierarchy exploration, and 25+ diagnostic tools β€” all in a single zero-dependency package. Compatible with UIKit and SwiftUI, installable via SPM or CocoaPods, with a minimum runtime target of iOS 12 and a validated Swift 5.9+ toolchain.


Overview

PhantomSwift is a professional-grade, modular debugging ecosystem for iOS apps. It ships 25 rich modules β€” from network inspection and performance profiling to remote WebSocket debugging and macro recording β€” all wrapped in a premium glassmorphic UI. Every line of code is compiled only in DEBUG builds, so it adds zero overhead to your production binary.

Why PhantomSwift?

PhantomSwift FLEX Pulse Netfox
Zero dependencies βœ… βœ… ❌ βœ…
#if DEBUG safe βœ… ❌ ❌ ❌
Network inspection βœ… βœ… βœ… βœ…
3D view hierarchy βœ… βœ… ❌ ❌
Performance monitoring βœ… ❌ ❌ ❌
Request interception βœ… ❌ ❌ ❌
Bad network simulation βœ… ❌ ❌ ❌
Feature flags βœ… ❌ ❌ ❌
Remote WebSocket server βœ… ❌ βœ… ❌
Memory leak tracker βœ… βœ… ❌ ❌
Macro recorder βœ… ❌ ❌ ❌
Security audit βœ… ❌ ❌ ❌
Bug reporter βœ… ❌ ❌ ❌
Glassmorphic UI βœ… ❌ βœ… ❌
Module count 25 ~8 ~5 1

Looking for an Alternative?

  • FLEX alternative β€” PhantomSwift covers everything FLEX does, plus network mocking, bad network simulation, feature flags, and a glassmorphic UI.
  • Netfox replacement β€” PhantomSwift includes all Netfox's network inspection with 25 additional modules, and is also #if DEBUG safe.
  • Pulse iOS alternative β€” PhantomSwift adds zero-dependency constraint with full UIKit + SwiftUI support and no external packages required.

Key Principles

  • Zero external dependencies β€” built entirely with Apple frameworks
  • #if DEBUG safe β€” every file is wrapped; nothing ships to the App Store
  • iOS 12+ runtime support β€” with #available guards for newer APIs
  • Swift 5.x aligned β€” validated with Swift 5.9+ toolchains
  • Glassmorphic UI β€” premium dark theme with blur, shadows, and micro-animations
  • Modular architecture β€” enable or disable any module independently

Table of Contents


Screenshots

Dashboard Network Trace Performance

3D View Hierarchy Storage Inspector Console Logger

Interceptors Security Audit Memory Graph


Features

Connectivity & API

Module Description
Network Trace Real-time HTTP/HTTPS traffic monitoring with full request/response inspection, HAR export, and search/filter
Interceptor Mock, block, delay, or redirect any request. Mockoon redirect support. Hit counters and exclude patterns
Bad Network Simulate poor connectivity (3G, Edge, packet loss, latency) with one tap
Network Waterfall Chrome DevTools-style waterfall timeline showing request durations and concurrency
Request Replay Edit and replay any captured request. Save responses as mock rules
HAR Export Export network traces as HAR 1.2 JSON files for sharing with backend teams

Performance & Diagnostics

Module Description
Performance Monitor Real-time CPU, FPS, and RAM tracking with interactive timeline graphs
Hang Detector Main-thread freeze detection (>400ms) with full call stack capture
Main Thread Checker Detects UIKit calls from background threads via method swizzling
Memory Leak Tracker Automatic retain cycle detection with object lifecycle tracking
Memory Graph & Diff Visual object relationship explorer and heap snapshot comparator

UI & Design Systems

Module Description
UI Inspector Live property inspection with constraint details, measurement tool
3D View Hierarchy Xcode-style exploded 3D view with tap-to-select, depth slider, wireframe toggle, and pinch-to-zoom
SwiftUI Render Tracker Track re-render frequency per SwiftUI component
Asset Inspector Audit image/video assets for memory optimization and sizing
Accessibility Audit Scan for missing labels, small touch targets, and A11y violations
Layout Conflict Detect and display Auto Layout constraint conflicts in real-time

Storage & State

Module Description
Storage Inspector Browse and edit UserDefaults, Keychain, sandbox files, and SQLite databases
State Snapshot Save entire app state (defaults, files) and restore it instantly

Developer Toolkit

Module Description
Console Logger Priority-level logging with tags, metadata, and full-text search
Analytics Interceptor Intercept and inspect analytics events (Firebase, Amplitude, custom)
Feature Flags Register, toggle, and persist feature flags with grouped UI
Bug Reporter Annotate screenshots with freehand drawing, export diagnostic bundles
Macro Recorder Record touch sequences and replay them for QA regression testing
Remote Server WebSocket debug server for real-time remote inspection
Security Audit Jailbreak detection, SSL pinning check, and binary integrity verification
Environment Swapper Spoof GPS, change locale, monitor battery/thermal state
Runtime Browser Browse Objective-C classes, methods, and properties at runtime
Push Notification Tester Simulate and test push notifications locally
Deeplink Tester Test URL schemes and universal links without leaving the app

Installation

Swift Package Manager (Recommended)

Add PhantomSwift via Xcode:

  1. File β†’ Add Package Dependencies...
  2. Enter the repository URL:
    https://github.com/synaptode/PhantomSwift.git
    
  3. Select version rule: Up to Next Major
  4. Add to your Debug target only

Or add it to your Package.swift:

dependencies: [
    .package(url: "https://github.com/synaptode/PhantomSwift.git", from: "1.1.1")
]

CocoaPods

pod 'PhantomSwift', :configurations => ['Debug']

Important: Always add PhantomSwift to your Debug configuration only. All code is wrapped in #if DEBUG, but restricting the dependency ensures zero bytes in release builds.

Compatibility: PhantomSwift supports iOS 12.0+ at runtime. The current package manifest and CocoaPods spec are validated with Swift 5.9+ toolchains, which keeps the library within the Swift 5 generation while matching the repo's actual build settings.


Quick Start

SwiftUI

import SwiftUI
#if DEBUG
import PhantomSwift
#endif

@main
struct MyApp: App {
    init() {
        #if DEBUG
        PhantomSwift.configure { config in
            config.environment = .dev
            config.triggers = [.shake, .dynamicIsland]
            config.theme = .dark
        }
        PhantomSwift.launch()
        #endif
    }

    var body: some Scene {
        WindowGroup { ContentView() }
    }
}

UIKit

import UIKit
#if DEBUG
import PhantomSwift
#endif

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        #if DEBUG
        PhantomSwift.configure { config in
            config.environment = .dev
            config.triggers = [.shake]
            config.theme = .dark
            config.shortcuts = [
                AppShortcut(title: "Clear Cache") {
                    URLCache.shared.removeAllCachedResponses()
                }
            ]
        }
        PhantomSwift.launch()
        #endif
        return true
    }
}

Accessing the Dashboard

Trigger How
Shake Shake your device (default trigger)
Dynamic Island Tap the floating pill overlay

Both triggers can be configured via config.triggers.


Modules in Detail

πŸ“‹ Dashboard

The central hub for all PhantomSwift modules. A Niagara-style A→Z scrollable grid displays every available module with a glassmorphic card UI.

PhantomSwift Dashboard

The dashboard provides quick access to all 25 modules. Each card shows the module icon, name, and a brief description. Enabled modules are highlighted with a colored accent glow.


🌐 Network Trace

Automatically captures all HTTP/HTTPS traffic via URLProtocol swizzling. Provides a detailed view of every request and response flowing through your app.

Network List Network Overview Network Headers Network Body

Capabilities:

  • Full request/response body inspection with JSON pretty-printing
  • Status code color-coding (2xx green, 4xx orange, 5xx red)
  • Header inspection with copy-to-clipboard
  • Text search and status code filtering
  • HAR 1.2 export for sharing with backend teams
  • Request edit & replay
  • Automatic content-type detection (JSON, XML, HTML, image)

🚧 Interceptor

Create rules to intercept matching network requests. Supports multiple interception strategies to simulate various backend scenarios without modifying server code.

Interceptor Rules

Rule Types:

Type Description
Mock Return a custom JSON/text response body
Block Prevent the request from executing entirely
Redirect Forward to a different URL (e.g., Mockoon server)
Delay Add artificial latency (100ms – 30s)

Features:

  • URL pattern matching with wildcards
  • Hit counter per rule
  • Exclude patterns to bypass specific endpoints
  • Per-rule enable/disable toggle
  • Import/export rule sets

πŸ“‘ Bad Network Simulator

Simulate poor network conditions to test your app’s resilience β€” no proxy tools or extra setup required.

Bad Network Simulation

Presets:

Profile Latency Throughput Packet Loss
WiFi 2ms Unlimited 0%
4G/LTE 50ms 12 Mbps 1%
3G 200ms 1.6 Mbps 2%
Edge 400ms 240 Kbps 5%
GPRS 500ms 50 Kbps 10%
Offline ∞ 0 100%

All parameters (latency, throughput, packet loss) are individually adjustable with sliders for custom profiles.


πŸ“Š Network Waterfall

Chrome DevTools-style waterfall timeline showing request durations and concurrency β€” a visual overview of how your network requests overlap in time.

Network Waterfall

What it shows:

  • DNS lookup, connection, SSL, TTFB, and content download phases
  • Concurrent request overlap visualization
  • Color-coded bars by content type (API, image, script)
  • Total page load time calculation
  • Tap any bar to jump to the full request detail

⚑ Performance Monitor

Real-time CPU, FPS, and RAM tracking with interactive timeline graphs. Spot performance bottlenecks as they happen.

Performance Monitor

Metrics tracked:

  • CPU Usage β€” per-process CPU utilization percentage
  • FPS β€” frames per second from CADisplayLink (drops highlighted in red)
  • Memory β€” resident set size (RSS) in MB with peak tracking
  • Thermal State β€” device thermal state monitoring (nominal β†’ critical)

Interactive timeline lets you scrub through the last 60 seconds of data. Anomalies (FPS drops, CPU spikes, memory warnings) are highlighted with markers.


πŸ“ Console Logger

A priority-level logging system with tags, metadata, and full-text search. Replaces print() with structured, filterable output.

Console Logger

Usage:

#if DEBUG
PhantomLog.debug("View loaded", tag: "UI")
PhantomLog.info("User signed in", tag: "Auth")
PhantomLog.warning("Cache miss for key: \(key)", tag: "Cache")
PhantomLog.error("Failed to decode response", tag: "Network")
#endif

Features:

  • Five priority levels: verbose, debug, info, warning, error
  • Tag-based filtering (e.g., show only "Network" logs)
  • Full-text search across all log entries
  • Timestamp with millisecond precision
  • Export logs as text file
  • OSLog bridge for unified logging (iOS 14+)
  • Plug-and-play WKWebView console capture for console.log, console.warn, console.error, and JS bridge payloads

Plug-and-play for hybrid HTML/native apps:

After PhantomSwift.launch(), new WKWebView instances are instrumented automatically when the Logger module is enabled. That means browser-side logs like console.log("bridge ready") and console.error("checkout failed", payload) will appear in PhantomSwift's Console Logger without you wiring each web view manually.

If you want explicit control over handler naming or tagging, you can still install the bridge yourself:

import WebKit
#if DEBUG
import PhantomSwift
#endif

final class CheckoutWebVC: UIViewController {
    #if DEBUG
    private let phantomConsoleBridge = PhantomWebViewConsoleBridge(
        configuration: .init(handlerName: "phantomConsole", tag: "CheckoutJS")
    )
    #endif

    private lazy var webView: WKWebView = {
        let configuration = WKWebViewConfiguration()
        #if DEBUG
        phantomConsoleBridge.install(into: configuration)
        #endif
        return WKWebView(frame: .zero, configuration: configuration)
    }()
}

If you already have your own JS bridge, you can also forward messages manually from native:

#if DEBUG
PhantomWebViewConsoleBridge.capture(
    level: .error,
    message: "window.checkoutBridge rejected payload",
    tag: "CheckoutJS",
    sourceURL: webView.url?.absoluteString
)
#endif

You can disable the automatic mode if your host app needs stricter ownership over WKWebView setup:

#if DEBUG
PhantomSwift.configure { config in
    config.enableAutomaticWebViewConsoleBridge = false
}
#endif

πŸ” UI Inspector & 3D Hierarchy

Inspect any view in your app hierarchy β€” tap to select, view properties, constraints, and spatial relationships. The 3D exploded view provides an Xcode-style visualization of the entire view tree.

View Tree Selected View View Detail

UI Inspector features:

  • Tap-to-select any view in the hierarchy
  • Property inspection: frame, bounds, alpha, backgroundColor, accessibilityLabel
  • Constraint list with priority, constant, multiplier
  • Live editing of properties (frame, alpha, backgroundColor)
  • Measurement tool β€” measure distance between any two views

3D Hierarchy Measurement Tool Live Edit

3D Hierarchy features:

  • Exploded 3D view with adjustable spacing
  • Depth filter slider to focus on specific layers
  • Rotate X/Y sliders for precise camera control
  • Wireframe mode to see layout structure
  • Class name labels overlay
  • Tap any layer to open the inspector sheet
  • Pinch to zoom, 1-finger pan, 2-finger orbit
  • Fit All & Reset camera controls
  • Mini-map overlay for orientation

🧠 Memory Leak Tracker & Graph

Automatic retain cycle detection with object lifecycle tracking. The memory graph visualizes object relationships to help identify where leaks occur.

Memory Leak Tracker Memory Graph

Leak Tracker:

  • Tracks UIViewController and UIView lifecycle via swizzling
  • Detects objects that are not deallocated after dismissal (potential leaks)
  • Shows class name, allocation time, and retain count
  • Configurable detection delay (default: 3s after dismissal)

Memory Graph:

  • Visual directed graph of object references
  • Interactive nodes β€” tap to inspect properties
  • Snapshot comparison (diff between two heap states)
  • Highlights potential retain cycles with red edges

πŸ’Ύ Storage Inspector

Browse and edit all local storage mechanisms from a single interface.

Storage Inspector

Supported storage types:

Storage Capabilities
UserDefaults Browse, edit, delete keys. Type-aware editing (String, Int, Bool, Date, Array, Dictionary)
Keychain Read and delete keychain items. Filtered by app’s access group
Sandbox Files Navigate the app’s Documents, Library, and tmp directories. View file contents, sizes, dates
SQLite Browse tables, execute raw SQL queries, view schema

All edits are reflected immediately β€” no app restart needed.


πŸ“ˆ Analytics Interceptor

Intercept and inspect analytics events from any provider without modifying your analytics code.

Analytics Feed Analytics by Provider

Supported providers:

  • Firebase Analytics
  • Amplitude
  • Mixpanel
  • Custom event buses

Features:

  • Real-time event feed with timestamp, name, and parameters
  • Group-by-provider view to see event distribution
  • Search and filter by event name or parameter value
  • Event validation β€” warns about missing required parameters

🚩 Feature Flags

Runtime feature flag management with a beautiful grouped UI. Toggle features on-the-fly without recompilation.

#if DEBUG
// Register flags at launch
PhantomFeatureFlags.shared.register(key: "new_onboarding", title: "New Onboarding Flow",
                                     defaultValue: false, group: "UX")
PhantomFeatureFlags.shared.register(key: "dark_mode_v2", title: "Dark Mode V2",
                                     defaultValue: true, group: "Theme")

// Check flags anywhere
if PhantomFeatureFlags.shared.isEnabled("new_onboarding") {
    showNewOnboarding()
}
#endif

Features:

  • Register flags with key, title, description, default value, and group
  • Toggle overrides from the dashboard with immediate effect
  • Overrides persist across app launches via UserDefaults
  • Reset individual flags or all at once
  • Override badge count shown on the dashboard card

πŸ”’ Security Audit

Comprehensive security analysis of your app’s runtime environment.

Security Audit Overview Security Audit Details

Checks performed:

Check Description
Jailbreak Detection Checks for Cydia, unusual paths, writable system dirs
SSL Pinning Validates certificate pinning implementation
Debugger Detection Detects if a debugger is attached
Binary Integrity Checks code signature and encryption status
Keychain Security Validates keychain access control settings
App Transport Security Checks ATS exceptions in Info.plist

Results are color-coded: 🟒 Pass, 🟑 Warning, πŸ”΄ Fail β€” with remediation suggestions.


πŸ–Ό Asset Inspector

Audit image and video assets for memory optimization, sizing, and potential issues.

Asset Inspector

Analysis includes:

  • Image dimensions vs. display size (flags oversized images)
  • Memory footprint calculation per asset
  • Format identification (PNG, JPEG, HEIF, WebP, PDF)
  • Missing @2x/@3x variants detection
  • Total asset catalog size summary

🌍 Environment Swapper

Override device environment settings for testing β€” no need to physically move or change device settings.

Environment Overview GPS Spoofing Locale Override

Capabilities:

  • GPS Spoofing β€” Set custom coordinates for location-dependent features
  • Locale Override β€” Change app locale without changing device settings
  • Battery Monitoring β€” Real-time battery level and charging state
  • Thermal State β€” Monitor device temperature state
  • Time Zone Override β€” Test time-sensitive features across zones

πŸ”¬ Runtime Browser

Browse Objective-C classes, methods, and properties at runtime β€” a powerful introspection tool for understanding third-party SDKs.

Runtime Browser

Features:

  • Browse all loaded Objective-C classes
  • Inspect instance methods, class methods, and properties
  • View method signatures and return types
  • Search by class name or method name
  • Filter by framework/module

⚠️ Layout Conflict Detector

Detects Auto Layout constraint conflicts in real-time and displays them in a clear, actionable format.

Layout Conflict

Features:

  • Captures UIViewAlertForUnsatisfiableConstraints breakpoint output
  • Parses conflicting constraint sets into readable format
  • Shows which views and constraints are involved
  • Suggests which constraint to remove or lower priority

πŸ”” Push Notification Tester

Simulate and test push notifications locally without a backend or APNs configuration.

Push Notification Tester

Features:

  • Create custom notification payloads (title, body, badge, sound)
  • Schedule local notifications with configurable delay
  • Test deep link routing from notification taps
  • Preview notification appearance before sending

πŸ”— Deeplink Tester

Test URL schemes and universal links without leaving the app.

Deeplink Tester

Features:

  • Input any URL scheme or universal link
  • Execute deep links within the app context
  • History of recently tested links
  • Quick-access bookmarks for frequently tested routes

πŸ–₯ Remote WebSocket Server

Start a WebSocket server on the device. Connect from any WebSocket client (browser, Postman, custom tool) and query your app’s state in real time.

#if DEBUG
if #available(iOS 13.0, *) {
    PhantomRemoteServer.shared.start(port: 9876)
}
// Connect from browser: ws://<device-ip>:9876
// Send JSON: {"command": "logs"} or {"command": "network-trace"}
#endif

Available Commands:

Command Description
app-info App bundle info, device model, iOS version
system-status CPU, memory, disk usage
logs Last 50 log entries
network-trace Last 50 network requests
feature-flags All registered feature flags
toggle-flag Toggle a feature flag (params: key)
performance Current metrics + 30-sample history
clear-logs Clear the log store
clear-network Clear captured network requests
help List available commands

A built-in web echo page is included at Resources/web-echo/index.html for quick browser-based testing.


Architecture

Sources/PhantomSwift/
β”œβ”€β”€ Core/                           # Framework core
β”‚   β”œβ”€β”€ PhantomSwift.swift          # Main entry point & setup
β”‚   β”œβ”€β”€ PhantomFeature.swift        # Feature enum (25 cases)
β”‚   β”œβ”€β”€ PhantomEventBus.swift       # Thread-safe event system
β”‚   β”œβ”€β”€ PhantomConfig.swift         # Configuration struct
β”‚   β”œβ”€β”€ PhantomEnvironment.swift    # Environment enum
β”‚   └── PhantomPlugin.swift         # Plugin protocol
β”œβ”€β”€ HUD/                            # Dashboard & presentation
β”‚   β”œβ”€β”€ PhantomDashboardVC.swift    # Niagara-style Aβ†’Z dashboard
β”‚   β”œβ”€β”€ PhantomTheme.swift          # Glassmorphic design tokens
β”‚   β”œβ”€β”€ PhantomHUDWindow.swift      # Overlay window management
β”‚   β”œβ”€β”€ PhantomGestureHandler.swift # Shake/Dynamic Island trigger
β”‚   └── PhantomDynamicIsland.swift  # Dynamic Island floating pill
β”œβ”€β”€ Modules/                        # Feature modules
β”‚   β”œβ”€β”€ Network/                    # Network trace, waterfall, HAR, replay
β”‚   β”œβ”€β”€ Interceptor/                # Request mocking & redirection
β”‚   β”œβ”€β”€ Logger/                     # Console logger with levels & tags
β”‚   β”œβ”€β”€ Performance/                # CPU/FPS/RAM monitor & timeline
β”‚   β”œβ”€β”€ MemoryLeak/                 # Leak tracker & object graph
β”‚   β”œβ”€β”€ UIInspector/                # UI inspection & 3D hierarchy
β”‚   β”œβ”€β”€ Storage/                    # UserDefaults, Keychain, SQLite, Sandbox
β”‚   β”œβ”€β”€ QA/                         # Bug reporter, macro recorder, shortcuts
β”‚   β”œβ”€β”€ Security/                   # Security audit & checks
β”‚   β”œβ”€β”€ Analytics/                  # Analytics event interceptor
β”‚   β”œβ”€β”€ SwiftUI/                    # Render body tracker
β”‚   β”œβ”€β”€ FeatureFlags/               # Feature flag management
β”‚   β”œβ”€β”€ MainThreadChecker/          # Background thread violation detection
β”‚   β”œβ”€β”€ RuntimeBrowser/             # ObjC runtime introspection
β”‚   β”œβ”€β”€ Assets/                     # Asset inspector & optimization
β”‚   β”œβ”€β”€ Remote/                     # WebSocket debug server
β”‚   └── Core/                       # Extension bus & shared module utils
└── Shared/                         # Shared utilities
    β”œβ”€β”€ Components/                 # Reusable UI (PhantomTableVC, badges, code view)
    β”œβ”€β”€ Extensions/                 # UIColor+Phantom, UIFont+Phantom, etc.
    └── Helpers/                    # Swizzler, formatters, utilities

Design Patterns

Pattern Usage
Singletons Module managers (PhantomLog.shared, PhantomFeatureFlags.shared)
Event Bus PhantomEventBus for decoupled module communication
Thread Safety DispatchQueue(attributes: .concurrent) with .barrier writes
Base VC PhantomTableVC for consistent list UIs across modules
Theme System PhantomTheme for centralized styling β€” never hardcode colors
Swizzler PhantomSwizzler for safe method swizzling

Configuration

PhantomSwift.configure { config in
    // Environment (default: .dev)
    config.environment = .dev       // .dev | .staging | .release

    // Dashboard triggers
    config.triggers = [.shake, .dynamicIsland]

    // Theme
    config.theme = .dark            // .dark | .light | .auto

    // Custom QA shortcuts
    config.shortcuts = [
        AppShortcut(title: "Reset Onboarding") {
            UserDefaults.standard.removeObject(forKey: "hasSeenOnboarding")
        },
        AppShortcut(title: "Force Crash") {
            fatalError("Debug crash triggered")
        }
    ]
}

Configuration Options

Option Type Default Description
environment PhantomEnvironment .dev Current build environment
triggers [PhantomTrigger] [.shake] How to open the dashboard
theme PhantomThemeMode .dark UI theme mode
shortcuts [AppShortcut] [] Custom QA actions in dashboard

Requirements

Requirement Minimum
iOS 12.0+
Swift 5.9+
Xcode 15.0+
Dependencies None

iOS Compatibility Notes:

  • iOS 12–12.x: Core functionality works. SF Symbols replaced with text/Menlo fallbacks.
  • iOS 13+: Full SF Symbols, UINavigationBarAppearance, monospaced digit fonts.
  • iOS 13+: Remote WebSocket Server requires Network.framework (NWListener).
  • iOS 14+: OSLog bridge for unified logging.

Swift Compatibility Notes:

  • Swift 5.x: PhantomSwift is maintained in the Swift 5 family.
  • Swift 5.9+: Current package manifest, CocoaPods spec, CI verification, and documentation are validated against Swift 5.9+ toolchains.

Contributing

Contributions are welcome! Please follow these guidelines:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/my-feature
  3. Commit with clear messages: git commit -m "Add: macro recorder export as JSON"
  4. Push to your fork: git push origin feature/my-feature
  5. Open a Pull Request

Code Standards

  • Wrap ALL code in #if DEBUG / #endif
  • Use PhantomTheme.shared for colors/fonts β€” never hardcode
  • Use [weak self] in closures that may outlive the caller
  • No force unwraps (!) β€” use guard/if let
  • Use PhantomSwizzler for method swizzling
  • Prefix public types with Phantom
  • Build UI programmatically β€” no storyboards or XIBs
  • Use NSLayoutConstraint.activate([...]) for Auto Layout
  • Wrap iOS 13+ APIs in if #available(iOS 13.0, *)

License

PhantomSwift is released under the MIT License. See LICENSE for details.


Built with precision for iOS engineers who demand the best debugging tools.

About

iOS debug toolkit: network inspector, memory leak tracker, UI hierarchy, 25 modules. Zero deps. SPM + CocoaPods. #if DEBUG safe.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages