After installing Xcode 8 beta 6, I'm getting a warning saying:
Instance method 'application(_:didFinishLaunchingWithOptions:)' nearly matches optional requirement 'application(_:didFinishLaunchingWithOptions:)' of protocol 'UIApplicationDelegate'
in my App Delegate.
There are 2 suggested fixits to silence the warning:
- Mark the method as private
- Add @nonobjc to the method
Doing either silences the warning. But why does this need to be done?
iOS 12 SDK Update
In the iOS 12 SDK (that ships with Xcode 10), UIApplicationLaunchOptionsKey
has now been renamed to the nested type UIApplication.LaunchOptionsKey
, so you'll want:
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// ...
}
iOS 10 and 11 SDKs (Xcode 8 and 9)
This warning is due to the fact that the didFinishLaunchingWithOptions:
parameter of the application(_:didFinishLaunchingWithOptions:)
delegate method is now bridged to Swift as a [UIApplicationLaunchOptionsKey: Any]?
, rather than an [NSObject : AnyObject]?
.
Therefore you'll need to update your implementation to reflect this change:
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
) -> Bool {
// ...
}
Note that neither of Xcode's suggested fixes will actually fix the problem, they'll only conceal your implementation of application(_:didFinishLaunchingWithOptions:)
from Objective-C – meaning that it'll never actually get called.
the first parameter passed into the function no longer has an external name. This is really just a minor detail since you don’t call this method directly, and it’s a quick fix to make the compiler happy. You can either manually edit that first parameter name to _, or just let Xcode handle this for you.
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool
or the New Syntax
func application(_ application:UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool // or remove = nil and try
you can get the latest Documentation from apple and sample link in here