title: Background fetch request and notifications doesn't work in every situations
body: <p>In my <code>AppDelegate</code>, I've added a method to do a fetch request on my <code>Core Data</code>, and in some case I'm showing a notification... But I see that there are some deprecated methods. I Tried to do some changes, but:</p>
  
  <ul>
  <li><p>When I kill my app the background mode does not work</p></li>
  <li><p>When my app is on foreground, the background mode works, but the notifications don't show up</p></li>
  <li><p>When I run my app in background, everything is working fine</p></li>
  </ul>
  
  <p>Here is my code:</p>
  
  <p>The method that I want to run every time (every minute):</p>
  
  <pre><code>func notification(){
  
      let appDel: AppDelegate = UIApplication.shared.delegate as! AppDelegate
      let context: NSManagedObjectContext = appDel.managedObjectContext
      var messageNotif:String? = nil
  
      do {
  
          let request = NSFetchRequest&lt;NSFetchRequestResult&gt;(entityName: "Leads")
          let predicate = NSPredicate(format: "statutSendLead=%@ OR statutSendSimulation=%@", "0", "0")
          request.predicate = predicate
          let results = try context.fetch(request)
  
          if results.count &gt; 0 {
              if Reachability.isConnectedToNetwork() == false {
  
                  messageNotif = "Votre demande n'a pas été envoyée, merci de vous connecter à internet."
              } else {
  
                  Reachability.checkUrl(urlString:Configuration.MyVariables.url, finished: { isSuccess in
  
  
                      if isSuccess == false {
                          messageNotif = "Notre service d'enregistrement des demandes est temporairement indisponible, un renvoi sera effectué ultérieurement."
                      }
                  })
              }
              */
  
  
              if (messageNotif != nil) {
  
                  let identifier = self.stringWithUUID()
  
  
                  if #available(iOS 10.0, *) {
                      let center = UNUserNotificationCenter.current()
                      center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
  
                          let content = UNMutableNotificationContent()
  
                          content.body = messageNotif!
                          content.sound = UNNotificationSound.default()
                          // Deliver the notification in five seconds.
                          let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
                          let request = UNNotificationRequest.init(identifier: "test", content: content, trigger: trigger)
  
                          // Schedule the notification.
                          let center = UNUserNotificationCenter.current()
  
                          UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
                          UNUserNotificationCenter.current().add(request) {(error) in
                              if let error = error {
                                  print(error)
                              }
                          }
                      }
                  } else {
                      let notification = UILocalNotification()
                      notification.alertBody = messageNotif
                      notification.fireDate = NSDate() as Date
                      notification.soundName = UILocalNotificationDefaultSoundName
                      UIApplication.shared.scheduleLocalNotification(notification)
                  }
              }
          }
  
          /* else {
           timerNotification.invalidate()
           } */
  
      } catch {
          print(error)
      }
  }
  </code></pre>
  
  <p>The other methods:</p>
  
  <pre><code>var window: UIWindow?
  var timerUploadData:Timer!
  var timerNotification:Timer!
  var test:Timer!
  
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -&gt; Bool {
  
      UIApplication.shared.setMinimumBackgroundFetchInterval(
          UIApplicationBackgroundFetchIntervalMinimum)
  
      let userDefaults = UserDefaults.standard
  
      if userDefaults.object(forKey: "ApplicationUniqueIdentifier") == nil {
          let UUID = Foundation.UUID().uuidString
          userDefaults.set(UUID, forKey: "ApplicationUniqueIdentifier")
          userDefaults.synchronize()
      }
  
      Thread.sleep(forTimeInterval: 3.0)
      window = UIWindow(frame: UIScreen.main.bounds)
      let containerViewController = ContainerViewController()
      window!.rootViewController = containerViewController
      window!.makeKeyAndVisible()
  
  
      if #available(iOS 10.0, *){
  
          application.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
          timerNotification = Timer.scheduledTimer(timeInterval: 60 * 1, target: self, selector: #selector(AppDelegate.notification), userInfo: nil, repeats: true)
  
      }
      else { //If user is not on iOS 10 use the old methods we've been using
          let notificationSettings = UIUserNotificationSettings(
              types: [UIUserNotificationType.badge, UIUserNotificationType.alert, UIUserNotificationType.sound], categories: nil)
          timerNotification = Timer.scheduledTimer(timeInterval: 60 * 1, target: self, selector: "notification", userInfo: nil, repeats: true)
          application.registerUserNotificationSettings(notificationSettings)
      }
  
      registerPushNotifications()
  
      return true
  }
  
  func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -&gt; Void) {
      notification()
  }
  
  
  func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {
      if notificationSettings.types != UIUserNotificationType() {
          application.registerForRemoteNotifications()
      }
  }
  
  func registerPushNotifications() {
      DispatchQueue.main.async {
          let settings = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)
          UIApplication.shared.registerUserNotificationSettings(settings)
      }
  }
  
  func stringWithUUID() -&gt; String {
      let uuidObj = CFUUIDCreate(nil)
      let uuidString = CFUUIDCreateString(nil, uuidObj)!
      return uuidString as String
  }
  </code></pre>