Na verdade, você não precisa adicionar UIBackgroundModes a .plist simplesmente para usar notificações remotas.
Sei que estou dividindo um pouco os herdeiros (a outra resposta é excelente, e talvez algo seja novo no iOS 11), mas a pergunta se refere a notificações push que precisam de atualizações em segundo plano, e não precisam.
A diferença aqui é que existem dois métodos diferentes que aceitam notificações no AppDelegate;
Este não exige que você use UIBackgroundModes:
optional func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
O acima substitui o obsoleto a partir do iOS 11:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any])
E este requer capacidade de modos de fundo:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
O principal aqui é que o anterior (e aquele que foi substituído por ele) só é executado quando o aplicativo está em primeiro plano. O último será executado se o aplicativo estiver em primeiro plano OU em segundo plano. Veja as especificações para este nugget específico:
Use este método para processar notificações remotas de entrada para seu aplicativo. Ao contrário do método application (_: didReceiveRemoteNotification :), que é chamado apenas quando seu aplicativo está sendo executado em primeiro plano, o sistema chama esse método quando seu aplicativo está em execução em primeiro ou segundo plano.
Portanto, se você precisar de notificações push, decida se precisa executar em segundo plano - apenas se precisar de ambas, você deve implementar o método sugerido pelo aviso.