In effetti, non è necessario aggiungere UIBackgroundModes a .plist semplicemente per utilizzare le notifiche remote.
So che sto dividendo un po 'gli eredi (l'altra risposta è per lo più ottima, e forse qualcosa è nuovo di iOS 11), ma la domanda si riferisce alle notifiche push che richiedono aggiornamenti in background, e non lo fanno.
La differenza qui è che ci sono due diversi metodi che accettano le notifiche su AppDelegate;
Questo non richiede l'utilizzo di UIBackgroundModes:
optional func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
Quanto sopra sostituisce il deprecato a partire da iOS 11:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any])
E questo richiede la capacità delle modalità in background:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
La cosa fondamentale qui, è che il primo (e quello deprecato che ha sostituito) viene eseguito solo quando l'app è in primo piano. Quest'ultimo verrà eseguito se l'app è in primo piano O in background. Vedi le specifiche per questo specifico nugget:
Usa questo metodo per elaborare le notifiche remote in arrivo per la tua app. A differenza del metodo application (_: didReceiveRemoteNotification :), che viene chiamato solo quando l'app è in esecuzione in primo piano, il sistema chiama questo metodo quando l'app è in esecuzione in primo piano o in background.
Quindi, se hai bisogno di notifiche push, decidi se è necessario eseguire in background - solo se hai bisogno di entrambi dovresti implementare il metodo suggerito dall'avviso.