ОУУУУУУУ!!!
Надеюсь я не рано радуюсь и все это не временные чудеса - но у меня только что PlayConsole и GooglePlay открылись без VPN🤩
У всех так? Или это уже давно и я проспал...
Надеюсь я не рано радуюсь и все это не временные чудеса - но у меня только что PlayConsole и GooglePlay открылись без VPN🤩
У всех так? Или это уже давно и я проспал...
👍2
И так, подписочники и подписочницы, представляю вам новейшую разработку Flutter лаборатории, находящейся в Сколково!💥
Хотел бы я так начать, но увы... Однако, кое-что интересное на самом деле есть!
А дело в том, что мне было нужно припаять в своем рабочем проекте "виджет-карусель", нууу тот, что слайдер, который умеет перелистывать виджеты анимированно..
И первым делом, конечно, в голову пришло пойти на pubdev и достать оттуда самый залайканный (все же так делают, правда?).
Вот он: https://pub.dev/packages/carousel_slider
Тем более я его уже юзал в одном из своих старых проектов.
Но я успел заметить, что он обновлялся в последний раз 16 месяцев назад. Т.е. когда еще не было цветных телевизоров. Ну давно короче, не тупите.
Ну и я как уважающий себя (или поверивший в себя) программист решил написать эту шляпу самостоятельно. И пошел в VS Code - подумали вы, но нет. Я пошел на StackOverflow😁 Искать готовые решения. Среди всей кучи различных реализаций, предложенных неравнодушными людьми (откуда они вообще берутся?) я отыскал вариант, что больше всего удовлетворял мои потребности.
И теперь, после доработок, я представляю вам Ferrari среди подобных виджетов - виджет "Carousel"!
P.S: Масштаб эпичности презентации несопоставим с конечным результатом работы, просто настр норм.
Ищи код в моем репозитории на гитхаб, среди других виджетов в галерее виджетов: https://github.com/GereyTatarkhanov/widget_gallery
Хотел бы я так начать, но увы... Однако, кое-что интересное на самом деле есть!
А дело в том, что мне было нужно припаять в своем рабочем проекте "виджет-карусель", нууу тот, что слайдер, который умеет перелистывать виджеты анимированно..
И первым делом, конечно, в голову пришло пойти на pubdev и достать оттуда самый залайканный (все же так делают, правда?).
Вот он: https://pub.dev/packages/carousel_slider
Тем более я его уже юзал в одном из своих старых проектов.
Но я успел заметить, что он обновлялся в последний раз 16 месяцев назад. Т.е. когда еще не было цветных телевизоров. Ну давно короче, не тупите.
Ну и я как уважающий себя (или поверивший в себя) программист решил написать эту шляпу самостоятельно. И пошел в VS Code - подумали вы, но нет. Я пошел на StackOverflow😁 Искать готовые решения. Среди всей кучи различных реализаций, предложенных неравнодушными людьми (откуда они вообще берутся?) я отыскал вариант, что больше всего удовлетворял мои потребности.
И теперь, после доработок, я представляю вам Ferrari среди подобных виджетов - виджет "Carousel"!
P.S: Масштаб эпичности презентации несопоставим с конечным результатом работы, просто настр норм.
Ищи код в моем репозитории на гитхаб, среди других виджетов в галерее виджетов: https://github.com/GereyTatarkhanov/widget_gallery
❤2
Возвращаясь к теме с каруселью.. Возникла проблема с тем, что PageView требует фиксированного размера и не умеет отображать дочерние виджеты, которые имеют разные размеры. И из-за неадаптивных значений получалось, что на разных устройствах (которые соответственно имеют разные диагонали экрана) возникали траблы. Где-то pixel overflow, где-то наоборот пустое пространство. И это при том, что размеры были заданы посредством MediaQuery.👾
Конечно, это надо было решать. Первое что я пошел делать - гуглить. На StackOverflow с возможными вариантами решения долго не стал сидеть, решил пойти на pubdev, чтобы узнать может кто-то уже выложил лучший вариант? (Ведь задача довольно типовая). И действительно, нашел пакет с PageView, где необязательно указывать размеры, он адаптивен. Однако указывать dependency в pubspec.yaml не очень хотелось (Ведь он обновлялся в последний раз 22 месяца назад) - поэтому просто открыл репозиторий с этим проектом, вырезал нужный код, обновил устаревшие участки и добавил к себе в проект.
Ссылка на оригинальный проект: https://pub.dev/packages/expandable_page_view
Гитхаб автора: https://github.com/Limbou
Автор проделал хорошую работу.👏👏
Ссылка на мой гитхаб с вырезанным кодом: https://github.com/GereyTatarkhanov/widget_gallery
Теперь нет проблемы с тем, что содержимое может не поместиться в скроллящийся item (ведь фиксированные значения не задаются), а также все items могут иметь абсолютно разные размеры - PageView, а соответственно Carousel будет подстраиваться (Да, я добавил ExpandablePageView в Carousel тоже).
Конечно, это надо было решать. Первое что я пошел делать - гуглить. На StackOverflow с возможными вариантами решения долго не стал сидеть, решил пойти на pubdev, чтобы узнать может кто-то уже выложил лучший вариант? (Ведь задача довольно типовая). И действительно, нашел пакет с PageView, где необязательно указывать размеры, он адаптивен. Однако указывать dependency в pubspec.yaml не очень хотелось (Ведь он обновлялся в последний раз 22 месяца назад) - поэтому просто открыл репозиторий с этим проектом, вырезал нужный код, обновил устаревшие участки и добавил к себе в проект.
Ссылка на оригинальный проект: https://pub.dev/packages/expandable_page_view
Гитхаб автора: https://github.com/Limbou
Автор проделал хорошую работу.👏👏
Ссылка на мой гитхаб с вырезанным кодом: https://github.com/GereyTatarkhanov/widget_gallery
Теперь нет проблемы с тем, что содержимое может не поместиться в скроллящийся item (ведь фиксированные значения не задаются), а также все items могут иметь абсолютно разные размеры - PageView, а соответственно Carousel будет подстраиваться (Да, я добавил ExpandablePageView в Carousel тоже).
❤2
Такс, я тут прошелся по документации к Firebase Cloud Messaging. И сделал краткую выдержку из наиболее интересных пунктов. Если я ошибся где-то или упустил что-то важное - исправьте в комментариях!
Начнем с определения - Firebase Cloud Messaging (FCM) - это кроссплатформенное решение для отправки сообщений и уведомлений на мобильные устройства. Т.е. с помощью него мы можем настроить отправку push или in-app сообщений на устройства пользователей.
Какие есть фичи:
1. Развертываемые сообщения (Collapsible Messages): FCM позволяет отправлять развертываемые сообщения, которые представляют собой последнее отправленное уведомление. Если устройство не может моментально обработать уведомление (выключен, нет интернета), оно будет обновлено с новым содержанием.
Данная конфигурация подходит, к примеру, для звонков внутри приложения. Ведь они имеют кратковременную актуальность. И после неотвеченного звонка, можно поменять содержание пуш-нотификации.
2. Ограниченные по времени сообщения (Time-to-Live Messages): Разработчики могут настроить время жизни для уведомления, которое определяет, сколько времени уведомление останется активным, прежде чем будет автоматически удалено.
3. Общие для всех платформ сообщения (Cross-platform Messages): С помощью FCM можно отправлять уведомления, которые будут отображаться на всех поддерживаемых платформах (Android, iOS, Web).
4. Уникальные для всех платформ сообщения (Platform-specific Messages): Разработчики могут отправлять уведомления, которые определены только для конкретной платформы (Android, iOS, Web).
5. Аналитика (Analytics): FCM предоставляет различные инструменты аналитики, позволяющие отслеживать успешность отправленных уведомлений, количество устройств, на которые были отправлены уведомления, статистику открытий уведомлений и многое другое.
Это крайне полезная фича для правильной настройки таргетинга. Представьте себе, что пользователь после месяца пользования приложением перестанет им пользоваться, а ему все еще будут отправляться сообщения. А теперь представьте, что таких пользователей (или уже непользователей. Да-да, каламбур.) тысячи. Невыгодно, правда? Так вот, вы можете отследить актуальные токены и отправлять сообщения только им. Это поможет тратить меньше ресурсов.
6. Отправка уведомлений при включенном VPN: FCM поддерживает отправку уведомлений даже при включенном VPN у пользователя. VPN не должен блокировать доставку уведомлений через FCM.
7. In-App сообщения: FCM позволяет отправлять уведомления не только на устройства (Push notifications), но и внутри приложений (In-App Messages). Это удобный способ взаимодействия с пользователями и повышения их вовлеченности.
К примеру, вы можете отправить курьеру, который в данный момент сидит в приложении сообщение о новом заказе и настроить появление окна (или баннера, или вообще на что хватит у вас фантазии) уведомляющем об этом.
Подводя итог, можно сказать, что данный сервис очень мощный и при грамотном использовании можно даже создать классный и быстрый мессенджер!
Начнем с определения - Firebase Cloud Messaging (FCM) - это кроссплатформенное решение для отправки сообщений и уведомлений на мобильные устройства. Т.е. с помощью него мы можем настроить отправку push или in-app сообщений на устройства пользователей.
Какие есть фичи:
1. Развертываемые сообщения (Collapsible Messages): FCM позволяет отправлять развертываемые сообщения, которые представляют собой последнее отправленное уведомление. Если устройство не может моментально обработать уведомление (выключен, нет интернета), оно будет обновлено с новым содержанием.
Данная конфигурация подходит, к примеру, для звонков внутри приложения. Ведь они имеют кратковременную актуальность. И после неотвеченного звонка, можно поменять содержание пуш-нотификации.
2. Ограниченные по времени сообщения (Time-to-Live Messages): Разработчики могут настроить время жизни для уведомления, которое определяет, сколько времени уведомление останется активным, прежде чем будет автоматически удалено.
3. Общие для всех платформ сообщения (Cross-platform Messages): С помощью FCM можно отправлять уведомления, которые будут отображаться на всех поддерживаемых платформах (Android, iOS, Web).
4. Уникальные для всех платформ сообщения (Platform-specific Messages): Разработчики могут отправлять уведомления, которые определены только для конкретной платформы (Android, iOS, Web).
5. Аналитика (Analytics): FCM предоставляет различные инструменты аналитики, позволяющие отслеживать успешность отправленных уведомлений, количество устройств, на которые были отправлены уведомления, статистику открытий уведомлений и многое другое.
Это крайне полезная фича для правильной настройки таргетинга. Представьте себе, что пользователь после месяца пользования приложением перестанет им пользоваться, а ему все еще будут отправляться сообщения. А теперь представьте, что таких пользователей (или уже непользователей. Да-да, каламбур.) тысячи. Невыгодно, правда? Так вот, вы можете отследить актуальные токены и отправлять сообщения только им. Это поможет тратить меньше ресурсов.
6. Отправка уведомлений при включенном VPN: FCM поддерживает отправку уведомлений даже при включенном VPN у пользователя. VPN не должен блокировать доставку уведомлений через FCM.
7. In-App сообщения: FCM позволяет отправлять уведомления не только на устройства (Push notifications), но и внутри приложений (In-App Messages). Это удобный способ взаимодействия с пользователями и повышения их вовлеченности.
К примеру, вы можете отправить курьеру, который в данный момент сидит в приложении сообщение о новом заказе и настроить появление окна (или баннера, или вообще на что хватит у вас фантазии) уведомляющем об этом.
Подводя итог, можно сказать, что данный сервис очень мощный и при грамотном использовании можно даже создать классный и быстрый мессенджер!
🔥1
Народ. Кто ждал новости с Google IO о Flutter.
Если коротко: по словам спикера Flutter Web стал быстрее в 2 раза благодаря wasm.
Все.
И как отступление от темы. Используйте Project IDX, чтобы ios на windows дебажить
Если коротко: по словам спикера Flutter Web стал быстрее в 2 раза благодаря wasm.
Все.
И как отступление от темы. Используйте Project IDX, чтобы ios на windows дебажить
👍1
Как уже известно, ProjectIDX стал для всех доступен. Для тех, кто в танке: это такой облачный IDE, который работает из браузера, с собственными эмуляторами/симуляторами и прочими виртуальными устройствами, включительно Web(Ага, пишем Web в Web'е), который был разработан компанией Google.🫡
И, конечно, он включает в себя интеграцию со всеми актуальными сервисами Google, с такими как Firebase и его Crashlytics, а также AI Gemini (Это конкурент сына маминой подруги в мире ИИ - GPT от OpenAI). Кстати, как можете наблюдать на скриншотах - в РФ его нельзя юзать: санкции там, все дела. We are illegal! 🚫
Я решил его затестить, ну ведь очень интересно было с винды запустить симулятор ios устройства (и не надо мне говорить, что по факту запускается все на удаленном железе, я и сам знаю. Вас проверял..). Так, вот.. Не получилось. Хах!😁 Обо всем по порядку.
Как только зарегистрировался на сайте и создал виртуальное пространство, предварительно указав, что буду разрабатывать проект на фреймворке Flutter (к слову, там стоит самая актуальная версия на момент публикации этого поста: Flutter 3.22 и Dart 3.4.0) - меня встретил VSCode прямо в браузере (Неожиданно очень шустро работающий как для ide внутри браузера). Это тот же самый VSCode, который у тебя прямо сейчас стоит на ПК, т.е. ты можешь его кастомизировать, менять темы, устанавливать extensions (ну плагины...учи английский) и т.д.
Сразу запустились превью с Web и Android, где я затестил дефолтное приложение с текстом "Hello World". Компилируется не долго, я бы даже сказал быстро (опять таки, учитываем, что это все в облаке). Отмечу, что Android эмулятор сильно лагал, а Web вообще заработал только после перезапуска виртуального пространства (пришлось перезапустить idx). Но все работает!
И тут, я пошел переключать устройство, с которого буду запускать код на ios симулятор и вот незадача: Его нет! И в документации тоже ничего об этом не нашел, там инфа только про Web и Android. Тут два варианта: либо ios симуляторы еще не завезли, либо просто я не нашел инфу о том, как его включить (Хотя я искал не только в доках).
Android эмуляторов среди доступных устройств - два. Планшет и смартфон. Также можно по желанию добавить линукс проект (ага, это я нашел).
Еще, как видно на скриншоте, я и со своего смартфона запустил ProjectIDX и заметил интересную штуку: если взаимодействовать с эмулятором (ну дёргать его если.. тыкать там куда-то), то в режиме реального времени это все происходит и на другом устройстве (в моем случае на ноуте), где открыт тот же проект с тем же эмулятором. Похоже оно работает как трансляция 📹, я сильно не вникал.
Итог: ProjectIDX очень крутая и перспективная технология, но пока ещё сыровата. Оно и понятно, ведь ide совсем недавно стало доступно для массового пользователя.🤷♂️
Такие дела...Если кто знает что там с ios, то пишите в комментах.
И, конечно, он включает в себя интеграцию со всеми актуальными сервисами Google, с такими как Firebase и его Crashlytics, а также AI Gemini (Это конкурент сына маминой подруги в мире ИИ - GPT от OpenAI). Кстати, как можете наблюдать на скриншотах - в РФ его нельзя юзать: санкции там, все дела. We are illegal! 🚫
Я решил его затестить, ну ведь очень интересно было с винды запустить симулятор ios устройства (и не надо мне говорить, что по факту запускается все на удаленном железе, я и сам знаю. Вас проверял..). Так, вот.. Не получилось. Хах!😁 Обо всем по порядку.
Как только зарегистрировался на сайте и создал виртуальное пространство, предварительно указав, что буду разрабатывать проект на фреймворке Flutter (к слову, там стоит самая актуальная версия на момент публикации этого поста: Flutter 3.22 и Dart 3.4.0) - меня встретил VSCode прямо в браузере (Неожиданно очень шустро работающий как для ide внутри браузера). Это тот же самый VSCode, который у тебя прямо сейчас стоит на ПК, т.е. ты можешь его кастомизировать, менять темы, устанавливать extensions (ну плагины...учи английский) и т.д.
Сразу запустились превью с Web и Android, где я затестил дефолтное приложение с текстом "Hello World". Компилируется не долго, я бы даже сказал быстро (опять таки, учитываем, что это все в облаке). Отмечу, что Android эмулятор сильно лагал, а Web вообще заработал только после перезапуска виртуального пространства (пришлось перезапустить idx). Но все работает!
И тут, я пошел переключать устройство, с которого буду запускать код на ios симулятор и вот незадача: Его нет! И в документации тоже ничего об этом не нашел, там инфа только про Web и Android. Тут два варианта: либо ios симуляторы еще не завезли, либо просто я не нашел инфу о том, как его включить (Хотя я искал не только в доках).
Android эмуляторов среди доступных устройств - два. Планшет и смартфон. Также можно по желанию добавить линукс проект (ага, это я нашел).
Еще, как видно на скриншоте, я и со своего смартфона запустил ProjectIDX и заметил интересную штуку: если взаимодействовать с эмулятором (ну дёргать его если.. тыкать там куда-то), то в режиме реального времени это все происходит и на другом устройстве (в моем случае на ноуте), где открыт тот же проект с тем же эмулятором. Похоже оно работает как трансляция 📹, я сильно не вникал.
Итог: ProjectIDX очень крутая и перспективная технология, но пока ещё сыровата. Оно и понятно, ведь ide совсем недавно стало доступно для массового пользователя.🤷♂️
Такие дела...Если кто знает что там с ios, то пишите в комментах.
❤2
Как и ожидалось, после появления макросов в Dart - data class себя долго ждать не заставил (Но правда пока не от самой команды Flutter).
Автор библиотеки Bloc уже успел выложить свое решение на pubdev и github:
https://pub.dev/packages/data_class_macro
https://github.com/felangel/data_class
Автор библиотеки Bloc уже успел выложить свое решение на pubdev и github:
https://pub.dev/packages/data_class_macro
https://github.com/felangel/data_class
Dart packages
data_class_macro | Dart package
Experimental support for data classes in Dart using pkg:macros
👍2
На типовой вопрос существует типовой ответ😁
Но думается мне, автор вопроса не то имел ввиду..
https://youtu.be/9x_z-AWK7P0?si=9_t9v0gCSykSQtQE
Но думается мне, автор вопроса не то имел ввиду..
https://youtu.be/9x_z-AWK7P0?si=9_t9v0gCSykSQtQE
😁2
Копался в файле framework.dart и случайно наткнулся на комментарий, где было написано, что:
Объекты BuildContext на самом деле являются объектами Element. Интерфейс BuildContext используется для предотвращения прямого манипулирования объектами Element.
Документация это подтверждает слово в слово.
Ссылка: https://api.flutter.dev/flutter/widgets/BuildContext-class.html
Я почему-то думал, что это разные, но взаимосвязанные вещи, а не, что одно интерфейс для другого.
Объекты BuildContext на самом деле являются объектами Element. Интерфейс BuildContext используется для предотвращения прямого манипулирования объектами Element.
Документация это подтверждает слово в слово.
Ссылка: https://api.flutter.dev/flutter/widgets/BuildContext-class.html
Я почему-то думал, что это разные, но взаимосвязанные вещи, а не, что одно интерфейс для другого.
👍2
Очень часто вижу, что люди БОЯТСЯ показывать свой код другим. У всех сомнения: а можно ли так писать? а это правильно? не будет ли никто надо мной смеяться?
А когда все таки решают показать, сначала следует сопроводительная фраза, что-то по типу: "строго не ругайте за мой колхозный код". Уже все настолько привыкли, что за любой код, который выложили на общее обозрение, им прилетит несколько камней от "опытнейших сеньоров" с указанием того, какое их код днище🕳
Да, есть определенные шаблоны программирования, которых желательно придерживаться. Да, принципы SOLID, DRY, KISS, YAGNI (etc) надо соблюдать насколько это возможно. Да, есть правила и негласные договоренности, которые надо учитывать. Но это НЕ ЗНАЧИТ, ЧТО У ВСЕХ ДОЛЖЕН БЫТЬ ОДИНАКОВЫЙ КОД.
Для каждого частного случая (если это не мега-типовая задача, которая уже миллион раз была решена) могут быть свои уникальные решения. Более того, может быть такое, что ты и твой коллега с другого конца света можете абсолютно разными путями решить одну и ту же проблему и не факт, что у кого-то "более правильный" вариант.
Если ты написал плохой код - ты поймешь, что ты написал плохой код позже. Ты либо сам споткнешься об него; либо прочитаешь статью (документацию) и поймешь как сделать лучше чем есть; либо тебе объяснят более опытные люди (объяснят, а не закидают камнями). Если кто-то скинул тебе стикер с человечком, который бьет себя по лицу, показывая "какой треш" и не аргументирует, то скорее всего он сам не понимает, как делать "правильно".
Изучай паттерны, учи архитектуру, ПОНИМАЙ для чего тебе та или иная архитектура и перестань наконец бояться, что ты неправильно обычный print в коде написал и кто-то тебе об этом скажет.
А когда все таки решают показать, сначала следует сопроводительная фраза, что-то по типу: "строго не ругайте за мой колхозный код". Уже все настолько привыкли, что за любой код, который выложили на общее обозрение, им прилетит несколько камней от "опытнейших сеньоров" с указанием того, какое их код днище🕳
Да, есть определенные шаблоны программирования, которых желательно придерживаться. Да, принципы SOLID, DRY, KISS, YAGNI (etc) надо соблюдать насколько это возможно. Да, есть правила и негласные договоренности, которые надо учитывать. Но это НЕ ЗНАЧИТ, ЧТО У ВСЕХ ДОЛЖЕН БЫТЬ ОДИНАКОВЫЙ КОД.
Для каждого частного случая (если это не мега-типовая задача, которая уже миллион раз была решена) могут быть свои уникальные решения. Более того, может быть такое, что ты и твой коллега с другого конца света можете абсолютно разными путями решить одну и ту же проблему и не факт, что у кого-то "более правильный" вариант.
Если ты написал плохой код - ты поймешь, что ты написал плохой код позже. Ты либо сам споткнешься об него; либо прочитаешь статью (документацию) и поймешь как сделать лучше чем есть; либо тебе объяснят более опытные люди (объяснят, а не закидают камнями). Если кто-то скинул тебе стикер с человечком, который бьет себя по лицу, показывая "какой треш" и не аргументирует, то скорее всего он сам не понимает, как делать "правильно".
Изучай паттерны, учи архитектуру, ПОНИМАЙ для чего тебе та или иная архитектура и перестань наконец бояться, что ты неправильно обычный print в коде написал и кто-то тебе об этом скажет.
🔥3
Народ, копался в Kotlin docs (не, не перехожу на native, просто его тоже знать полезно для Flutter разработчика, кстати) и заметил, что
там есть раздел Kotlin Wasm. Не знаю давно ли они его готовят, но то, что готовят - это факт. Правда пока что Alpha версия.
Даже пример сайта есть на Compose Multiplatform + Kotlin Wasm (по мне так очень корявый пока что). Кликни сюда, чтоб посмотреть.
Если ты не знаешь, что такое WebAssembly (wasm) - можешь прочитать в этой статье.
Напомню, что на прошедшей конференции Google IO команда Flutter тоже представила Flutter wasm (и пока в этой гонке находится впереди), на которую возлагает большие надежды.
В целом, данная технология должна сильно улучшить производительность Flutter Web и помочь сделать выбор в пользу Flutter тем, кто собирается писать web-приложения, а команда Kotlin хотят помешать и забрать себе этот кусок пирога! Ну а как мы знаем, конкуренция это хорошо, это заставит каждую из команд сделать свой продукт лучше!
там есть раздел Kotlin Wasm. Не знаю давно ли они его готовят, но то, что готовят - это факт. Правда пока что Alpha версия.
Даже пример сайта есть на Compose Multiplatform + Kotlin Wasm (по мне так очень корявый пока что). Кликни сюда, чтоб посмотреть.
Если ты не знаешь, что такое WebAssembly (wasm) - можешь прочитать в этой статье.
Напомню, что на прошедшей конференции Google IO команда Flutter тоже представила Flutter wasm (и пока в этой гонке находится впереди), на которую возлагает большие надежды.
В целом, данная технология должна сильно улучшить производительность Flutter Web и помочь сделать выбор в пользу Flutter тем, кто собирается писать web-приложения, а команда Kotlin хотят помешать и забрать себе этот кусок пирога! Ну а как мы знаем, конкуренция это хорошо, это заставит каждую из команд сделать свой продукт лучше!
Kotlin Help
Kotlin/Wasm | Kotlin
👍1
Настраивал FCM и как же меня выбесила политика Apple в плане отправки push-уведомлений🤬
Сделай разрешение такое, дай разрешение в Xcode, добавь сертификат в developer acc, получи ключ с разрешением на отправку push-уведомлений, дай разрешение на разрешение, покажи справку о несудимости и т.п. ЧТО ЭТО ТАКОЕ???
Будто я не пуши собираюсь кидать, а оружием торгую. Почему на Android это можно сделать за 5 минут, а Apple ведет себя как обиженный кондуктор?
Сделай разрешение такое, дай разрешение в Xcode, добавь сертификат в developer acc, получи ключ с разрешением на отправку push-уведомлений, дай разрешение на разрешение, покажи справку о несудимости и т.п. ЧТО ЭТО ТАКОЕ???
Будто я не пуши собираюсь кидать, а оружием торгую. Почему на Android это можно сделать за 5 минут, а Apple ведет себя как обиженный кондуктор?
❤2