Set of easy to use debugging tools for iOS developers & QA engineers.

Overview

DBDebugToolkit

CI Status Version Carthage compatible License Platform

DBDebugToolkit is a debugging library written in Objective-C. It is meant to provide as many easily accessible tools as possible while keeping the integration process seamless.

Features

  • Performance
    • CPU usage (current, max, chart)
    • Memory usage (current, max, chart)
    • FPS (current, min, chart)
    • Widget displaying current CPU usage, memory usage and FPS that stays on top of the screen
    • Simulating memory warning
  • User interface
    • Showing all view frames
    • Slowing down animations
    • Showing touches on screen (useful for recording and screen sharing)
    • Displaying customizable grid overlay on top of the screen
    • Autolayout trace
    • Current view description
    • View controllers hierarchy
    • List of available fonts with preview
    • Showing UIDebuggingInformationOverlay
  • Network
    • List of all the requests sent by the application
    • Request and response preview
  • Resources
    • File system: browsing and removing selected files
    • User defaults: browsing, removing selected item and clearing all the data
    • Keychain: browsing, removing selected item and clearing all the data
    • Core Data: browsing all the managed objects and their relationships with sorting and filtering options
    • Cookies: browsing, removing selected cookie and clearing all the data
  • Console
    • Displaying console output in text view
    • Sending console output by email with device and system information
  • Simulating location
  • Crash reports
    • List of all the crashes
    • Crash reports containing details, stack trace, console output and a screenshot
    • Sending crash reports by email
  • Modifying custom variable values from the menu
  • Adding custom actions to the menu
  • Opening application settings
  • Application shortcut item for clearing data
  • Showing version & build number
  • Showing device model & iOS version

Example

To run the example project, clone the repo, and run pod install from the Example directory first. The example project is written in Objective-C. The code examples in this README are written in Swift 3.0.

Requirements

DBDebugToolkit requires iOS 8.0 or later.

Usage

Setup

DBDebugToolkit was meant to provide as many useful debugging tools as possible. However, the second equally important goal was to keep the setup seamless for all the iOS projects. A good place for setting up DBDebugToolkit is in the AppDelegate, as it allows it to start as quickly as possible. The simplest setup consists of only one line:

import DBDebugToolkit

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    DBDebugToolkit.setup()
    return true
}

After such setup, simply shake the device to present the menu with all the debugging options:

Read more about triggers to find out how to customize menu presentation.

Triggers

Triggers are the objects that tell DBDebugToolkit to present the menu. There are 3 predefined triggers:

  • DBShakeTrigger - reacts to shaking the device.
  • DBTapTrigger - reacts to tapping the screen.
  • DBLongPressTrigger - reacts to long pressing the screen.

By default, DBDebugToolkit is set up with DBShakeTrigger. You can also provide your own array of triggers:

import DBDebugToolkit

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let tapTrigger = DBTapTrigger(numberOfTouchesRequired: 3)
    let longPressTrigger = DBLongPressTrigger(minimumPressDuration: 1.0)
    let shakeTrigger = DBShakeTrigger()
    DBDebugToolkit.setup(with: [tapTrigger, longPressTrigger, shakeTrigger])
    return true
}

These are just examples. Both DBTapTrigger and DBLongPressTrigger have more customization options.

You can also create your own trigger. To do this, create a class that conforms to protocol DBDebugToolkitTrigger. Then create an instance of this class and pass it to the setup method.

Features

The complete list of features with examples can now be found here: Features.

Installation

CocoaPods

DBDebugToolkit is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "DBDebugToolkit"

However, to provide some of its features, DBDebugToolkit does use private API. The code that uses it is obfuscated to minimize the risk of rejecting your application on the App Store, but it can not be guaranteed that it is enough. That being said, here are some safer ways to install DBDebugToolkit:

  • Adding it only to debug builds

    It is now possible to specify the build configuration for a given pod:

    pod "DBDebugToolkit", :configurations => ['Debug']

    After such setup, all your code using DBDebugToolkit needs to be placed in preprocessor macros:

    #if DEBUG
        import DBDebugToolkit
    #endif
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        #if DEBUG
            DBDebugToolkit.setup()
        #endif
        return true
    }

    The one major drawback of such setup is the fact that it won't include DBDebugToolkit in the builds that you send to the testers.

  • Creating a separate target for App Store releases

    After creating a separate target for App Store releases, your podfile could be defined this way:

    def common_pods
      # Here are all the pods that will be used in both targets.
    end
    
    target 'YourApplication' do
        common_pods
    end
    
    target 'YourApplicationAppStore' do
        common_pods
        pod "DBDebugToolkit"
    end

    Then you will have to differentiate between the targets in code. To do this, you could add a custom flag to your App Store target build configuration. Assuming that you named the flag APPSTORE, all the code using DBDebugToolkit will be placed in preprocessor macros:

    #if !(APPSTORE)
        import DBDebugToolkit
    #endif
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        #if !(APPSTORE)
            DBDebugToolkit.setup()
        #endif
        return true
    }

The setup with a separate target for App Store releases will help you prevent sending the build containing the private API calls included in DBDebugToolkit to the App Store review. However, you would have to remember about adding all the files to both targets during development. You will have to decide which way is the best for your project. Perhaps it will be easier to manually remove DBDebugToolkit from the podfile before each App Store release.

Carthage

To integrate DBDebugToolkit into your Xcode project using Carthage, specify it in your Cartfile:

github "dbukowski/DBDebugToolkit" ~> 0.6.0

Run carthage update to build the framework and drag the built DBDebugToolkit.framework into your Xcode project.

Author

Maintained by Marian Sobczyk, [email protected]

Created by Dariusz Bukowski, [email protected]

License

DBDebugToolkit is available under the MIT license. See the LICENSE file for more info.

Comments
  • Error: Undefined symbols for architecture x86_64

    Error: Undefined symbols for architecture x86_64

    I got the following error detail when I tried the library in a Objective C project with deployment target 8.0.

    Undefined symbols for architecture x86_64: "OBJC_CLASS$_DBDebugToolkit", referenced from: objc-class-ref in AppDelegate.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

    How to overcome this issue ?

    opened by bharath-dev 6
  • NSURLSession redirection handling broken

    NSURLSession redirection handling broken

    We use AFNetworking and have code like the following

    let httpSessionManager = AFHTTPSessionManager(baseURL: baseURL)
    httpSessionManager.setTaskWillPerformHTTPRedirectionBlock { urlSession, task, response, request in
      return someCheck
        ? request
        : nil // Stop following redirect
    }
    

    After we integrated DBDebugToolkit we noticed that this block was not getting called anymore. Disabling networking logging via DBDebugToolkit.setNetworkRequestsLoggingEnabled(false) fixes the issue.

    I looked at AFNetworking's related code (part 1, part 2) and it does not seem to do anything special which leads me to believe that this is a general issue.

    Please let me know if additional information is needed to reproduce this behavior.

    bug help wanted 
    opened by TheDom 4
  • DBDebugToolkit not compatible with ATS and self-signed certificate

    DBDebugToolkit not compatible with ATS and self-signed certificate

    Hi,

    For first, very good job, I'm trying to use your library and it appears that it's not compatible with URLSessionDelegate, in my app i'm using https with a self-signed certificate and I use URLSessionDelegate for debug and when i'm setup your library, delegate are not fired and make me errors.

    Steps for reproducing: AppDelegate.swift

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            // Override point for customization after application launch.
            
            #if DEBUG
                DBDebugToolkit.setup() // <-- if I comment network works good
            #endif
    
            ...
    
    
    

    SSLDebugSessionDelegate.swift

    class SSLDebugSessionDelegate: NSObject, URLSessionDelegate {
        
        /// The host to allow a self-signed SSL certificate for.
        let host: String
        
        
        /** Designated initializer.
         
         - parameter host: The host to which the exception should apply
         */
        public init(host: String) {
            self.host = host
        }
        
        open func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge,
                             completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
            Log.debug("----DEBUG SESSION DELEGATE----")
            if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
                if challenge.protectionSpace.host == host, let trust = challenge.protectionSpace.serverTrust {
                    let credential = URLCredential(trust: trust)
                    completionHandler(.useCredential, credential)
                    return
                }
            }
            completionHandler(.performDefaultHandling, nil)
        }
    
    }
    
    
    
    
    let sessionDelegate = SSLDebugSessionDelegate(host:"xxxxxxx")
    URLSession(configuration: config, delegate: sessionDelegate, delegateQueue: nil)
    
    
    

    And use a self-signed certificate.

    opened by aliasdoc 4
  • DBDebugToolkit crashing due to nil object being inserted in Array

    DBDebugToolkit crashing due to nil object being inserted in Array

    Crash message *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

    Stack trace Screenshot 2022-02-09 at 4 03 50 PM

    opened by shoaibsadanaut 3
  • App crash if call NSURLSessionConfiguration before DBDebgToolkit.setup()

    App crash if call NSURLSessionConfiguration before DBDebgToolkit.setup()

    version 0.7.0 crash if any network request triggered before DBDebugToolkit.setup():

    file name: NSURLSessionConfiguration+DBURLProtocol.m [originalProtocols insertObject:DBNetworkURLProtocolClass atIndex:0]; *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

    The cause is from the update for issue #50.

    In this update, NSURLSessionConfiguration+DBURLProtocol.m: [originalProtocols insertObject:DBNetworkURLProtocolClass atIndex:0]

    1. NSURLSessionConfiguration's swizzing happens in +(void)load, which is when app starts, even before appDelegate.didFinishLaunchingWithOptions.
    2. DBNetworkURLProtocolClass is initialised in + (void)initialize, which will be triggered by DBDebgToolkit.setup().

    So, without executing DBDebgToolkit.setup(), DBNetworkURLProtocolClass will not be initialed, and it will be crashed.

    We can use load to initialise DBNetworkURLProtocolClass, or ask user to run DBDebgToolkit.setup() before any network calls that involved NSURLSessionConfiguration.

    bug 
    opened by qkzhu 3
  • Remove unused (and deprecated) search controller

    Remove unused (and deprecated) search controller

    Rewire delegate to UISearchBar instance. UISearchController is deprecated and is raising warning when compiling our code. It also breaks Catalyst builds.

    opened by jcavar 3
  • Weird behavior with URLCache

    Weird behavior with URLCache

    There is a weird bug related to custom URLSession and URLCache.

    Project setup

    Here is my AppDelegate that enables DBDebugToolkit.

    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        func application(_ application: UIApplication,
                         didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
            DBDebugToolkit.setup()
    
            let window = UIWindow(frame: UIScreen.main.bounds)
            self.window = window
            window.backgroundColor = UIColor.white
            window.rootViewController = ViewController()
    
            window.makeKeyAndVisible()
            return true
        }
    }
    

    In my ViewController, I have a button that loads an url with Cache-Control header set, meaning the system should cache the response.

    class ViewController: UIViewController {
    
        private lazy var button: UIButton = {
            let button = UIButton(type: .system)
            button.setTitle("Load", for: .normal)
            button.addTarget(self, action: #selector(load), for: .touchUpInside)
            return button
        }()
    
        // Custom URLSession with custom cache and custom diskPath
        private lazy var session: URLSession = {
            let memoryCapacity = 500 * 1024 * 1024 // 500 MB
            let diskCapacity = 500 * 1024 * 1024 // 500 MB
    
            let cache = URLCache(
                memoryCapacity: memoryCapacity,
                diskCapacity: diskCapacity,
                diskPath: "com.xxxxx.yyyyy"
            )
    
            let configuration = URLSessionConfiguration.default
            configuration.urlCache = cache
    
            return URLSession(
                configuration: configuration,
                delegate: self,
                delegateQueue: nil
            )
        }()
    
        override func viewDidLoad() {
            super.viewDidLoad()
            view.addSubview(button)
            button.frame = view.bounds
        }
    
        // MARK: - Private
    
        @objc private func load() {
            // A ~130 KB image, small enough to be cached by the default URLSession session
            let url = URL(string: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&auto=format&fit=crop&w=1000&q=80")!
            session.dataTask(with: url).resume()
        }
    }
    
    extension ViewController: URLSessionDataDelegate {
    
        // MARK: - URLSessionDataDelegate
    
        func urlSession(_ session: URLSession,
                        dataTask: URLSessionDataTask,
                        willCacheResponse proposedResponse: CachedURLResponse,
                        completionHandler: @escaping (CachedURLResponse?) -> Void) {
            print("session:willCacheResponse:")
            completionHandler(proposedResponse)
        }
    
        func urlSession(_ session: URLSession,
                        dataTask: URLSessionDataTask,
                        didReceive response: URLResponse,
                        completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) {
            print("dataTask:didReceive response")
            completionHandler(.allow)
        }
    
        func urlSession(_ session: URLSession,
                        dataTask: URLSessionDataTask,
                        didReceive data: Data) {
            print("data = \(data)")
        }
    }
    

    With DBDebugToolKit activated

    When I first clic on the load button, the request is sent to the server, and the logs are the following :

    dataTask:didReceive response
    data = 129408 bytes
    

    When I clic a second time, the request is not sent to the server, the cached image is used and the logs are the same.

    We can note that the log print("session:willCacheResponse:") is never called even it should be.

    The cache folder structure is : Wrong cache structure

    Note the duplication of the Cache.db files. What's more the fsCachedData folder, that contains the cached image, is at the wrong location. That means the image is saved in the default URLCache and not in the custom one I defined in my sesssion.

    Without DBDebugToolKit activated

    If I trash the app and remove the line DBDebugToolkit.setup() in the AppDelegate, when I first clic on the image, the request is sent to the server and the logs are the following:

    dataTask:didReceive response
    data = 16384 bytes
    data = 16384 bytes
    data = 16384 bytes
    data = 16383 bytes
    data = 16384 bytes
    data = 16384 bytes
    data = 16384 bytes
    data = 14721 bytes
    session:willCacheResponse:
    

    Note that this time the logs are correct and session:willCacheResponse: is printed !

    The cache folder structure is Correct cache structure This time there is only one Cache.db file, and the fsCachedData folder is under the com.xxxxx.yyyyy directory. Which is the expected behavior.

    Issue

    So the issue is that a custom url session with a custom url cache is never taken into account with DBDebugToolkit activated. What's more the URLSessionDataDelegate method urlSession(_:, dataTask:, willCacheResponse:, completionHandler:) is not called.

    bug 
    opened by felginep 3
  • Typo in block replacement of [UIView initWithFrame]?

    Typo in block replacement of [UIView initWithFrame]?

    // UIView+DBUserInterfaceToolkit.h
    
    + (void)load {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            __block IMP originalInitWithCoderIMP = [self replaceMethodWithSelector:@selector(initWithCoder:)
                                                                             block:^UIView * (UIView *blockSelf, NSCoder *aDecoder) {
                                                                                UIView *res = ((UIView * (*)(id, SEL, NSCoder *))originalInitWithCoderIMP)(blockSelf, @selector(initWithCoder:), aDecoder);
                                                                                [res db_refreshDebugBorders];
                                                                                [res db_registerForNotifications];
                                                                                return res;
                                                                             }];
            __block IMP originalInitWithFrameIMP = [self replaceMethodWithSelector:@selector(initWithFrame:)
                                                                             block:^UIView * (UIView *blockSelf, CGRect frame) {
                                                                                 UIView *res = ((UIView * (*)(id, SEL, CGRect))originalInitWithFrameIMP)(blockSelf, @selector(initWithCoder:), frame);
                                                                                 [res db_refreshDebugBorders];
                                                                                 [res db_registerForNotifications];
                                                                                 return res;
                                                                             }];
            __block IMP originalDeallocIMP = [self replaceMethodWithSelector:NSSelectorFromString(@"dealloc")
                                                                       block:^(__unsafe_unretained UIView *blockSelf) {
                                                                           [[NSNotificationCenter defaultCenter] removeObserver:blockSelf];
                                                                           ((void (*)(id, SEL))originalDeallocIMP)(blockSelf, NSSelectorFromString(@"dealloc"));
                                                                       }];
        });
    }
    

    Is there a bug with this line:

    UIView *res = ((UIView * (*)(id, SEL, CGRect))originalInitWithFrameIMP)(blockSelf, @selector(initWithCoder:), frame);
    

    You pass @selector(initWithCoder:) but shouldn't you pass @selector(initWithFrame:)?

    opened by respan 3
  • Dismissing Two Successive Popups Crashes the Device

    Dismissing Two Successive Popups Crashes the Device

    After installing DBDebugToolkit, the phone crashes every time two successive popups were created (shown at the same time) and then when dismissing both (one after the other) causes the app to crash. Uninstalling DBDebugToolkit causes the crash not to happen. It is replicable within all scenarios whereby two popups were created and then dismissed.

    opened by SorataYuu 3
  • Cannot remove an observer for the key path because it is not registered as an observer.">

    Cannot remove an observer for the key path "layer.sublayers" from <_UIAlertControllerShimPresenterWindow 0x102cdacd0> because it is not registered as an observer.

    • (void)windowDidResignKey:(UIWindow *)window { [window removeObserver:self forKeyPath:@"layer.sublayers"]; // causes exception if UIPickerView is displayed from modal form }

    *** Terminating app due to uncaught exception 'NSRangeException', reason: 'Cannot remove an observer <DBPerformanceToolkit 0x1741193e0> for the key path "layer.sublayers" from <_UIAlertControllerShimPresenterWindow 0x102cdacd0> because it is not registered as an observer.'

    Also wrapping a try-catch around it does not fix the issue.

    opened by kross50 3
  • Measuring CPU, Memory and FPS on main thread is not accurate

    Measuring CPU, Memory and FPS on main thread is not accurate

    Hello,

    Very nice toolkit! One thing I’ve noticed is, the more blocked the main thread is, the less accurate the measurements are. Especially the FPS measurement, it is possible to lose entire CPU spikes (60 fps -> quick ramp up of a CPU spike for some time -> 60 fps). I have found that the CADisplayLink strategy for measuring FPS is not the most accurate if main thread spikes exist.

    One challenge with moving the measurements to a background queue is updating the widget and table view. This can be solved by using a CATextLayer to update the text in a background queue (CALayer and CATransation are thread safe as of iOS 4).

    Would you be interested in a PR that accomplishes this?

    opened by LeoNatan 3
  • crash when the app send requests

    crash when the app send requests

    A crash occurred when my app continued to send requests while the Network section was open

    __71-[DBNetworkViewController networkDebugToolkit:didUpdateRequestAtIndex:]_block_invoke (DBNetworkViewController.m:210)
    __29-[DBMainQueueOperation start]_block_invoke (DBMainQueueOperation.m:72)
    

    DBDebugToolkit (0.6.0) iOS 15.5 MacOS 12 Xcode 13.4.1

    opened by Max-Job 0
  • 0.9.0 Not working with Alamofire

    0.9.0 Not working with Alamofire

    Bumping from 0.8.0 to 0.9.0 completely breaks all network requests that are done through Alamofire.

    This is what I see in the console:

    API MISUSE: NSURLSession delegate Alamofire.SessionDelegate: <Alamofire.SessionDelegate: 0x600000e609b0> (0x600000e609b0)
    API MISUSE: dataTask:didReceiveResponse:completionHandler: completion handler not called
    

    Feels like methods are not correctly swizzled anymore?

    opened by lordzsolt 3
  • (0.9.0) App is Crashing on App Store / Test Flight

    (0.9.0) App is Crashing on App Store / Test Flight

    Hello! Version: 0.9.0 installed by cocoapods App works fine in debug mode, but crashes app immediately on Test Flight/App Store without crash logs. iOS 15.4.1 Xcode 13.3.1 OS X Monterey I've experienced similar crashes when external dynamic library was not embedded into the target.

    opened by pskow 0
  • feature: copy button for request and response body

    feature: copy button for request and response body

    Could you add a button that allows to copy the entire request and response body? Often they are huge, and scrolling and selecting is very inconvenient. cmd+A not always works in simulator

    Thank you

    opened by Max-Job 0
  • When application's build being installed to iPhone via Firebase App Distribution, console output in DBDebugToolkit is not complete (many lines are missing)

    When application's build being installed to iPhone via Firebase App Distribution, console output in DBDebugToolkit is not complete (many lines are missing)

    Hello, dbukowski!

    I've faced an issue (bug?) while using DBDebugToolkit with Swift iOS(iPhone) application. If app being built to Simulator, or directly to device using XCode and usb cable, everything works perfectly fine.

    But for testing purposes, I upload application to Firebase App Distribution. I do that with Fastlane. Fastlane builds the app, and then loads the build to Firebase App Distribution (through Firebase CLI). After that, the build becomes available for installation on approved devices without a cable, directly from Firebase App Distribution service.

    When app installed this way, Console output in DBDebugToolkit is incomplete. Many lines are, for sure, missing. And, sometimes, missing lines appear, but with long delay. Sometimes missing lines don't appear at all.

    What I've tried: 1/ Change build configuration from debug to adhoc and build directly to device using usb cable - console output was complete, means issue is not dependant on build configuration. 2/ Change build options in Fastfile and build to Firebase again (available options: include bitcode, include symbols) - nothing changed.

    About environment: Xcode 13.1 Swift 5 DBDebugToolkit 0.6.2 Fastlane 2.205.1

    My build settings in fastfile: Screenshot 2022-03-29 at 12 39 11

    opened by fedfork 0
Releases(0.9.0)
  • 0.9.0(Feb 11, 2022)

    What's Changed

    • Feature/first refactoring to swift and swift UI by @gamada-de in https://github.com/dbukowski/DBDebugToolkit/pull/62
    • Removed NSURLProtocol injection
    • Currently only some URLSession methods are supported for the request observing.

    Full Changelog: https://github.com/dbukowski/DBDebugToolkit/compare/0.8.0...0.9.0

    Source code(tar.gz)
    Source code(zip)
  • 0.8.0(Feb 9, 2022)

    What's Changed

    • Feature/change deployment target to ios 13 by @gamada-de in https://github.com/dbukowski/DBDebugToolkit/pull/58
    • Fix DBNetworkURLProtocolClass Crash by @tayyab-spay in https://github.com/dbukowski/DBDebugToolkit/pull/60

    Full Changelog: https://github.com/dbukowski/DBDebugToolkit/compare/0.7.1...0.8.0

    Source code(tar.gz)
    Source code(zip)
  • 0.7.1(Feb 4, 2022)

    What's Changed

    • one of the option to fix #56 by @qkzhu in https://github.com/dbukowski/DBDebugToolkit/pull/57

    Full Changelog: https://github.com/dbukowski/DBDebugToolkit/compare/0.7.0...0.7.1

    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Feb 1, 2022)

    What's Changed

    • check index before access array by @qkzhu in https://github.com/dbukowski/DBDebugToolkit/pull/54
    • Allow to register subclass of DBURLProtocol on to NSURLSessionConfigration by @m1entus in https://github.com/dbukowski/DBDebugToolkit/pull/51
    • Add support for swift package manager by @tayyab-spay in https://github.com/dbukowski/DBDebugToolkit/pull/55

    New Contributors

    • @qkzhu made their first contribution in https://github.com/dbukowski/DBDebugToolkit/pull/54
    • @m1entus made their first contribution in https://github.com/dbukowski/DBDebugToolkit/pull/51
    • @tayyab-spay made their first contribution in https://github.com/dbukowski/DBDebugToolkit/pull/55

    Full Changelog: https://github.com/dbukowski/DBDebugToolkit/compare/0.6.0...0.7.0

    Source code(tar.gz)
    Source code(zip)
  • 0.6.0(Aug 17, 2020)

  • 0.5.2(Jun 26, 2020)

  • 0.5.1(Dec 5, 2018)

  • 0.5.0(Jun 29, 2018)

  • 0.4.0(Jun 25, 2018)

    • Added grid overlay opacity settings
    • Value text in DBTitleValueTableViewCell (user for example in request details screen) is now selectable
    • Added Carthage support
    Source code(tar.gz)
    Source code(zip)
  • 0.3.1(Apr 11, 2018)

    • Grid overlay: highly customizable grid displayed on top of the screen at all times. Helpful during design review and UI debugging
    • UIDebuggingInformationOverlay is working again on iOS 11
    • Bug fixes:
      • Improved table view management in requests list
      • Network requests logging works again on iOS 9
      • Saving screenshots for crash reports on non-main threads
      • Fixed crash with removing observer of layer.sublayers
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Oct 9, 2017)

    • Crash reports: list of all the crashes with details including stack trace, console output and a screenshot
    • Sending crash reports by email
    • Preview of available fonts
    Source code(tar.gz)
    Source code(zip)
  • 0.2.1(Sep 29, 2017)

  • 0.2.0(Jun 5, 2017)

    • UIDebuggingInformationOverlay support
    • Added convenience methods to show the menu, performance widget and UIDebuggingInformationOverlay programmatically.
    Source code(tar.gz)
    Source code(zip)
  • 0.1.4(Apr 14, 2017)

  • 0.1.3(Apr 11, 2017)

  • 0.1.2(Apr 8, 2017)

  • 0.1.1(Apr 8, 2017)

Owner
Dariusz Bukowski
Dariusz Bukowski
Remote network and data debugging for your native iOS app using Chrome Developer Tools

PonyDebugger PonyDebugger is a remote debugging toolset. It is a client library and gateway server combination that uses Chrome Developer Tools on you

Square 5.9k Dec 24, 2022
Profiling / Debugging assist tools for iOS. (Memory Leak, OOM, ANR, Hard Stalling, Network, OpenGL, Time Profile ...)

MTHawkeye Readme 中文版本 MTHawkeye is profiling, debugging tools for iOS used in Meitu. It's designed to help iOS developers improve development producti

meitu 1.4k Dec 29, 2022
A collection of tools for debugging, diffing, and testing your application's data structures.

Custom Dump A collection of tools for debugging, diffing, and testing your application's data structures. Motivation customDump diff XCTAssertNoDiffer

Point-Free 631 Jan 3, 2023
In-app console and debug tools for iOS developers

LocalConsole Welcome to LocalConsole! This Swift Package makes on-device debugging easy with a convenient PiP-style console that can display items in

Duraid Abdul 650 Jan 1, 2023
A lightweight, one line setup, iOS / OSX network debugging library! 🦊

Netfox provides a quick look on all executed network requests performed by your iOS or OSX app. It grabs all requests - of course yours, requests from

Christos Kasketis 3.4k Dec 28, 2022
An in-app debugging and exploration tool for iOS

FLEX FLEX (Flipboard Explorer) is a set of in-app debugging and exploration tools for iOS development. When presented, FLEX shows a toolbar that lives

FLEXTool 13.3k Dec 31, 2022
Chisel is a collection of LLDB commands to assist debugging iOS apps.

Chisel Chisel is a collection of LLDB commands to assist in the debugging of iOS apps. [Installation • Commands • Custom Commands • Development Workfl

Facebook 8.9k Jan 6, 2023
Next generation debugging framework for iOS

Alpha is the idea of a next generation debugging framework for iOS applications. It combines multiple debugging tools built on top of a simple, unifie

Dal Rupnik 733 Oct 29, 2022
Dotzu In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More.

Dotzu In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More. The debugger tool for iOS developer. Display logs, n

Remi ROBERT 1.8k Jan 3, 2023
iOS network debugging, like a wizard 🧙‍♂️

Start debugging iOS network calls like a wizard, without extra code! Wormholy makes debugging quick and reliable. What you can do: No code to write an

Paolo Musolino 2.1k Jan 8, 2023
Free macOS app for iOS view debugging.

Introduction You can inspect and modify views in iOS app via Lookin, just like UI Inspector in Xcode, or another app called Reveal. Official Website:h

Li Kai 575 Dec 28, 2022
Droar is a modular, single-line installation debugging window

Droar is a modular, single-line installation debugging window. Overview The idea behind Droar is simple: during app deployment stages, adding quick ap

Myriad Mobile 55 Sep 24, 2022
Convenient debugging button.

FunnyButton Example 在平时开发,运行期间有时候想中途看一下某个视图或变量的信息,虽说打断点是可以查看,但有时候断点调试有时候会卡住好一会才能看到(尤其是大项目经常卡很久),极度影响效率。 基于这种情况,FunnyButton就是为了能够便捷调试的全局按钮,添加好点击事件,就能随时

健了个平_(:з」∠)_ 2 Sep 20, 2022
App for developers to test REST API.

Httper Httper is a REST API test tool running on your iOS devices. It helps developers to test their REST APIs anywhere and anytime without PC. Featur

MuShare Group 408 Nov 22, 2022
Customizable Console UI overlay with debug log on top of your iOS App

AEConsole Customizable Console UI overlay with debug log on top of your iOS App AEConsole is built on top of AELog, so you should probably see that fi

Marko Tadić 142 Dec 21, 2022
a iOS network debug library, monitor HTTP requests

NetworkEye README 中文 NetworkEye,a iOS network debug library,monitor HTTP requests. It can be detected HTTP request include web pages, NSURLConnection,

coderyi 1.4k Dec 31, 2022
Tool to debug layouts directly on iOS devices: inspect layers in 3D and debug each visible view attributes

Introduction Features Inspect layouts directly on iOS devices Inspection could be triggered only if app is running under DEBUG build configuration, so

Ihor Savynskyi 510 Dec 24, 2022
A little and powerful iOS framework for intercepting HTTP/HTTPS Traffic.

A little and powerful iOS framework for intercepting HTTP/HTTPS Traffic from your app. No more messing around with proxy, certificate config. Features

Proxyman 874 Jan 6, 2023
blued enhanced tweak for iOS

BLUEDHOOK 本项目支持 Blued、Blued 极速版。 非越狱机型请通过 Monkeydev 环境打包 ipa 或 dylib/deb 进行重签名,越狱机型直接安装 release deb 即可。 已知问题 重签后不支持 apns 推送 同时安装 Blued、Blued 极速版 并登录同一

null 22 Oct 22, 2022