iOS – How to guarantee that applicationWillTerminate will be executed

Is there A way to guarantee that the applicationWillTerminate method in the AppDelegate delegate will be hit? Something like a key in the info.plist file, etc..?

My goal: I’m working in a beacon app, the piece of code is in this article. My problem is that the message from the didEnterRegion keeps poping even when i’m beside the beacon. To solve that I’m setting a flag to control the message. My code below:

  • horizontal CAGradientLayer in iOS 7.0
  • Casting sender to IBAction as id or specific class
  • In iOS how can I remove languages from Localizable.strings with Xcode
  • How to decode AAC audio buffer to PCM buffer in iOS?
  • How to send data back by popViewControllerAnimated for Swift?
  • Swift: How to hold any possible instance of a generic type in a variable
  • if(!UserDefaults.standard.bool(forKey: Constants.EnterZoneMsgShowName)){
        let notification = UILocalNotification()
        notification.alertBody = "Hi, you are about to arrive at CIDMA's office. Please open de demo app and turn on the bluetooth on your device to enrich your experience. "
        UserDefaults.standard.set(true, forKey: Constants.EnterZoneMsgShowName)

    I want to set this flag to false when I close the app. I tried to put it at the applicationWillTerminate but this method is not hit every time.

    I would like to know how to guarantee that this code will be hit or if there is a better place to put the code: UserDefaults.standard.set(false, forKey: Constants.EnterZoneMsgShowName)

    Solutions Collect From Internet About “iOS – How to guarantee that applicationWillTerminate will be executed”

    applicationWillTerminate(_:) – Tells the delegate when the app is about
    to terminate.

    For apps that do not support background execution or are linked against iOS 3.x or earlier, this method is always called when the user quits the app.

    For apps that support background execution, this method is generally not called when the user quits the app because the app simply moves to the background in that case. However, this method may be called in situations where the app is running in the background (not suspended) and the system needs to terminate it for some reason.

    What you want to call is applicationDidEnterBackground if your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.