A toolkit to make debugging iOS applications easier π
DebugSwift is a comprehensive toolkit designed to simplify and enhance the debugging process for Swift-based applications |
---|
Add to your Package.swift
:
dependencies: [
.package(url: "https://github.com/DebugSwift/DebugSwift.git", from: "2.0.0")
]
import DebugSwift
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
private let debugSwift = DebugSwift()
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
#if DEBUG
debugSwift.setup()
// debugSwift.setup(disable: [.leaksDetector])
debugSwift.show()
#endif
return true
}
}
extension UIWindow {
open override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
super.motionEnded(motion, with: event)
#if DEBUG
if motion == .motionShake {
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.debugSwift.toggle()
}
}
#endif
}
}
Harness the Power of Visual Information within the iOS Hierarchy Tree to Uncover Intricate Layouts and Element Relationships in Your Application.
Simply press and hold the circle button to reveal the Snapshot and Hierarchy for a comprehensive overview.
Enhance your understanding by pressing and holding on a specific view to reveal information such as:
DebugSwift.App.shared.customControllers = {
let controller1 = UITableViewController()
controller1.title = "Custom TableVC 1"
let controller2 = UITableViewController()
controller2.title = "Custom TableVC 2"
return [controller1, controller2]
}
// Add custom debugging actions
DebugSwift.App.shared.customAction = {
[
.init(title: "Development Tools", actions: [
.init(title: "Clear User Data") {
UserDefaults.standard.removeObject(forKey: "userData")
},
.init(title: "Reset App State") {
// Your reset logic here
}
])
]
}
DebugSwift.App.shared.customInfo = {
[
.init(
title: "Info 1",
infos: [
.init(title: "title 1", subtitle: "title 2")
]
)
]
}
// In your AppDelegate
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
DebugSwift.APNSToken.didRegister(deviceToken: deviceToken)
// Your existing token handling code
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
DebugSwift.APNSToken.didFailToRegister(error: error)
// Your existing error handling code
}
// Ignore specific URLs
DebugSwift.Network.shared.ignoredURLs = ["https://analytics.com"]
// Monitor only specific URLs
DebugSwift.Network.shared.onlyURLs = ["https://api.myapp.com"]
debugSwift.setup(
hideFeatures: [.performance, .interface], // Hide specific tabs
disable: [.leaksDetector, .console] // Disable specific monitoring
)
// Enable beta features (disabled by default)
debugSwift.setup(
enableBetaFeatures: [.swiftUIRenderTracking] // Enable experimental SwiftUI render tracking
)
// Configure app groups for file browser access
DebugSwift.Resources.shared.configureAppGroups([
"group.com.yourcompany.yourapp"
])
// Configure memory leak detection
DebugSwift.Performance.shared.onLeakDetected { leakData in
print("π΄ Memory leak detected: \(leakData.message)")
}
// Enable push notification simulation
DebugSwift.PushNotification.enableSimulation()
// Simulate a notification
DebugSwift.PushNotification.simulate(
title: "Test Notification",
body: "This is a test notification"
)
β οΈ Beta Feature: SwiftUI render tracking is experimental and must be enabled explicitly.
// First enable the beta feature in setup
debugSwift.setup(enableBetaFeatures: [.swiftUIRenderTracking])
// Then enable SwiftUI render tracking
DebugSwift.SwiftUIRender.shared.isEnabled = true
// Configure persistent overlays (stay visible until manually cleared)
DebugSwift.SwiftUIRender.shared.persistentOverlays = true
// Set overlay style (border, borderWithCount, none)
DebugSwift.SwiftUIRender.shared.overlayStyle = .borderWithCount
// Configure overlay duration
DebugSwift.SwiftUIRender.shared.overlayDuration = 1.0
// Enable console logging
DebugSwift.SwiftUIRender.shared.loggingEnabled = true
// Clear render statistics
DebugSwift.SwiftUIRender.shared.clearStats()
// Clear persistent overlays
DebugSwift.SwiftUIRender.shared.clearPersistentOverlays()
If you find DebugSwift helpful, please consider giving us a star on GitHub! Your support helps us continue improving and adding new features.
Our contributors have made this project possible. Thank you!
Contributions are welcome! If you have suggestions, improvements, or bug fixes, please submit a pull request. Letβs make DebugSwift even more powerful together!
DebugSwift is licensed under the MIT License - see the LICENSE file for details.