Как стать автором
Поиск
Написать публикацию
Обновить
155.95

Разработка мобильных приложений *

Android, iOS, Windows Phone и прочие

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

Изоляция с помощью глобальных акторов в Swift Concurrency: варианты на примере @MainActor

Время на прочтение7 мин
Количество просмотров883

Привет, Хабр! Меня зовут Алексей Григорьев, я техлид iOS-разработки продукта Membrana в МТС. Это тариф с приложением для управления приватностью в сети и окружением.

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

Один из самых распространенных и полезных глобальных акторов — это @MainActor, который гарантирует выполнение операций в главном потоке приложения. В этом посте я на его примере покажу все варианты, как можно реализовать изоляцию и что в итоге выведет код: на каком потоке будут выполнены update, internal update и set в property.

Читать далее

Edge-to-edge в Android: опыт внедрения и рекомендации по тестированию

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

Всем привет! Мы – Саша Королёв и Юля Трусова, инженеры в Design System Авито. Наша команда работает над качеством интерфейсов: актуальностью, предсказуемостью, доступностью. В этой статье рассказываем про наш опыт внедрения edge-to-edge в мобильном приложении Avito для Android.

Материал будет особенно вам интересен, если ваше приложение не использовало режим edge-to-edge, но ввиду последних требований от Google по переходу на target SDK 35, появилась в этом необходимость. Ведь данное обновление применяет режим по умолчанию без возможности его отключить. Из статьи вы узнаете, с какими сложностями столкнулись мы как участники большого проекта при интеграции данного режима в масштабный проект с не одной сотней экранов.

Читать далее

История AMP, или Почему электронной почте не нужна интерактивность

Время на прочтение7 мин
Количество просмотров4.4K

«Система Email оставалась практически неизменной в то время, как окружающая веб-среда стремительно развивалась». — написал продакт-менеджер Google Аакаш Шейни в 2019 году.

Но в Google решили «Хватит», и разработали фреймворк для электронной почты под названием AMP (accelerated mobile pages), обещающий «сохранение актуальности информации в ваших письмах» и «удобную возможность совершать действия прямо из сообщений».
Читать дальше →

Персуазивные технологии

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

Говорят, что в иностранных вузах это отдельный предмет — Persuasive Design, Persuasive Technology. Не знаю, не проверял, но, видя, насколько это мощный инструмент разработки, охотно в это верю. Сталкиваясь всё больше с этими технологиями во всех сферах, где я работаю, пришлось посвятить их изучению довольно много времени, что вылилось в эту статью. Решил поделиться с вами своими мыслями, оформленными в отдельные разделы и сгруппированными по методам работы. Дополнительно отмечу, что многие исследования глубинной природы человека постоянно возвращали меня к этим технологиям. Например, изучение систем выработанных рефлексов, методов работы с жадностью и гневом неизменно приводило к исследованиям в этой области. Также стоит дополнительно отметить, что эти приёмы помогают эффективнее взаимодействовать с малообразованными людьми.

Читать далее

Flutter & Dart: весенний апдейт — backend, DevTools и Roadmap 2025!

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.4K

Весна в самом разгаре, а вместе с ней — обновления, гайды, инсайды и бум активности в экосистеме Dart и Flutter. В этом выпуске вы найдёте мощные инструменты для DevTools, свежие идеи для архитектуры, backend-направление на Dart и многое другое.

Читать далее

Мастерство фокусов на Compose

Уровень сложностиПростой
Время на прочтение23 мин
Количество просмотров4.4K

Привет! Меня зовут Костя, я Android-разработчик в онлайн-кинотеатре PREMIER. Среди прочего у нас есть приложение для Android TV. Работая над ним, я столкнулся с тем, что система фокусов в Jetpack Compose устроена сложнее, чем кажется на первый взгляд. Поскольку для ТВ-приложений и устройств без сенсорного управления работа с фокусом играет ключевую роль в навигации, мне понадобилось детально разобраться в теме. Результатами делюсь в статье.

Читать далее

Укрощаем асинхронный код с помощью async/await

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

Привет! Меня зовут Андрей Максимкин, я iOS-разработчик в hh. Мы в команде активно используем async/await подход при написании нового кода, а также активно применяем при переписывании старого. В процессе работы сталкивались с некоторыми интересными и не самыми очевидными моментами — их и рассмотрим в статье.

Работа с различными потоками — очень важная часть разработки мобильных приложений под iOS. Грамотное распределение нагрузки положительно влияет на скорость работы приложения, а значит, и на пользовательский опыт. До Swift 5.5 для работы с многопоточностью в основном использовали фреймворки GCD и NSOperation. Начиная с версии Swift 5.5 стал доступен функционал async/await. В статье мы кратко расскажем о базовых принципах данного подхода и сделаем акцент на проблемах и особенностях, которые необходимо знать при написании кода. Информация будет полезна тем, кто уже знаком с функционалом async/await, а некоторые примеры могут быть интересны и более продвинутым разработчикам. 

Поехали!

Jetpack Compose для Android TV: как происходит перемещение фокуса

Время на прочтение10 мин
Количество просмотров1.6K

Привет, Хабр! Меня зовут Сергей Захаров, я разработчик в онлайн-кинотеатре KION. Jetpack Compose постепенно становится стандартом разработки UI для Android, и Android TV не остался в стороне. Вместо устаревшего и громоздкого Leanback теперь есть гибкий и мощный фреймворк, который обещает упростить разработку.

Однако на Android TV ключевую роль играет управление фокусом — без него невозможна навигация. Как же Compose справляется с этой задачей? Достаточно ли он удобен для больших TV-проектов, или лучше ограничиться им в мобильных приложениях? В этом и следующих материалах я отвечу на эти вопросы на примере конкретных кейсов. 

Это первый пост моего цикла про работу с фокусом в Jetpack Compose. В нем я расскажу, как в Jetpack Compose перемещается фокус, рассмотрю используемые при этом компоненты, покажу их плюсы и минусы, а также дам рекомендации по их применению в приложениях для Android TV.

Читать далее

Мобильная разработка за неделю #585 (21 — 27 апреля)

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.9K
В новом дайджесте продолжаем изучение архитектурного линтинга и CI/CD, исследуем «приключение на 20 минут» с legacy-кодом и оправдания для вайб-кодинга, SwiftUI Instruments, скрытные ботнеты, выпуск приложений Spotify и многое другое. Заходите!

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

Ох уж эти скрытные ботнеты

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

Вот очередной день, когда ботнеты пытаются взломать мой скромный почтовый сервер брутфорсом для рассылки спама. Такое случается волнами, но волны эти возникают постоянно и являются частью жизни системного администратора (естественно, они терпят неудачу ;).

IP-адреса, с которых происходят попытки использовать мой сервер для отправки спама

IP-адреса, с которых совершаются попытки подобрать имя пользователя/пароль для авторизации на моём почтовом сервере и рассылки спама
Читать дальше →

Offline First в мобильных приложениях. CRUD на стороне клиента

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

Привет, Хабр! Это Ахмед Шериев, сооснователь стартапа VoxOps, а сегодня — еще и гостевой автор блога Friflex. Это вторая статья про мой опыт разработки офлайн-приложений — первая была про кэширование.

Если пользователи в офлайне должны менять данные, а потом синхронизировать изменения с сервером, есть два основных подхода. Первый — синхронизировать сами данные. Второй — синхронизировать команды или события.

Читать далее

Тестируем скорость SSD 1993 года выпуска. На КПК Psion Series 3c, с операционной системой SIBO 16, на языке OPL

Время на прочтение7 мин
Количество просмотров2.1K

В середине 2000 я купил Psion 3c для коллекции. Лет через 10 увидел, что его комплектный диск называется SSD — Solid State Disk. На волне тестирования NVME возникла идея, а не протестировать ли скорость SSD-1993? И спустя 20 лет после покупки на этой машинке была написана первая программка.

Что вышло…

Сколько я заработал в RuStore и как Роскомнадзор продвигал мое приложение

Время на прочтение3 мин
Количество просмотров28K

В этой статье я поделюсь своей историей: как я в одиночку пробивался в отечественном магазине приложений, сколько заработал и как странным образом Роскомнадзор оказался моим союзником в продвижении стартапа.
Читай дальше — сейчас всё расскажу!

Читать далее

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

Интеграция JavaScript в нативные мобильные приложения для криптотрейдинга: нестандартный опыт и технические решения

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров592

23–24 апреля в Москве проходит Blockchain Forum — одно из ключевых событий в мире блокчейна и криптотехнологий. На форуме изучаем тренды, делимся опытом и слушаем коллег, набираемся насмотренности.

Мы в CleverPumpkin разрабатываем и развиваем мобильные приложения, в том числе для криптовалютных сервисов, и хорошо понимаем с какими техническими вызовами сталкиваются команды.

В этой статье мы делимся совместным опытом с командой EVEDEX, где мы интегрировали SDK на TypeScript, изначально предназначенный для веба, в нативные приложения, чтобы сохранить единую бизнес‑логику между платформами. Это решение дало массу преимуществ — но и принесло немало сложностей.

Читать далее

CI/CD по кнопке: как мы автоматизировали сборку SampleApp для SDK RuStore

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

Если вы хоть раз тестировали SDK для Android, то знаете, сколько времени и нервов может уйти на подготовку окружения и сборку тестового приложения. Особенно если это делает не разработчик, а, например, тестировщик или менеджер — сначала нужно настроить окружение, скачать и обновить ветку до актуального состояния, открыть Android Studio, найти нужные параметры в build.gradle, внести правки вручную, запустить сборку. И каждый раз надеяться, что ничего не отвалится.

Читать далее

Локализация Flutter приложения на сервере

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

g11n, i18n, l10n... или один из множества вариантов локализации приложения. Привет, меня зовут Константин Комков и я надеюсь данный пример и последовательность шагов сэкономят Вам время при разработке!

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

Читать далее

Самодельная мобильная лаборатория из старого мультиметра и подручного телефона

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

Эта история началась с того, что я допиливал свой пет-проект по обработке данных. В ходе работы мне попался старый, но надежный мультиметр. Я долго им пользовался ранее, изучая электронику. Сам прибор неплохой, но софт под него сильно устарел, да и заточен он только под Windows. Так я занялся реверс-инжинирингом, отладкой обмена сообщениями и сборкой библиотек для телефона. Подробности — под катом!
Читать дальше →

Отлаживаем приложение вместе со SwiftUI Instruments

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2.4K

Apple по доброте душевной поделилась с разработчиками инструментом отладки SwiftUI. Удобный он или не очень — разберёмся вместе с Surf iOS Team. 

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

Сделай удобно: подборка UI/UX-кейсов из цифровых и нецифровых продуктов (#13)

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.8K

Продолжаю изучать различные UI/UX/CX кейсы в мобильных приложениях, веб-сайтах и в реальном мире. Дизайнерам и менеджерам по продукту, чтобы вдохновиться и добавить в заметки.

Под катом: Кухня на районе, Дзен, Google, Яндекс.Еда.

Читать далее

Optional vs Nullable на стыке технологий

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров3.9K

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

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

Читать далее

Вклад авторов