Latest0.1.1
Homepagehttps://github.com/cats-oss/Degu
LicenseMIT
Platformsios 9.0, tvos 10.0, osx 10.10
Authors

DEGU

platforms
Swift4.1


License



Carthage


SwiftPM


Version

If you want to get all events of an application, you can get events from UIApplication.sendEvent(_:). But, following implementations are needed to get events from it.

/* MyApplication.swift */
class MyApplication: UIApplication {
    override sendEvent(_ event: UIEvent) {
        super.sendEvent(event)
        print(event)
    }
}
/* main.swift */
private let applicationClassName: String = {
    #if DEBUG
        return NSStringFromClass(MyApplication.self)
    #else
        return NSStringFromClass(UIApplication.self)
    #endif
}()

UIApplicationMain(
    CommandLine.argc,
    UnsafeMutableRawPointer(CommandLine.unsafeArgv)
        .bindMemory(
            to: UnsafeMutablePointer<Int8>.self,
            capacity: Int(CommandLine.argc)),
    applicationClassName,
    NSStringFromClass(AppDelegate.self)
)
/* AppDelegate.swift */
// @UIApplicationMain <- comment out
class AppDelegate: UIResponder, UIApplicationDelegate {
    ...
}

Degu makes them easy!!

Usage

1. ApplicationProxy

This is an example. There are only 2 implementations what you have to.

  • set a delegate to ApplicationProxy.shared.delegate
  • implement ApplicationProxyDelegate
import Degu

class AppDelegate: UIResponder, ApplicationDelegate {
    ...

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        #if DEBUG
        ApplicationProxy.shared.delegate = self
        #endif

        ...

        return true
    }

    ...
}

extension AppDelegate: ApplicationProxyDelegate {
    func applicationProxy(_ proxy: ApplicationProxy, didSendEvent event: UIEvent) {
        print(event)
    }
}

In addition, you can get lifecycle method call of all ViewControllers.

func applicationProxy(_ proxy: ApplicationProxy, didCallLifeCycle lifeCycle: ViewControllerLifeCycle, ofViewController viewController: UIViewController) {
    print("ViewController = (viewController)")
    print("LifeCycle = (lifeCycle)")
}

2. Override load or initialize method

+(void)load and +(void)initialize are not permitted by Swift.

Degu

Degu

You can override +(void)load and +(void)initialize in Extension of RuntimeHandler.

extension RuntimeHandler {
    open override class func handleLoad() {
        // do something
    }

    open override class func handleInitialize() {
        // do something
    }
}

⚠️ handleLoad and handleInitialize are not called Subclass of RuntimeHandler. It only works in Extension of RuntimeHandler.

Installation

Carthage

If you’re using Carthage, simply add Degu to your Cartfile:

github "cats-oss/Degu"

CocoaPods

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

pod 'Degu'

Swift Package Manager

If you’re using Swift Package Manager, simply add Degu to your Package.swift:

dependencies: [
    .package(url: "https://github.com/cats-oss/Degu", from: "0.1.0")
]

Requirements

  • Xcode 9.3
  • Swift 4.1

License

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

Latest podspec

{
    "name": "Degu",
    "version": "0.1.1",
    "summary": "Degu makes more easier to debug application.",
    "homepage": "https://github.com/cats-oss/Degu",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "marty-suzuki": "[email protected]"
    },
    "source": {
        "git": "https://github.com/cats-oss/Degu.git",
        "tag": "0.1.1"
    },
    "swift_version": "4.1",
    "source_files": "Sources/**/*.{swift,h,m}",
    "ios": {
        "frameworks": "UIKit"
    },
    "tvos": {
        "frameworks": "UIKit"
    },
    "osx": {
        "frameworks": "AppKit"
    },
    "platforms": {
        "ios": "9.0",
        "tvos": "10.0",
        "osx": "10.10"
    }
}

Pin It on Pinterest

Share This