Здравствуйте, друзья! Сегодня мы разберем как тестировать пуш-уведомления на симуляторе без заморочек с сервером и реальными устройствами. Это особенно актуально когда нужно быстро проверить внешний вид или логику обработки уведомлений.
Подготовка: запрашиваем разрешения:
Первым делом нужно запросить разрешение на показ уведомлений. Без этого даже идеально настроенный пуш не сработает:
import UserNotifications
UNUserNotificationCenter.current().requestAuthorization(
options: [.alert, .sound, .badge]
) { granted, error in
print("Разрешение получено: \(granted)")
}
Два способа отправки пушей:
Способ 1 - Drag & Drop (самый простой):
Создаем JSON-файл
notification.apns с содержимым уведомления:
{
"aps": {
"alert": {
"title": "Новое сообщение",
"body": "Вам пришло новое сообщение в чате"
},
"badge": 1,
"sound": "default"
},
"Simulator Target Bundle": "com.yourapp.bundleid"
}
Просто перетаскиваем файл на симулятор, уведомление появится мгновенно!
Способ 2 - Через терминал (для автоматизации):
Узнаем
ID симулятора:
xcrun simctl list
Отправляем пуш:
xcrun simctl push booted com.yourapp.bundleid notification.apns
Ключевое слово
booted автоматически определяет запущенный симулятор.
Что еще можно протестировать:
На симуляторе отлично работают:
Rich-уведомления с картинками.
Кастомные звуки.
Action-кнопки.
Deep links.
Badge-иконки.
Частые ошибки:
- Не указан Simulator Target Bundle: симулятор не поймет, какому приложению предназначен пуш.
- Нет разрешений: забыли вызвать requestAuthorization.
- Неверный bundle identifier: проверьте точное написание в проекте.
Вывод:
Тестировать пуш-уведомления на симуляторе стало проще простого. Не нужно настраивать серверную часть, достаточно JSON-файла и пары команд. Единственное ограничение - некоторые продвинутые функции вроде фоновых обновлений контента лучше проверять на реальном устройстве. Но для 90% повседневных задач симулятора более чем достаточно.
Стоит отметить, что на
iOS 26 симуляторах иногда наблюдаются проблемы, при тестировании пуш-уведомлений. Если у вас возникли проблемы, попробуйте протестировать на предыдущих версиях
iOS.