Lighter AppDelegate by dispatching events
[![CI Status](http://img.shields.io/travis/Khoa Pham/LighterAppDelegate.svg?style=flat)](https://travis-ci.org/Khoa Pham/LighterAppDelegate)
To run the example project, clone the repo, and run pod install
from the Example directory first.
- See Lighter AppDelegate
- You can use either by composition or inheritance
- Dispatching
UIApplicationDelegate
events into specificService
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
}
}
- Initialize
Dispatcher
with your list of services - Dispatch interested
UIApplicationDelegate
events toDispatcher
@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)
}
}
- Inherite from
LighterAppDelegate
- Override
dispatcher()
LighterAppDelegate
has default implementations forApp State Changes
andURL
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: LighterAppDelegate {
var window: UIWindow?
let simpleDispatcher = Dispatcher(services: [RootService()])
override func dispatcher() -> Dispatcher {
return simpleDispatcher
}
func applicationDidReceiveMemoryWarning(application: UIApplication) {
dispatcher().applicationDidReceiveMemoryWarning(application)
}
}
- 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.
- Involving
remoteNotification
events also consider your app to support Push Notification
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 http://sizeof.io/service-oriented-appdelegate/
Khoa Pham, onmyway133@gmail.com
LighterAppDelegate is available under the MIT license. See the LICENSE file for more info.