Reputation: 775
Isn't didFinishLaunchingWithOptions
supposed to be called when the app starts running for the first time? I set a breakpoint at this method and when I run the app in the simulator the breakpoint doesn't get hit, which means the method doesn't get called. I'm trying to load some data from UserDefaults whenever the app launches, but it's being completely ignored. One thing I noticed is that it's by default a private func
instead of a func
. If I get rid of the private
, I receive a warning that "there's an almost similar optional requirement in the UIApplicationDelegate". Can someone explain to me what this means and whether or not the private func
has anything to do with the method being ignored? Is that method even supposed to be called when I run my app in the simulator? If not, how can I test if data is being retrieved after my app launches? All the other methods in the AppDelegate
do get called normally (for example, the applicationDidEnterBackground
method works perfectly fine).
Upvotes: 11
Views: 9718
Reputation: 3278
Remove your method signature and have Xcode autocomplete it
I also had the problem that my didFinishLaunchingWithOptions
method in AppDelegate would not be called. My function was also marked private and looked like this
private func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
The problem is that this is the old syntax! Apparently for me when I converted my project from Swift 2.x to Swift 3 Xcode did not convert the methods in AppDelegate. The new syntax looks like this
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
Swift 4.2:
func application( _ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
Upvotes: 40
Reputation: 161
Update for Swift 4.2:
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool
Upvotes: 1
Reputation: 2454
for Swift ~3.0 Replace didFinishLaunchingWithOptions with follwing signature
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
}
Upvotes: 3
Reputation: 743
Have you implemented the didFinishLaunchingWithOptions
in one of your ViewControllers
? One will not get a call to the custom implementation of this method. This method is defined in the ApplicationDelegate
and it will always be called once the app is launched. If you haven't defined the method again in any ViewController
and the one in AppDelegate
is not being called, then try resetting the simulator. From the simulator menu Simulator -> Reset content and settings
.
If compiler prompts to make the didFinishLaunchingWithOptions
method private then the parameter of the method might be causing the error.
The parameter of the application(_:didFinishLaunchingWithOptions:) delegate method is now bridged to Swift as a [UIApplicationLaunchOptionsKey: Any]?, rather than an [NSObject : AnyObject]?. So modify the method signature as shown.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// ...
}
Upvotes: 2
Reputation: 21
This method is defined in the ApplicationDelegate and it will always be called once the app is launched. If you have not defined the method again in any ViewController and the one in AppDelegate is not being called, then try resetting the simulator.
Open simulator - > menu Simulator -> Reset content and settings.
-(BOOL)application(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//..
}
Upvotes: 1