Latest 0.1.0
License MIT
Platforms ios 8.0, requires ARC
Frameworks UIKit

Lighter AppDelegate by dispatching events

[![CI Status]( Pham/LighterAppDelegate.svg?style=flat)]( Pham/LighterAppDelegate)


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


Dispatching events

  • See Lighter AppDelegate
  • You can use either by composition or inheritance
  • 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)

            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


  • Initialize Dispatcher with your list of services
  • Dispatch interested UIApplicationDelegate events to Dispatcher
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)


  • Inherite from LighterAppDelegate
  • Override dispatcher()
  • LighterAppDelegate has 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
class AppDelegate: LighterAppDelegate {

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

    override func dispatcher() -> Dispatcher {
        return simpleDispatcher

    func applicationDidReceiveMemoryWarning(application: UIApplication) {


  • 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 ‘d like LighterAppDelegate to be protocol with default implementations in its extension, but for now we can’t provide default implementations for Objective-C protocols.


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

pod "LighterAppDelegate"


Credit goes to


Khoa Pham, [email protected]


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

Latest podspec

    "name": "LighterAppDelegate",
    "version": "0.1.0",
    "summary": "Lighter AppDelegate by dispatching events",
    "homepage": "",
    "license": "MIT",
    "authors": {
        "Khoa Pham": "[email protected]"
    "source": {
        "git": "",
        "tag": "0.1.0"
    "social_media_url": "",
    "platforms": {
        "ios": "8.0"
    "requires_arc": true,
    "source_files": "Pod/Classes/**/*",
    "resource_bundles": {
        "LighterAppDelegate": [
    "frameworks": "UIKit"

Pin It on Pinterest

Share This