Обновить

Мобильная разработка

Сначала показывать
Порог рейтинга
Уровень сложности

Загрузка данных во ViewModel: рекомендации и Flow-based архитектура

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели13K

Дискуссии об архитектуре Android часто перерастают в жаркие споры, вызывая и восторг, и резкую критику. Писать на такие темы непросто, и именно поэтому это стоит делать.

Как показывает обсуждение в Твиттере, многие разработчики загружают данные в блоке init {} во ViewModel. Хотя подход кажется логичным, у него есть архитектурные недостатки. Автор статьи описал проблемы такого подхода и предложил гибкую альтернативу с использованием Flow.

Читать далее

Миграция на SPM: что мы выиграли и что потеряли

Время на прочтение9 мин
Охват и читатели6.7K

Спойлер: сократили размер приложений на 44% и ускорили их запуск в среднем на 51%.

Привет, Хабр! Меня зовут Владислав Сединкин, я занимаюсь iOS 10 лет и последние 2 года работаю в мобильной Core-команде Туту. В этом году мы решили сменить менеджер зависимостей и мигрировать с CocoaPods на SPM. Результаты оправдали ожидания, хотя и сложности на этом пути, конечно, были. В статье расскажу про проблемы, с которыми мы столкнулись в процессе, и предупрежу, на что стоит обратить внимание, чтобы не повторить наши ошибки.

Читать далее

Новая реальность найма: вы не прошли первый этап отбора из-за AI-галлюцинаций

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.5K

Вы откликнулись на вакансию, написали сопроводительное. Через пару минут — автоответ: «Спасибо, вы не подходите». Никакого рекрутера, только модель, которая прогнала ваш текст через NLP-алгоритм и решила, что навыков не хватает. 

Меня зовут Татьяна Горбацевич, я руководитель отдела рекрутинга в KODE. В статье расскажу, где и как компании применяют AI в подборе сотрудников, а где модели пока недостаточно хороши. И главное — что про это думают кандидаты.

Читать далее

Как поддержать Flutter в своей Библиотеке. Опыт VK ID SDK

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.8K

Привет! Меня зовут Даниил, я работаю в команде SDK в VK. Одно из направлений, которым занимается наша команда, — разработка SDK для авторизации через сервисы экосистемы VK. Он состоит из нескольких компонентов: авторизации, логина в один клик, шторки для входа с более удобным интерфейсом и поддержкой Mail и OK как провайдеров авторизации. 

Мы давно задумывались о поддержке Flutter, поскольку это быстроразвивающаяся платформа, которой уже пользуется много клиентов. Было видно, что поддержка Flutter нужна клиентам, даже на фрилансовых биржах публиковали заказы на поддержку VK ID. Логичным поступком стало сделать официальное решение от VK, чтобы клиентам не приходилось делать одинаковую работу. В этой статье поделюсь опытом поддержки Flutter в нашем SDK. Статья будет полезна любому разработчику, который хочет добавить поддержку Flutter в свою библиотеку. Материал рассчитан на разработчиков, которые ничего не знают о Flutter и будут разбираться с ним с нуля. Приведены примеры кода только под Android, поскольку под iOS всё делается аналогично.

Читать далее

Разбираемся с existential container в Swift

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.9K

Existential container — это структура данных в рантайме, которая хранит значение типа скрытого за протоколом. Он появляется там, где мы используем название протокола в качестве типа переменной или аргумента функции. С помощью existential container реализован динамический вызов методов протокола, а также управление жизненным циклом внутренного значения типа.

Читать далее

Гайд по File Templates: как шарить шаблоны с однотипным кодом

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели8.2K

Всем привет! На связи Дима Котиков, ведущий Android-разработчик в Т-Банке. Я все еще люблю разбираться в технологиях, разрабатывать под Android и KMP и пить латте на фундучном молоке :)

Расскажу, как можно шарить File Templates для своей команды, чтобы облегчить жизнь другим и сэкономить немного времени. Причем коллегам ничего самостоятельно не придется настраивать: подтянутый из git-а репозиторий с кодом все сделает сам. Эта статья — бонус к трем предыдущим, в которых я рассказывал, как уменьшить написание boilerplate-кода. Ссылки на них оставлю в конце статьи.

Читать далее

Погружение в JNI: проблемы и решения при взаимодействии между JVM и нативным кодом

Время на прочтение11 мин
Охват и читатели14K

Привет! Меня зовут Геннадий Денисов, я руковожу одной из команд разработки мобильного Яндекс Браузера для Android. Недавно в рамках одного проекта мы интегрировали С++‑код в мобильное приложение Браузера. В этой статье я поделюсь основными нюансами работы с Java Native Interface (JNI), инструментами для упрощения разработки и подробностями нашего подхода.

Читать далее

Новые подходы в Swift для тестирования: разбор технологии Swift Testing

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели9.5K

Тестирование на Swift долгие годы держалось на трех китах: XCTest, сторонние библиотеки и собственная смекалка. Но на WWDC 24 Apple представила новый, современный фреймворк — Swift Testing, который предлагает концептуально новый подход к тестированию.

Меня зовут Кирилл Гусев. Я мобильный разработчик в ОК. В этой статье я расскажу о том, какие возможности предоставляет Swift Testing и как мы планируем их применять в ОК.

Читать далее

Офлайн-режим в мобильном приложении: зачем он нужен и как его реализовать

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели11K

Представьте: пользователь открывает ваше приложение в метро, за секунду до въезда в тоннель. Вместо ошибки «Нет соединения» он видит контент, который уже загрузил, или даже продолжает заполнять форму — потому что приложение просто отложит синхронизацию до момента, когда сеть появится.

Это не магия, а продуманный офлайн-режим. В этой статье мы расскажем как реализовать его в приложении на iOS.

Читать далее

Мобильная разработка за неделю #603 (15 — 21 сентября)

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели8K

В новом дайджесте Swift Runtime и производительность iOS-приложений, вопрос на 16К и полный айсберг Android, проектирование интерфейсов по азиатски, 17 платящих клиентов за час из Tinder, реклама на холодильниках и многое другое. Заходите!

Читать далее

Строки в Swift

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели7.3K

Привет, Хабр! Сегодня поговорим о теме, которая вроде бы знакома каждому разработчику, но при этом часто остаётся в тени. Речь пойдёт о строках в Swift.

Каждый, кто писал или пишет приложения на этом языке, так или иначе работает со строками. Но задумывались ли вы когда-нибудь, как они устроены внутри? В этой статье я постараюсь приоткрыть завесу и рассказать, какие тайны скрывают строки в Swift.

Читать далее

Большой гайд как соответствовать ожиданиям работодателя в IT

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели11K

Ты думаешь, что в IT достаточно быть сильным специалистом? Ошибаешься. Работодатели ждут от тебя гораздо большего, и часто об этом не говорят прямо.

Читать далее

Как создать собственный RenderObject

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели7.7K

Наверняка вы слышали, что Flutter позволяет управлять содержимым каждого пикселя на экране. И что он помогает реализовать любой интерфейс, который только можно вообразить. 

Меня зовут Александр, я Flutter-разработчик в Surf, и сегодня мы сделаем ещё один небольшой шаг к этим крутейшим возможностям — мы научимся создавать собственные RenderObject. 

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

Читать дальше

Ближайшие события

Андроид всё еще не готов к RAW-видео

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели7.4K

Уверен, что многих возмутит уже само название этой статьи. А некоторые сразу же побегут в комментарии указывать на приложение, которое «смогло». Но не стоит спешить, друзья!

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

Читать далее

И ещё немного про то, что const в dart надо ставить где попало

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели4.8K

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

Читать далее

zenplan: твой карманный помощник. Как использовать бота или же краткий гайд по применению

Время на прочтение3 мин
Охват и читатели8K

Иногда кажется, что с задачами я сражаюсь больше, чем с самой работой. Можно сколько угодно писать списки в заметках, ставить напоминания в календарь, но в итоге всё равно ловишь себя на том, что половина дел потерялась, а дедлайны снова догоняют. Я пробовал разные таск‑менеджеры — от модных приложений до простых to‑do листов, но каждый раз было одно и то же: сначала играешься с новым сервисом, через неделю забиваешь, а потом возвращаешься к хаосу.

И вот в какой‑то момент я подумал: а что если задачи будут там, где я и так провожу большую часть времени — в Телеграме? Никаких новых приложений, аккаунтов, синхронизаций. Просто бот, который работает как привычный чат.

Так появился zenplan.

Читать далее

Полный айсберг Android. Часть 1

Время на прочтение13 мин
Охват и читатели19K

Android кажется давно изученной системой, но на самом деле это настоящий айсберг, большая часть которого скрыта под водой. За привычным интерфейсом прячутся технологии и архитектурные фишки, о которых знают лишь настоящие знатоки. Пора перестать скользить по поверхности. Давайте вместе нырнем в глубины Android, чтобы понять, что скрывает зеленый робо-дроид. Детали внутри.

Читать далее

Расширяем возможности GitHub Copilot для IDEA или как писать unit-тесты в пару кликов

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели14K

В этой статье расскажу, как мне удалось «влезть» в плагин GitHub Copilot, обойти ограничения проприетарного инструмента и научить его помогать писать unit-тесты буквально в пару кликов. Думаю это будет полезно тем, кто хочет узнать как влезать в работу сторонних плагинов, ускорить написание тестов и тем, кто ищет способы прокачать работу с ИИ-помощниками в своих проектах.

Читать далее

Как Swift Runtime влияет на производительность iOS-приложений

Уровень сложностиСложный
Время на прочтение19 мин
Охват и читатели12K

Привет, Хабр! Я Кристиан Бенуа, iOS-разработчиĸ в Т-Банĸе. В современном мире производительность приложения — ĸритичесĸи важный фаĸтор, определяющий его успех. Пользователи ожидают мгновенного отĸлиĸа и плавной работы, даже небольшие задержĸи могут негативно сĸазаться на восприятии приложения.  

Для больших iOS-приложений, написанных на Swift, понимание работы Swift Runtime и его влияния на производительность — важный навыĸ разработчиĸов. Swift Runtime при исполнении ĸода отвечает за фундаментальные вещи языĸа Swift: управление памятью и систему типов в рантайме.

В статье сосредоточимся на механизмах приведения типов и создания generic-типов внутри Swift Runtime и рассмотрим один ĸонĸретный метод, ĸоторый является узĸим местом в производительности приложения. Разберем примеры ĸода, демонстрирующие, ĸогда и почему этот метод вызывается, ĸаĸово его влияние на отзывчивость приложения и ĸаĸие стратегии использовать для смягчения негативного воздействия. 

Читать далее

Как я научил Jetpack Compose показывать рекомпозиции в реальном времени

Время на прочтение18 мин
Охват и читатели25K

Привет, Хабр! Меня зовут Иван Кузнецов, я Android‑разработчик в Кинопоиске. Сегодня расскажу историю разработки своего пет‑проекта, которая началась с код‑ревью очередного экрана на Jetpack Compose.

Представьте, вы открываете пул‑реквест и взгляд цепляется за знакомые паттерны: нестабильный параметр в Composable‑функции, remember без ключа, применение трансформаций на Layout‑фазе. Сразу хочется написать комментарий‑лекцию о том, почему это ударит по производительности и почему лучше так не делать.

Вот только объяснения отнимают время и не всегда наглядно доносят суть проблемы. Особенно это актуально для новичков, которым сложно сопоставить абстракции с реальным поведением UI. А ведь для сложных асинхронных штук вроде RxJava или корутин есть визуализаторы — RxMarbles и FlowMarbles, а для самой частой головной боли в Compose до сих пор нет. Вот бы вместо стены текста просто кинуть ссылку со словами: «Смотри, вот что твой код делает на самом деле».

В этой статье я расскажу о разработке собственного приложения, которое в реальном времени визуализирует рекомпозиции. Чтобы заставить его работать, пришлось залезть под капот компилятора Kotlin и подружиться с его внутренними API: FIR и IR.

Читать далее