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

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

Регистрация в перечне РКН: https://tprg.ru/oVBP
Download Telegram
Ускоренная сборка с помощью Kotlin Symbol Processing

Kotlin Symbol Processing (KSP) — это упрощённый API для разработки легковесных плагинов компиляции и процессоров аннотаций. KSP похож на Kotlin Annotation Processing Tool, но работает быстрее.

В статье рассматривается реализация KSP с использованием аннотаций, SymbolProcessor, Resolver и KotlinPoet:

https://tprg.ru/OgZQ

#kotlin #android
👍4💩21
This media is not supported in your browser
VIEW IN TELEGRAM
Объясняем Kotlin Multiplatform на крестиках-ноликах

KMM позволяет разработчикам объединить всю бизнес-логику в единые модули и запускать один и тот же код на разных платформах. За последние несколько лет эту модель обсуждают всё чаще.

Разработчик Тихон Устинов рассказал о плюсах и минусах работы с KMM в проекте, а также на примере создания игры «крестики-нолики» для Android, iOS и JS продемонстрировал, как применять KMM:

https://habr.com/ru/company/rostelecom/blog/682160/

#kmm #android #ios
🔥14👍3💩1
Повышаем производительность приложения с Baseline Profile

Baseline profile — это классы и методы, которые заранее скомпилированы и установлены вместе с приложением.
Частичная компиляция позволяет ускорить время запуска и производительность.

В отличие от ART Cloud Profile, Baseline profile создаётся во время сборки, поэтому его легче протестировать. Для генерации данного профиля можно использовать библиотеку Macrobenchmark.

Подробнее в статье: https://tprg.ru/6DHA

#android
Oбновлениe в библиотеках Jetpack

WebKit 1.5: заменили setForceDark и setForceDarkStrategy API на setAlgorithmicDarkeningAllowed из WebSettingsCompat,
Compose Runtime 1.3: в CompositionData был добавлен метод find,
Room 2.5: добавлена ​​новая аннотация Upsert для обновления существующей записи или создания новой,
Sqlite Version 2.3: androidx.sqlite переписали с Java на Kotlin.

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

#android
👍18
Danger: автоматизируем ревью на CI

Плагин Danger запускается во время процесса CI и показывает все ошибки сборки, предупреждения или результаты UI тестов, помогая разработчику не писать однотипные комментарии о кодстайле и ошибках.

Команда из Lamoda уже используют Danger в своих проектах, чтобы упростить ревью пул-реквестов. Разработчик Татьяна Родионова поделилась опытом настройки Danger и рассказала с какими сложностями она столкнулась:

https://habr.com/ru/company/lamoda/blog/681564/

#android
👍3
Подборка актуальных вакансий

Android-разработчик
Где: Удалённо
Опыт: от 2 лет

Старший Android-разработчик
Где: Москва
Опыт: от 3 лет

Senior Android-разработчик
Где: Москва, можно удалённо
Опыт: от 3 лет

iOS-разработчик
Где: удалённо
Опыт: можно без опыта

iOS-разработчик
Где: Москва, Санкт-Петербург, Казань, Пермь, можно удалённо
Опыт: от 2 лет

Middle iOS-разработчик
Где: Москва
Опыт: от 3 лет

Senior iOS-разработчик
Где: Москва
Опыт: от 3 лет

#вакансии #работа
👎6👍3
Повторяем алгоритмы сортировки на практике в диаграммах Swift

В этом видеоуроке показано, как использовать Swift Charts, на примере реализации и визуализации различных алгоритмов сортировки:

https://youtu.be/UCSXF741iHI

#swiftui
👍6👎1
Вышла предварительная версия Cross device SDK для разработчиков

Cross device SDK анонсировали ещё на Google I/О. Основная функциональность данной версии: обнаружение устройств, безопасное соединение между устройствами, поддержка сессии на нескольких устройствах.

По сути, этот пакет SDK берёт на себя всю работу с протоколами обнаружения устройств, аутентификации и подключения.

Детальнее: https://tprg.ru/UKB5

#android
👍13🔥1
Как загрузить файл с помощью Retrofit

Библиотека Retrofit используется для работы с REST API и отправки запросов на удалённый сервер в Android.

Этот видеоурок поможет разобраться начинающим, как загружать файл на сервер:

https://youtu.be/fEYhQOUe0g0

#android
👍173
This media is not supported in your browser
VIEW IN TELEGRAM
Как обнаружить утечки памяти в Android-приложениях

Утечки памяти впустую тратят ресурсы приложения и рано или поздно приведут к исключению OutOfMemory. Для их обнаружения часто используется библиотека LeakCanary или Memory Profiler в Android Studio.

LeakCanary проводит анализ на наличие утечек памяти и отправляет уведомление. После нажатия на уведомление LeakCanary сбрасывает heap и предоставляет данные “Leak trace” уже в журнале или в самом приложение LeakCanary.

Разбираемся с причиной возникновения данной проблемы и LeakCanary в статье:

https://tprg.ru/yEWu

#android
🔥10🤔4👍3💩3
Flutter плагин для создания скрин-листов из видео

video_thumbnail — это плагин для видео файлов и видео ссылок, который позволяет создавать и сохранять превью.

С его помощь можно управлять форматом, разрешением и качеством изображения без дополнительных расчётов. Данный плагин легко установить, добавив video_thumbnail в качестве зависимости в pubspec.yaml.

Репозиторий: https://github.com/arjun-c-369/video_thumbnail?ref=flutterawesome.com

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

#flutter
👍8
Создаём простой Chat App на SwiftUI

В этом практическом гайде автор показывает, как с нуля создать чат-приложение и подключить его к серверу с помощью MirrorFly Chat SDK: https://tprg.ru/85yb

Репозиторий: https://github.com/MirrorFly/MirrorFly-UIKit-iOS

#ios #swiftui
👍10
Как настроить разрешения уведомлений на Android

Вероятно, вы уже знакомы с новым Runtime Permission в Android 13 для запроса разрешения на показ уведомлений. Однако данное изменение затронуло ещё все предыдущие версии. Для targetSdkVersion 32 и ниже, пользователю будет предложено разрешить или запретить отправку уведомлений при первом открытии приложения.

В этой статье рассказывается, как реализовать уведомления и сохранить показатель отказов минимальным с учетом изменений:

https://tprg.ru/0chB

#android
👍12
Dribbble идеи UI дизайна

Для разработки нового дизайна приложения порой не хватает идей. На Dribbble можно найти примеры дизайна пользовательских интерфейсов для вдохновения. Тематика совершенно разная, поэтому, возможно, вы подчеркнёте что-то для себя:

— Android : https://dribbble.com/search/android
— iOS: https://dribbble.com/search/ios

#android #ios
20👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация watchdog на iOS

В iOS используется сторожевой таймер, который отслеживает и завершает работу приложений, не отвечающих на запросы. Если приложение долго блокирует основной поток, система его убивает.

Код 0x8badf00d в Crash Log помогает определить, почему произошло завершение работы. Однако не всегда понятно, что вызвало в самом приложение эту ошибку. Чтобы решить эту проблему, можно написать собственный watchdog и с помощью логов найти причину блокировки основных потоков.

В этой статье рассматривается, как c помощью класса WatchdogRunLoopObserver и CFRunLoopObserver можно отслеживать сбои в приложении:

https://tprg.ru/Hb6k

#ios
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Какие вопросы задать работодателю Android-разработчику?

Собеседование — это диалог. После технического интервью лучше обсудить условия работы, чтобы на самых ранних этапах понять, подходит ли вам компания или нет.

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

https://habr.com/ru/company/hh/blog/663266/

#android
9👍2
Flutter: реализация Redux с Elementary

Elementary — это архитектурный пакет для написания приложения по правилам Clean Architecture, основанный на паттерне MVVM. С помощью связки Elementary и Redux можно отделить бизнес-логику от логики отображения и легко расширять функциональность проекта.

Чтобы показать, как работает связка Redux+Elementary, разработчики из Surf реализовали простое приложение, которое выбирает случайные изображения животных. Через screen-WidgetModel-model активируется механизм взаимодействия с Redux. Т.к. чистый Redux не может работать с асинхронностью, то для обработки сетевых запросов автор использовал redux_epics в качестве middleware-составляющей.

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

#flutter
👍43
Облако Xcode теперь ещё и с подпиской

Владельцы учётной записи Apple Developer Program теперь могут покупать подписки на Xcode Cloud.

Один из четырех планов подписки (25 вычислительных часов в месяц) можно использовать бесплатно до декабря 2023 года.

Вычислительный час — это час времени, используемый для выполнения определенной задачи в облаке. Например, тестирование или сборка приложения.

Подробнее: https://developer.apple.com/xcode-cloud/get-started/

#ios
👍3
Jetpack Compose для начинающих

В августе вышло обновление по изучению JetPack Compose. Пакет состоит из 6 тем с уроками по архитектуре, Layout, анимации и т.д.

В конце каждой темы вас ожидает квиз на закрепление знаний.

Ссылка: https://developer.android.com/courses/jetpack-compose/course

Если вы уже проходили этот курс, поделитесь своим мнением.

#compose #android
👍8
Разбираем паттерн Pluginable в iOS приложениях

Разрабатывая приложение для iOS, часто нужно добавлять базовую функциональность в такие классы, как UIViewController, AppDelegate или UIView.

Например, если в приложение каждый экран представлен одним из этих классов, то с помощью паттерна Pluginable и BaseViewController можно сделать конфигурацию контроллеров более гибкой и удобной.

Это избавит от дублирующего кода и разгрузит контроллер. В этой статье разбирается реализация BaseViewController на основе плагинов:

https://lazyload.academy/chapter/jonfir-pattern-pluginable/

#ios
💩6👍3👎1
Можно ли превратить старый телефон на Android в веб-сервер?

Можно, но для реализации нужно сначала установить Termux и настроить SSH на телефон. Автор этой статьи запустил веб-сервер Puma с простым веб-приложением с помощью Sinatra и поделился своим мнением:

https://habr.com/ru/company/sportmaster_lab/blog/683242/

У нас остались вопросы к аккумулятору, а вы что думаете?

#android
👍6👏4