Мобильная разработка – Telegram
Мобильная разработка
13.9K subscribers
866 photos
237 videos
2.96K links
Актуальное по мобильной разработке — Android, iOS, кроссплатформа

Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/oVBP
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Что такое edge-to-edge и как работать с WindowInsets

Режим edge-to-edge используется, чтобы отобразить приложение на всей видимой поверхности дисплея. Для реализации нужно изменить цвет системного UI, сделать запрос на отрисовку приложения под заданный UI и устранить визуальные конфликты.

В этой статье рассматривается, как реализовать edge-to-edge с примерами на View и Jectpack Compose:

https://habr.com/ru/company/kts/blog/687310/

#android
👍10
Интеграция Flutter в нативный Android-проект

Если вы хотите делать проект под Android и использовать Flutter, то вам не обойтись без интеграции. Для это нужно создать Flutter-модуль, добавить его в зависимости Gradle и реализовать FlutterActivity, чтобы запустить проект.

Подробные шаги по импорту и реализации — https://tprg.ru/f8z0

#flutter #android
👍12💩2
Шпаргалка по техническому интервью для iOS разработчика

Недавно мы рассказывали о ресурсах для подготовки к собеседованию для Android-разработчика. Если вы готовитесь к интервью на iOS, то этот репозиторий поможет проверить ваши знания по алгоритмам, БД, Objective-C, Swift и другим темам: https://tprg.ru/kTZu

Некоторые темы без обновлений, но в проекте также доступны карточки на Quizlet по всем вопросам для быстрого запоминания:

https://quizlet.com/serg_tsogtbaatar/folders/ios-interviews/sets

#ios
👍7
This media is not supported in your browser
VIEW IN TELEGRAM
Изучаем Jetpack Compose на примере приложения по поиску собак из приюта

Adopty — это приложение для усыновления собак, созданное на Kotlin для демонстрации пользовательского интерфейса с помощью Jetpack Compose. В нём используются популярные инструменты и лучшие практики Android-разработки. Также начинающие разработчики могут на практике изучить, как работать с Hilt, Retrofit, Accompanist и Coil.

Репозиторий: https://github.com/2307vivek/Adopty

#android
🐳14👍10🔥1😢1
Инструменты для снятия логов в Android и iOS

В этом пошаговом руководстве рассматривается, как:

— перевести устройство в режим отладки и читать логи с помощью Logcat и SDK Platform Tools,
— выгрузить логи с самого устройства, используя Android Debug Bridge,
— установить xCode и использовать инструмент Simulator,
— снимать логи с устройства с помощью раздела Devices and Simulators,
— работать с утилитой iMazing на Windows.

Подробнее: https://tprg.ru/zsZ5

#android #ios
👍6
Серия статей о диплинках на Android

Наверняка вы знакомы с концепцией deeplink — гиперссылка, которая позволяет перенаправить пользователя с одного веб-сайта на конкретную страницу. В мобильных приложениях диплинки работают немного иначе — это URL, который ещё и открывает приложение, если оно установлено на устройстве.

В этой серии статей разбираются типы deeplink, особенности работы с такими ссылками на Android и популярные проблемы, с которыми может столкнуться разработчик, например: URL перестал работать или не открывается в браузерах.

Часть 1: https://tprg.ru/aIJt
Часть 2: https://tprg.ru/OmSz
Часть 3: https://tprg.ru/HRgW

#android
👍7
Реализация гистограммы с помощью SwiftUI Charts в iOS 16

На WWDC 2022 Apple представила SwiftUI Charts — фреймворк для преобразования данных в графики.

В этом пошаговом руководстве показано, как добавить простой шаблон диаграммы и настроить его в приложение на iOS 16:

https://tprg.ru/LjtI

#ios
👍4
Oracle, остановись! Вышла версия Java 19

Java 18 вышла только в марте, а Oracle уже подготовил новый релиз. Какие нового?

— Изменения в Pattern Matching для switch (это уже третье preview) и паттерн записей.
— Ввели новую абстракцию потоков — Virtual Threads. Это легковесные потоки, которые схожи с корутинами.
— Поддержка Linux/RISC-V Port.
— Новый API для Structured Concurrency.
— Векторные API всё ещё в инкубационном статусе.

Больших изменений, которые так обещали, не наблюдается.

#java
👍13💩8🔥2
Дорожная карта для Android-разработчиков на 2022 год

Кроме roadmap, команда Stream выпустила статьи, в которых объясняются концепции, указанные в дорожной карте: компоненты, навигация в приложение, паттерны и т.д.

Почитать гайды и скачать полный roadmap можно здесь:

https://github.com/skydoves/android-developer-roadmap

#android
👎16👍2🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Сколько стоит дизайн мобильного приложения?

Белорусская компания провела неофициальное исследование по местному IT-рынку. Задача была получить цену за полный цикл разработки: от веб-дизайна и макетов до приложений на iOS и Android.

Полученные офферы раздели на 3 категории и указали среднюю стоимость проекта:

https://tprg.ru/Hc3K

Если вам интересно узнать о данных в других регионах (Австралия, США, Великобритания и т.д.), то подробнее — в статье: https://tprg.ru/ZERv

#ios #android
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Работа со списками во Flutter-приложениях

Создать простой статический список в приложение несложно, но задача усложняется, если нужно реализовать список из самостоятельно обновляемых записей или с ссылками на другие записи.

В этой статье рассматривается, как осуществлять в списках функции асинхронной загрузки, фильтрации и актуализации данных. Также автор показывает на примере собственной библиотеки, как можно упростить создание контроллеров для управления списками:

Часть 1: https://habr.com/ru/post/656297/
Часть 2: https://habr.com/ru/post/688864/

#flutter
💩7👍5🤔1
Пример реализации Dynamic Island и ActivityKit

Dynamic Island используется для отображения обновлений в текущей задаче. Некоторым крупным компаниям Apple предоставила инструменты для реализации динамического острова до выпуска официальных API: WhatsApp, Pandora, Amazon Music и другим.

Например, в Spotify с помощью Dynamic Island отображаются элементы управления музыкой, Uber отображает профиль водителя и время прибытия.

Если вам интересно, как реализовать Dynamic Island, то в этом руководстве подробно разбираются ActivityAttributes, Live Activity и сам виджет:

https://tprg.ru/JxwG

Спойлер: Dynamic Island несложно настроить т.к. большую часть работы за нас делает iOS.

#ios
👍3
ExKeyMo — кастомизируем раскладку внешней клавиатуры на Android без root

Существует несколько способов настройки внешней клавиатуры на Android:
— установка сторонней клавиатуры, например, External Keyboard Helper Pro,
— добавление kl или kcm файлов,
— установка приложения, которое позволяет добавить дополнительные клавиатурные раскладки.

Если вы выбрали третий вариант, но нет желания заморачиваться со сборкой, то ExKeyMo может значительно упростить задачу. Это веб-сервис, с помощью которого можно получить готовое Android-приложение со встроенными раскладками. Подробнее об ExKeyM и его реализации — в статье:

https://habr.com/ru/post/689370/

#android
👍3
Сборка на последней версии iOS без обновлений в Xcode

Нет желания обновлять Xcode до последней версии? Автор статьи рассказал о простом способе, как собрать приложение на устройстве, которое работает на последней версии iOS, не обновляя Xcode:

https://tprg.ru/KsOC

Спойлер: решение в два действия

#ios
👍14
Корутины изнутри: как выглядит процесс создания корутин?

Наверняка вы уже знаете, что такое корутины и используется их в проекте, но как они создаются?

В этой статье подробно разбирается процесс создания корутин от launch() до invokeSuspend(), а также анализ байт-кода на указанных примерах:

https://tprg.ru/xUmA

#android #kotlin
👍8
Как загрузить и кэшировать изображение без использования библиотек?

Именно такая задача была задана автору статьи в качестве теста при приёме на работу. Пример решения:

— добавить android.permission.INTERNET в manifest файл и зависимости корутин в проект,
— создать CachingUtil с функциями:
1. getBitmapFromURL, которая загружает изображение с URL-адреса.
2. storeBitmap — эта функция будет кэшировать изображение в виде файла и сохранять его во внутреннем хранилище.
3. loadBitmap — для получения изображения из хранилища.
— реализовать Main Activity, в котором проверяется, существует или нет кэшированное изображение для отображения.

Источник: https://tprg.ru/WsTi

Репозиторий: https://github.com/osamaalek/load-and-caching-image

Как бы вы решили эту задачу?

#android
👍14💩4🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
SwiftUI Spring — примеры анимаций в SwiftUI

В этом репозитории собраны интересные варианты анимаций Spring, а также примеры их реализации:

https://github.com/GetStream/swiftui-spring-animations

#ios #swiftui
👍7🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Как реализовать всплывающие окна на Flutter карте

Во Flutter есть плагин flutter_map_marker_popup, который позволяет добавлять всплывающие окна на маркеры положения на карте. Также в плагине есть методы для отображения/скрытия всплывающих окон. Marker_popup работает с Flutter_map, поэтому для работы с Яндекс.Карты или Google Maps он не подойдет.

В этой статье рассматривается, как добавить Flutter_map в проект, настроить маркеры и отслеживать нажатие по ним:

https://habr.com/ru/post/689578/

#flutter
👍6❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Какие изменения коснулись системного Back в Android 13?

Начиная с Android 13, метод onBackPressed() считается устаревшим. Одной из главных причин таких изменений стал новый подход «predictive back gesture».

По сути, это жест назад, который показывает превью — куда переходит пользователь перед самим переходом обратно. С учётом нововведений в OnBackPressedDispatcher появился вызов OnBackInvokedCallback.

В этой статье рассматривается, как заменить устаревшую функцию onBackPressed() на OnBackPressedCallback:

https://tprg.ru/4A8N

#android
👍16🤔1💩1
Можно ли автоматизировать процесс обнаружения регрессии размера Android-приложений?

По данным Google, пользователи все ещё избегают загрузки больших приложений, особенно в странах, где действуют тарифы с оплатой за каждый байт. Также компания советует уменьшить размер приложения, если это возможно. Однако как отслеживать процесс оптимизации?

В этой серии статей рассматривается, как проверить регрессию размера приложения на CI в development ветке, в pull request и максимально автоматизировать этот процесс:

Часть 1: https://tprg.ru/B1vh
Часть 2: https://tprg.ru/pSTk

#android
👍5💩1
This media is not supported in your browser
VIEW IN TELEGRAM
Проблемы многопоточности: обнаружение deadlocks

Самый просто пример взаимоблокировки в Swift — вызов метода sync на главном потоке. В таких случаях приложение перестаёт отвечать на запросы и, как может показаться, самым простым решением является перезапуск приложения.

Такие функции, как actors, могут снизить количество дедлоков, но не решают проблему до конца. В этой статье рассматриваются основные причины взаимоблокировок, способы их обнаружения в Xcode, а также методы решения этой проблемы:

https://www.avanderlee.com/swift/deadlocks-detecting-solving/

#ios
👍6