Мобильная разработка за неделю #603 (15 — 21 сентября)
В новом дайджесте Swift Runtime и производительность iOS-приложений, вопрос на 16К и полный айсберг Android, проектирование интерфейсов по азиатски, 17 платящих клиентов за час из Tinder, реклама на холодильниках и многое другое. Заходите!
Читать далее
Читать: https://habr.com/ru/articles/949032/
@mobi_dev | Другие наши каналы
В новом дайджесте Swift Runtime и производительность iOS-приложений, вопрос на 16К и полный айсберг Android, проектирование интерфейсов по азиатски, 17 платящих клиентов за час из Tinder, реклама на холодильниках и многое другое. Заходите!
Читать далее
Читать: https://habr.com/ru/articles/949032/
@mobi_dev | Другие наши каналы
👍2
Офлайн-режим в мобильном приложении: зачем он нужен и как его реализовать
Представьте: пользователь открывает ваше приложение в метро, за секунду до въезда в тоннель. Вместо ошибки «Нет соединения» он видит контент, который уже загрузил, или даже продолжает заполнять форму — потому что приложение просто отложит синхронизацию до момента, когда сеть появится.
Это не магия, а продуманный офлайн-режим. В этой статье мы расскажем как реализовать его в приложении на iOS.
Читать далее
Читать: https://habr.com/ru/companies/beget/articles/943730/
@mobi_dev | Другие наши каналы
Представьте: пользователь открывает ваше приложение в метро, за секунду до въезда в тоннель. Вместо ошибки «Нет соединения» он видит контент, который уже загрузил, или даже продолжает заполнять форму — потому что приложение просто отложит синхронизацию до момента, когда сеть появится.
Это не магия, а продуманный офлайн-режим. В этой статье мы расскажем как реализовать его в приложении на iOS.
Читать далее
Читать: https://habr.com/ru/companies/beget/articles/943730/
@mobi_dev | Другие наши каналы
🔥4
Игра
Недельный геймдев: #244 — 21 сентября, 2025
У движка Nau Engine ликвидируют юридическое лицо, продажи игр серии Amnesia превысили пять миллионов копий за 15 лет, продажи No, I’m not a Human превысили 100к копий — за 4 дня после релиза.
— Читать дальше «Недельный геймдев: #244 — 21 сентября, 2025»
Недельный геймдев: #244 — 21 сентября, 2025
У движка Nau Engine ликвидируют юридическое лицо, продажи игр серии Amnesia превысили пять миллионов копий за 15 лет, продажи No, I’m not a Human превысили 100к копий — за 4 дня после релиза.
— Читать дальше «Недельный геймдев: #244 — 21 сентября, 2025»
👍2
Новые подходы в Swift для тестирования: разбор технологии Swift Testing
Тестирование на Swift долгие годы держалось на трех китах: XCTest, сторонние библиотеки и собственная смекалка. Но на WWDC 24 Apple представила новый, современный фреймворк — Swift Testing, который предлагает концептуально новый подход к тестированию.
Меня зовут Кирилл Гусев. Я мобильный разработчик в ОК. В этой статье я расскажу о том, какие возможности предоставляет Swift Testing и как мы планируем их применять в ОК.
Читать далее
Читать: https://habr.com/ru/companies/vk/articles/949260/
@mobi_dev | Другие наши каналы
Тестирование на Swift долгие годы держалось на трех китах: XCTest, сторонние библиотеки и собственная смекалка. Но на WWDC 24 Apple представила новый, современный фреймворк — Swift Testing, который предлагает концептуально новый подход к тестированию.
Меня зовут Кирилл Гусев. Я мобильный разработчик в ОК. В этой статье я расскажу о том, какие возможности предоставляет Swift Testing и как мы планируем их применять в ОК.
Читать далее
Читать: https://habr.com/ru/companies/vk/articles/949260/
@mobi_dev | Другие наши каналы
🔥2
Приложение для сидроделов и пивоваров, ИИ-тренажер для обучения отдела продаж — и ещё 8 российских стартапов
10 новых российских продуктов для подбора и аренды облачных серверов, сбора и обработки прайс‑листов, подбора гидов или туров в странах Средней Азии и многого другого. Битва за «Продукт недели» началась!
Product Radar — здесь каждую неделю публикуются лучшие онлайн-сервисы и железки от русскоязычных команд.
Читать далее
Читать: https://habr.com/ru/companies/productradar/articles/949392/
@mobi_dev | Другие наши каналы
10 новых российских продуктов для подбора и аренды облачных серверов, сбора и обработки прайс‑листов, подбора гидов или туров в странах Средней Азии и многого другого. Битва за «Продукт недели» началась!
Product Radar — здесь каждую неделю публикуются лучшие онлайн-сервисы и железки от русскоязычных команд.
Читать далее
Читать: https://habr.com/ru/companies/productradar/articles/949392/
@mobi_dev | Другие наши каналы
Погружение в JNI: проблемы и решения при взаимодействии между JVM и нативным кодом
Привет! Меня зовут Геннадий Денисов, я руковожу одной из команд разработки мобильного Яндекс Браузера для Android. Недавно в рамках одного проекта мы интегрировали С++‑код в мобильное приложение Браузера. В этой статье я поделюсь основными нюансами работы с Java Native Interface (JNI), инструментами для упрощения разработки и подробностями нашего подхода.
Читать далее
Читать: https://habr.com/ru/companies/yandex/articles/948570/
@mobi_dev | Другие наши каналы
Привет! Меня зовут Геннадий Денисов, я руковожу одной из команд разработки мобильного Яндекс Браузера для Android. Недавно в рамках одного проекта мы интегрировали С++‑код в мобильное приложение Браузера. В этой статье я поделюсь основными нюансами работы с Java Native Interface (JNI), инструментами для упрощения разработки и подробностями нашего подхода.
Читать далее
Читать: https://habr.com/ru/companies/yandex/articles/948570/
@mobi_dev | Другие наши каналы
🔥2
Чем грозит вашему проекту установка пакетов «вслепую»
Доброго дня, читатель! Меня зовут Александр Роут, я фронтенд‑разработчик в Домклик.
В сентябре 2025 года в экосистеме npm произошёл тревожный инцидент: злоумышленники получили доступ к репозиториям нескольких популярных пакетов и внедрили в них вредоносный код. Этот код мог подменять адреса криптокошельков и перехватывать финансовые транзакции.
Эта атака — не первый и не последний случай в истории. Она вновь подняла важный вопрос «Насколько мы можем доверять сотням зависимостей, которые добавляем в свои проекты?» Часто мы устанавливаем пакеты, практически не задумываясь о том, что именно скачиваем и запускаем. Особую опасность представляют postinstall‑скрипты, которые могут выполнять произвольные действия на вашем компьютере сразу после установки.
Читать далее
Читать: https://habr.com/ru/companies/domclick/articles/947800/
@mobi_dev | Другие наши каналы
Доброго дня, читатель! Меня зовут Александр Роут, я фронтенд‑разработчик в Домклик.
В сентябре 2025 года в экосистеме npm произошёл тревожный инцидент: злоумышленники получили доступ к репозиториям нескольких популярных пакетов и внедрили в них вредоносный код. Этот код мог подменять адреса криптокошельков и перехватывать финансовые транзакции.
Эта атака — не первый и не последний случай в истории. Она вновь подняла важный вопрос «Насколько мы можем доверять сотням зависимостей, которые добавляем в свои проекты?» Часто мы устанавливаем пакеты, практически не задумываясь о том, что именно скачиваем и запускаем. Особую опасность представляют postinstall‑скрипты, которые могут выполнять произвольные действия на вашем компьютере сразу после установки.
Читать далее
Читать: https://habr.com/ru/companies/domclick/articles/947800/
@mobi_dev | Другие наши каналы
❤1
Гайд по File Templates: как шарить шаблоны с однотипным кодом
Всем привет! На связи Дима Котиков, ведущий Android-разработчик в Т-Банке. Я все еще люблю разбираться в технологиях, разрабатывать под Android и KMP и пить латте на фундучном молоке :)
Расскажу, как можно шарить File Templates для своей команды, чтобы облегчить жизнь другим и сэкономить немного времени. Причем коллегам ничего самостоятельно не придется настраивать: подтянутый из git-а репозиторий с кодом все сделает сам. Эта статья — бонус к трем предыдущим, в которых я рассказывал, как уменьшить написание boilerplate-кода. Ссылки на них оставлю в конце статьи.
Читать далее
Читать: https://habr.com/ru/companies/tbank/articles/949658/
@mobi_dev | Другие наши каналы
Всем привет! На связи Дима Котиков, ведущий Android-разработчик в Т-Банке. Я все еще люблю разбираться в технологиях, разрабатывать под Android и KMP и пить латте на фундучном молоке :)
Расскажу, как можно шарить File Templates для своей команды, чтобы облегчить жизнь другим и сэкономить немного времени. Причем коллегам ничего самостоятельно не придется настраивать: подтянутый из git-а репозиторий с кодом все сделает сам. Эта статья — бонус к трем предыдущим, в которых я рассказывал, как уменьшить написание boilerplate-кода. Ссылки на них оставлю в конце статьи.
Читать далее
Читать: https://habr.com/ru/companies/tbank/articles/949658/
@mobi_dev | Другие наши каналы
Как поддержать Flutter в своей Библиотеке. Опыт VK ID SDK
Привет! Меня зовут Даниил, я работаю в команде SDK в VK. Одно из направлений, которым занимается наша команда, — разработка SDK для авторизации через сервисы экосистемы VK. Он состоит из нескольких компонентов: авторизации, логина в один клик, шторки для входа с более удобным интерфейсом и поддержкой Mail и OK как провайдеров авторизации.
Мы давно задумывались о поддержке Flutter, поскольку это быстроразвивающаяся платформа, которой уже пользуется много клиентов. Было видно, что поддержка Flutter нужна клиентам, даже на фрилансовых биржах публиковали заказы на поддержку VK ID. Логичным поступком стало сделать официальное решение от VK, чтобы клиентам не приходилось делать одинаковую работу. В этой статье поделюсь опытом поддержки Flutter в нашем SDK. Статья будет полезна любому разработчику, который хочет добавить поддержку Flutter в свою библиотеку. Материал рассчитан на разработчиков, которые ничего не знают о Flutter и будут разбираться с ним с нуля. Приведены примеры кода только под Android, поскольку под iOS всё делается аналогично.
Читать далее
Читать: https://habr.com/ru/companies/vk/articles/948642/
@mobi_dev | Другие наши каналы
Привет! Меня зовут Даниил, я работаю в команде SDK в VK. Одно из направлений, которым занимается наша команда, — разработка SDK для авторизации через сервисы экосистемы VK. Он состоит из нескольких компонентов: авторизации, логина в один клик, шторки для входа с более удобным интерфейсом и поддержкой Mail и OK как провайдеров авторизации.
Мы давно задумывались о поддержке Flutter, поскольку это быстроразвивающаяся платформа, которой уже пользуется много клиентов. Было видно, что поддержка Flutter нужна клиентам, даже на фрилансовых биржах публиковали заказы на поддержку VK ID. Логичным поступком стало сделать официальное решение от VK, чтобы клиентам не приходилось делать одинаковую работу. В этой статье поделюсь опытом поддержки Flutter в нашем SDK. Статья будет полезна любому разработчику, который хочет добавить поддержку Flutter в свою библиотеку. Материал рассчитан на разработчиков, которые ничего не знают о Flutter и будут разбираться с ним с нуля. Приведены примеры кода только под Android, поскольку под iOS всё делается аналогично.
Читать далее
Читать: https://habr.com/ru/companies/vk/articles/948642/
@mobi_dev | Другие наши каналы
❤5
Forwarded from Типичный программист
Парень решил отсеять нейрорекрутёров и добавил в профиль LinkedIn промпт, которых заставлял их отправлять рецепт пирога вместо предложений о работе
В итоге рецепт пирога пришёл, а вот офферов пока не завезли
😁 😁 😁
В итоге рецепт пирога пришёл, а вот офферов пока не завезли
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5🤣3❤1
Мессенджер
Ваш код украли: как защитить права на IT-продукт и не потерять миллионы
Трудовой договор не даёт права на код вашего продукта! Юрист Сергей Соколов простыми словами объясняет, как юридически закрепить права на ПО за компанией, а не за разработчиком. Узнайте, какие документы подготовить, чтобы ваш софт не «уплыл» к конкурентам.
— Читать дальше «Ваш код украли: как защитить права на IT-продукт и не потерять миллионы»
Ваш код украли: как защитить права на IT-продукт и не потерять миллионы
Трудовой договор не даёт права на код вашего продукта! Юрист Сергей Соколов простыми словами объясняет, как юридически закрепить права на ПО за компанией, а не за разработчиком. Узнайте, какие документы подготовить, чтобы ваш софт не «уплыл» к конкурентам.
— Читать дальше «Ваш код украли: как защитить права на IT-продукт и не потерять миллионы»
Миграция на SPM: что мы выиграли и что потеряли
Спойлер: сократили размер приложений на 44% и ускорили их запуск в среднем на 51%.
Привет, Хабр! Меня зовут Владислав Сединкин, я занимаюсь iOS 10 лет и последние 2 года работаю в мобильной Core-команде Туту. В этом году мы решили сменить менеджер зависимостей и мигрировать с CocoaPods на SPM. Результаты оправдали ожидания, хотя и сложности на этом пути, конечно, были. В статье расскажу про проблемы, с которыми мы столкнулись в процессе, и предупрежу, на что стоит обратить внимание, чтобы не повторить наши ошибки.
Читать далее
Читать: https://habr.com/ru/companies/tuturu/articles/948276/
@mobi_dev | Другие наши каналы
Спойлер: сократили размер приложений на 44% и ускорили их запуск в среднем на 51%.
Привет, Хабр! Меня зовут Владислав Сединкин, я занимаюсь iOS 10 лет и последние 2 года работаю в мобильной Core-команде Туту. В этом году мы решили сменить менеджер зависимостей и мигрировать с CocoaPods на SPM. Результаты оправдали ожидания, хотя и сложности на этом пути, конечно, были. В статье расскажу про проблемы, с которыми мы столкнулись в процессе, и предупрежу, на что стоит обратить внимание, чтобы не повторить наши ошибки.
Читать далее
Читать: https://habr.com/ru/companies/tuturu/articles/948276/
@mobi_dev | Другие наши каналы
Прорывная идея для существенного улучшения жизни незрячих: предложение запустить в массы новый интерфейс
Картинка: prostooleh, freepik.com
Есть один очень интересный вызов для разработчиков робототехники (или тех, кто хотел бы ими стать), который почему-то на данный момент большинство начинаний обходят стороной — управление массивом приводов. Ещё одна категория людей, кому будет явно интересна эта тема – разработчики мобильных приложений.
Задача эта весьма простая и сложная одновременно, так как массив приводов требуется для создания «управляемых выпуклостей», предназначенный для чтения незрячими людьми…
Остаться в темноте... Это страшно даже представить, а ведь множество людей так и живут, и это для них суровая реальность...
Хорошо, если слух есть, а если его нет... Сложно представить, насколько осложняется коммуникация, когда пропадает зрительная составляющая в мире, где так много информации передаётся в визуальном, в частности текстовом, формате. По сути, человек остаётся изолированным один на один...
Ниже будет некоторый обзор темы, после чего, мы плавно придём к ОЧЕНЬ интересной (на мой взгляд) идее, думаю, что будет интересно!
Читать далее
Читать: https://habr.com/ru/companies/ruvds/articles/949000/
@mobi_dev | Другие наши каналы
Картинка: prostooleh, freepik.com
Есть один очень интересный вызов для разработчиков робототехники (или тех, кто хотел бы ими стать), который почему-то на данный момент большинство начинаний обходят стороной — управление массивом приводов. Ещё одна категория людей, кому будет явно интересна эта тема – разработчики мобильных приложений.
Задача эта весьма простая и сложная одновременно, так как массив приводов требуется для создания «управляемых выпуклостей», предназначенный для чтения незрячими людьми…
Остаться в темноте... Это страшно даже представить, а ведь множество людей так и живут, и это для них суровая реальность...
Хорошо, если слух есть, а если его нет... Сложно представить, насколько осложняется коммуникация, когда пропадает зрительная составляющая в мире, где так много информации передаётся в визуальном, в частности текстовом, формате. По сути, человек остаётся изолированным один на один...
Ниже будет некоторый обзор темы, после чего, мы плавно придём к ОЧЕНЬ интересной (на мой взгляд) идее, думаю, что будет интересно!
Читать далее
Читать: https://habr.com/ru/companies/ruvds/articles/949000/
@mobi_dev | Другие наши каналы
👍3❤1🔥1
Быстрый старт в CI на примере Flutter (под банальный Android и интересную «Аврору»)
Flutter продолжает набирать популярность. Фреймворк предлагает низкий порог входа и возможность собрать приложение практически под любую платформу. Если вы хотите выпускать приложения стабильнее, чаще, быстрее, да еще и под несколько платформ и одним коммитом, то эта статья для вас.
Читать далее
Читать: https://habr.com/ru/companies/selectel/articles/950436/
@mobi_dev | Другие наши каналы
Flutter продолжает набирать популярность. Фреймворк предлагает низкий порог входа и возможность собрать приложение практически под любую платформу. Если вы хотите выпускать приложения стабильнее, чаще, быстрее, да еще и под несколько платформ и одним коммитом, то эта статья для вас.
Читать далее
Читать: https://habr.com/ru/companies/selectel/articles/950436/
@mobi_dev | Другие наши каналы
👎2
[Перевод] Используйте простейшие рабочие решения
Занимаясь проектированием систем ПО, идите самым простым путём из возможных.
Причём эту рекомендацию можно применять на удивление широко. Я искренне верю, что так можно делать всегда. Эта техника подходит для исправления багов, обслуживания имеющихся систем и проектирования новых.
Многие инженеры, продумывая дизайн системы, представляют себе некий её «идеал»: что-то стройное, практически бесконечно масштабируемое, удобно распространяемое и так далее. Я же считаю, что это абсолютно ошибочный подход к проектированию ПО. Напротив, нужно вложить всё это время в глубокий анализ имеющейся системы, а затем реализовать простейшее рабочее решение.
Читать далее
Читать: https://habr.com/ru/companies/ruvds/articles/949970/
@mobi_dev | Другие наши каналы
Занимаясь проектированием систем ПО, идите самым простым путём из возможных.
Причём эту рекомендацию можно применять на удивление широко. Я искренне верю, что так можно делать всегда. Эта техника подходит для исправления багов, обслуживания имеющихся систем и проектирования новых.
Многие инженеры, продумывая дизайн системы, представляют себе некий её «идеал»: что-то стройное, практически бесконечно масштабируемое, удобно распространяемое и так далее. Я же считаю, что это абсолютно ошибочный подход к проектированию ПО. Напротив, нужно вложить всё это время в глубокий анализ имеющейся системы, а затем реализовать простейшее рабочее решение.
Читать далее
Читать: https://habr.com/ru/companies/ruvds/articles/949970/
@mobi_dev | Другие наши каналы
💯3👍2
Как требование к навигации повлияло на архитектуру мобильного приложени
Привет! Меня зовут Никита и я Android-разработчик. Сегодня я хочу рассказать, как нам вместе с командой Nexign удалось реализовать сборку бизнес-сценариев в приложении для регистрации новых клиентов с особыми требованиями по навигации.
Читать далее
Читать: https://habr.com/ru/companies/nexign/articles/951176/
@mobi_dev | Другие наши каналы
Привет! Меня зовут Никита и я Android-разработчик. Сегодня я хочу рассказать, как нам вместе с командой Nexign удалось реализовать сборку бизнес-сценариев в приложении для регистрации новых клиентов с особыми требованиями по навигации.
Читать далее
Читать: https://habr.com/ru/companies/nexign/articles/951176/
@mobi_dev | Другие наши каналы
🔥4
Мобильная разработка за неделю #604 (22 — 28 сентября)
В этом выпуске рассуждения о месте Rust в iOS и MAX в Android, погружение в JNI и опыт Shopify с React Native, архитектурный сдвиг оффлайна, быстрый старт в CI, мобильный рынок Турции, продукты для бумеров и многое другое. Заходите!
Читать далее
Читать: https://habr.com/ru/articles/951358/
@mobi_dev | Другие наши каналы
В этом выпуске рассуждения о месте Rust в iOS и MAX в Android, погружение в JNI и опыт Shopify с React Native, архитектурный сдвиг оффлайна, быстрый старт в CI, мобильный рынок Турции, продукты для бумеров и многое другое. Заходите!
Читать далее
Читать: https://habr.com/ru/articles/951358/
@mobi_dev | Другие наши каналы
Массивы в Swift
Привет, Хабр! В прошлой статье мы поговорили о строках в Swift - об их особенностях, внутреннем устройстве и подводных камнях. И я подумал: ведь строки это по сути - коллекции. А какая главная и самая популярная коллекция в Swift? Конечно же, массивы. Их используют повсюду. Но вы когда-нибудь задумывались, как они устроены внутри? Давайте погрузимся внутрь массивов и посмотрим, что они из себя представляют.
Читать далее
Читать: https://habr.com/ru/articles/951398/
@mobi_dev | Другие наши каналы
Привет, Хабр! В прошлой статье мы поговорили о строках в Swift - об их особенностях, внутреннем устройстве и подводных камнях. И я подумал: ведь строки это по сути - коллекции. А какая главная и самая популярная коллекция в Swift? Конечно же, массивы. Их используют повсюду. Но вы когда-нибудь задумывались, как они устроены внутри? Давайте погрузимся внутрь массивов и посмотрим, что они из себя представляют.
Читать далее
Читать: https://habr.com/ru/articles/951398/
@mobi_dev | Другие наши каналы
🔥4👍2🤨2
Верификация разработчиков Android по паспорту
Отображение публикации в ленте:
Текст в ленте: 25 августа 2025 года компания Google объявила о «новом уровне безопасности для сертифицированных устройств Android». Для защиты против вредоносного ПО принято решение ввести обязательную верификацию разработчиков, которые подписывают Android-приложения (здесь и далее имеются в виду приложения для сертифицированных устройств с предустановленными программами Google, производители таких устройств перечислены здесь).
В данный момент все все APK-файлы в Android должны быть подписаны цифровой подписью с помощью сертификата, прежде чем будут установлены на устройство или обновлены. В будущем, что
Читать далее
Читать: https://habr.com/ru/companies/globalsign/articles/951460/
@mobi_dev | Другие наши каналы
Отображение публикации в ленте:
Текст в ленте: 25 августа 2025 года компания Google объявила о «новом уровне безопасности для сертифицированных устройств Android». Для защиты против вредоносного ПО принято решение ввести обязательную верификацию разработчиков, которые подписывают Android-приложения (здесь и далее имеются в виду приложения для сертифицированных устройств с предустановленными программами Google, производители таких устройств перечислены здесь).
В данный момент все все APK-файлы в Android должны быть подписаны цифровой подписью с помощью сертификата, прежде чем будут установлены на устройство или обновлены. В будущем, что
Читать далее
Читать: https://habr.com/ru/companies/globalsign/articles/951460/
@mobi_dev | Другие наши каналы
ИИ-поиск в 2ГИС: как учим нейросети понимать настроение, фото и смыслы
Поиск — одна из ключевых функций в 2ГИС. Он помогает миллионам пользователей каждый день находить нужные места в городе. Долгое время мы опирались на классические методы: морфологию, справочник организаций, геопозицию и популярность объектов. Это позволяло покрывать множество сценариев, но со временем стало понятно — этого недостаточно.
Пользователи хотят искать так, как думают: по настроению, по смыслу, или вообще без слов — по фотографии блюда или интерьера. Мы решили переосмыслить подход к поиску. В этой статье рассказываем, как мы решали три задачи:
1. как понять атмосферу заведения и добавили новый атрибут «вайб-фильтры»;
2. как находить похожие места по изображениям и сделали поиск по фото.
3. как дать пользователю возможность искать «по смыслу» и реализовали ИИ-поиск.
Читать далее
Читать: https://habr.com/ru/companies/2gis/articles/951008/
@mobi_dev | Другие наши каналы
Поиск — одна из ключевых функций в 2ГИС. Он помогает миллионам пользователей каждый день находить нужные места в городе. Долгое время мы опирались на классические методы: морфологию, справочник организаций, геопозицию и популярность объектов. Это позволяло покрывать множество сценариев, но со временем стало понятно — этого недостаточно.
Пользователи хотят искать так, как думают: по настроению, по смыслу, или вообще без слов — по фотографии блюда или интерьера. Мы решили переосмыслить подход к поиску. В этой статье рассказываем, как мы решали три задачи:
1. как понять атмосферу заведения и добавили новый атрибут «вайб-фильтры»;
2. как находить похожие места по изображениям и сделали поиск по фото.
3. как дать пользователю возможность искать «по смыслу» и реализовали ИИ-поиск.
Читать далее
Читать: https://habr.com/ru/companies/2gis/articles/951008/
@mobi_dev | Другие наши каналы