LighterAppDelegate 0.1.0

LighterAppDelegate 0.1.0

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Jan 2016
SPMSupports SPM

Maintained by Khoa Pham.



Lighter AppDelegate by dispatching events

Usage

To run the example project, clone the repo, and run pod install from the Example directory first.

Features

Dispatching events

  • See Lighter AppDelegate
  • You can use either by composition or protocol conformance
  • Dispatching UIApplicationDelegate events into specific Service class. We can have RootService, DebugService, AnalyticsService, ...
class RootService : NSObject, UIApplicationDelegate {
    func application(application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {

            appDelegate().window = UIWindow(frame: UIScreen.mainScreen().bounds)
            showHome()
            appDelegate().window?.makeKeyAndVisible()

            return true
    }
}

extension RootService {
    func showHome() {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        appDelegate().window?.rootViewController = storyboard.instantiateInitialViewController()
    }
}

extension RootService {
    func appDelegate() -> AppDelegate {
        return UIApplication.sharedApplication().delegate as! AppDelegate
    }
}

Composition

  • Initialize Dispatcher with your list of services
  • Dispatch interested UIApplicationDelegate events to Dispatcher
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    let dispatcher = Dispatcher(services: [RootService()])

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
        return dispatcher.application(application, didFinishLaunchingWithOptions: launchOptions)
    }
}

Protocol Conformance

  • Conform to protocol LighterAppDelegate
  • Implement dispatcher()
  • LighterAppDelegate has protocol extension with default implementations for App State Changes and URL events, which is suitable for common usage.
  • If you want to receive more events, add more functions inside your AppDelegate and dispatch to your Dispatcher
@UIApplicationMain
class AppDelegate: UIResponder, LighterAppDelegate {

    var window: UIWindow?
    let simpleDispatcher = Dispatcher(services: [RootService()])

    func dispatcher() -> Dispatcher {
        return simpleDispatcher
    }

    func applicationDidReceiveMemoryWarning(application: UIApplication) {
        dispatcher().applicationDidReceiveMemoryWarning(application)
    }
}

Warning

  • Only implement UIApplicationDelegate functions in case you truly need. Unnecessary functions can cause problems

You've implemented -[ application:performFetchWithCompletionHandler:], but you still need to add "fetch" to the list of your supported UIBackgroundModes in your Info.plist.

You've implemented -[ application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

Your app appears to include API used to register with the Apple Push Notification service, but the app signature's entitlements do not include the "aps-environment" entitlement

  • I see that this is problem in case you implement UIApplicationDelegate functions inside your AppDelegate. This is not a problem with LighterAppDelegate since functions are implemented in its protocol extension !!

Installation

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

pod "LighterAppDelegate"

Credit

Credit goes to http://sizeof.io/service-oriented-appdelegate/

Author

Khoa Pham, [email protected]

License

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