SuperDelegate provides a consistent App Delegate API across all iOS SDKs while protecting you from bugs in the application lifecycle.
Consolidate tribal knowledge about and workarounds for eccentricities in the UIApplicationDelegate API contract.
Example: in iOS 8.4,
application(_:handleWatchKitExtensionRequest:reply:) is called before
application(_:didFinishLaunchingWithOptions:); this is not the case in iOS 8.0-8.3. SuperDelegate protects you against such changes in the API contract.
Create a clean UIApplicationDelegate API that meets your needs.
application(_:didReceiveRemoteNotification:fetchCompletionHandler:) will tell you when you receive a push notification (sometimes they tell you twice!), but they don't differentiate between delivery due to a customer tapping on notification or delivery due to the
content-available=1 flag being set in the APNS dictionary. SuperDelegate is designed to give you the information you need when you need it.
To install SuperDelegate in your iOS project running Xcode 7 with CocoaPods, add the following to your
platform :ios, '8.0' pod 'SuperDelegate', '~> 0.9.0'
Xcode 7 and Swift 2 projects should use 0.7.0
To install SuperDelegate in your iOS project with Carthage, add the following to your
carthage to build the framework and drag the built
SuperDelegate.framework into your Xcode project.
Swift Package Manager
To install SuperDelegate in your iOS project with Swift Package Manager, the following definition can be added to the dependencies of your
.Package( url: "https://github.com/square/SuperDelegate.git", versions: Version(0,9,0)..<Version(1,0,0) ),
To use git submodules, checkout the submodule with
git submodule add firstname.lastname@example.org:Square/SuperDelegate.git, drag SuperDelegate.xcodeproj to your project, and add SuperDelegate as a build dependency.
public class AppDelegate: SuperDelegate, ApplicationLaunched
SuperDelegate and conform to the
ApplicationLaunched protocol. SuperDelegate guarantees to call
setupApplication() only once per application launch, before making any other delegate calls. SuperDelegate also guarantees that
loadInterfaceWithLaunchItem(_:) will be called once, when your app is brought to the foreground for the first time after it is launched.
Adopting more AppDelegate features
To opt into more AppDelegate features, have your
AppDelegate class conform to the associated protocol. For example, making your
AppDelegate class conform to
LocalNotificationCapable will give your app the ability to post local notifications.
- Xcode 7.0 or later.
- iOS 8 or later.
- 0.8.* – Swift 2.3 and Xcode 7.3+.
- 0.9.* – Swift 3.0 and Xcode 8+.
- 1.0 – Swift 3.0, Xcode 8+, and iOS 10 SDK adoption. Currently in development.
We’re glad you’re interested in SuperDelegate, and we’d love to see where you take it. Please read our contributing guidelines prior to submitting a Pull Request.
Thanks, and happy delegating!
Help us keep the lights on
0.8.2 - Jul 22, 2016
- Explicitly build using Swift 2.3 so v0.8.* continues to work on Xcode 8
0.8.1 - Jul 16, 2016
Fix issue where RemoteNotification doesn't properly parse
0.9.0 - Sep 21, 2016
Adopts Swift 3.0
0.8.0 - Jun 15, 2016
Initial version of SuperDelegate! Fully tested on iOS 8 and 9 using Xcode 7.3.