Se você já desenvolve pra iOS a algum tempo, deve saber quão difícil era para testar notificações, que só podiam ser testadas no dispositivo com a configuração e instalação correta dos certificados. Note, eu disse era, pois com a chegada do Xcode 11.4 e o iOS 13.4, é possível fazer alguns testes direto no simulador. (O projeto completo desse post pode ser baixado aqui)

Existem duas maneiras de se fazer isso, e para as duas vamos precisar de um arquivo de payload no formato abaixo, com a extensão .apns. (se quiser saber mais sobre o serviço de push notification clique aqui)

{
  "aps": {
    "alert": {
      "title": "Push Notification Demo",
      "body": "Push notification in simulator!",
      "sound": "default"
    },
    "badge": 10
  },
  "Simulator Target Bundle": "io.redspark.pushNotification"
}

Esse formato é o mesmo do arquivo que é enviado pelo servidor da aplicação, com uma única diferença da chave Simulator Target Bundle que deve ter como valor o bundle da aplicação, no nosso exemplo “io.redspark.pushNotification”

No aplicativo precisamos colocar o seguinte import e bloco de código no arquivo AppDelegate.swift, para que o app possa pedir permissão ao usuário para receber as notificações.

import UserNotifications
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        UNUserNotificationCenter.current()
            .requestAuthorization(options: [.alert, .sound]) {(granted, error) in
                // Make sure permission to receive push notifications is granted
                print("Permission is granted: \(granted)")
        }
        
        return true
    }

Agora vamos executar o app pra permitirmos o recebimento de notificações, no alerta que será exibido na primeira execução, clique em Allow.

Agora estamos prontos para enviar notificações para nosso app no simulador. Lembre-se que para aparecer a notificação o app deve estar fechado ou em segundo plano.

A primeira opção de envio é via terminal usando as ferramentas de linhas de comando do próprio Xcode (aquelas ferramentas que que são instaladas na primeira execução de todas as versões do Xcode) e vamos precisar tbm do identificador do simulador que vamos utilizar pra testar, no nosso exemplo utilizaremos o iPhone 11 Pro Max. Para pegar o identificador, no Xcode, clicamos no menu Window -> Devices and Simulators

Em seguida é só copiar o identificador do simulador.

Agora é só digitar o comando xcrun simctl push <identifier> <arquivo.apns>. No nosso caso o comando fica assim

xcrun simctl push D9695940-AE2D-40B1-94FE-736FC0537886 blog_push_alert.apns 

Já a segunda forma é um pouco mais simples, basta arrastar o arquivo .apns para o simulador.

Em um próximo post, veremos algumas maneiras de interagir com as notificações no simulador.

Até breve.