Обновить

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

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

Безопасное обновление интерфейса во Flutter после ожидания

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

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

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

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

Читать далее

React Native iOS Push Notifications: почему push не сохраняются в background/killed state

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

Разбираем очень неприятный баг в React Native + iOS: почему push-уведомления сохраняются на Android, но теряются на iOS в background/killed state. В статье обсудим как на самом деле устроены APNS, Notification Service Extension, App Groups и почему проблема вообще не в React Native. Будет интересно…

Читать далее

Мобильная разработка за неделю #632 (25 — 31 мая)

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

В этом выпуске продолжаем исследовать новинки I/O 2026 и переводить пользователей, прекращаем использовать .onAppear и лезем Gradle под капот, делаем приватность частью архитектуры, создаем систему привлечения пользователей, поднимаем Llama 3 в облаке и многое другое. Заходите!

Читать далее

HalChat теперь Open Source: как успешный старт в Google Play изменил курс разработки

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

Всем привет!

Недавно я публиковал статью о том, что HalChat вышел в Google Play, и это вызвало небольшой ажиотаж вокруг проекта. Буквально за пару дней мы пробили отметку в 100+ скачиваний, а за один день было зарегистрировано 60 новых пользователей. Оценив такой отклик, я решил, что нужно идти дальше и сделать клиент HalChat для Android открытым.

Далее: зачем Open Source для HalChat, обновление и планы на будущее.

Читать далее

Ищем разработчика в Synaps — приложение для научного нетворкинга

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

Это третий пост о нашем проекте на Хабре. В первом мы рассказывали гипотезу, во втором — что из неё выжило после первых пользователей. Сейчас короткий и довольно прямой пост: мы ищем разработчика. Без модной формулировки про «rockstar ninja» — реально студенческий проект, в котором сейчас не хватает рук, чтобы двигаться дальше.

Читать далее

Живые обои на Mac своими руками: Metal, окна на уровне рабочего стола и немного математики

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

Я сделал приложение NeonDrift — живые обои для macOS на основе Metal-шейдеров. Для базовой работы не нужны сторонние библиотеки, Screen Recording или Accessibility-доступ. Только AppKit, MetalKit и SwiftUI.

В статье разберу как это устроено изнутри: от трюка с уровнями окон до шейдеров и упаковки в .app. Попутно расскажу про баги, которые я поймал в процессе — растянутую плазму на Retina, крэш при первом же запуске упакованного приложения, анимацию, которая сбрасывалась при каждом переключении Space, и фризы на втором мониторе при смене Space на основном.

Главная идея статьи не в том, чтобы сделать ещё один wallpaper app, а в том, чтобы показать как на macOS можно аккуратно совместить AppKit window management, Metal render loop и SwiftUI-настройки без приватных API — и где именно этот подход начинает трещать по швам.

Читать далее

Острова и несколько личностей на одном устройстве: как мы делаем приватность частью архитектуры

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

Когда делаешь приватный мессенджер, рано или поздно упираешься в неудобный вопрос: что именно защищает пользователя, ваши обещания или ваша архитектура. Обещания не проверить снаружи. Поэтому в RCQ мы старались, чтобы приватность держалась на устройстве и на структуре данных, а не на том, что мы хорошие ребята.

В этой статье разберём две вещи, которые из этого выросли: острова (свой сервер) и мультиличность (несколько независимых зашифрованных аккаунтов на одном телефоне). И отдельно, без прикрас, расскажем, где у этого подхода границы.

1. Фундамент: сервер, который мало что знает

Сначала коротко про основание, иначе дальше будет непонятно.

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

- Sealed sender: отправитель запечатан внутри зашифрованного конверта, а не лежит в заголовке. На транспортном уровне сервер видит "кому доставить", но не "от кого". Кто это понимает, тот сразу видит, что граф общения на сервере не собирается.

- Контент шифруется end-to-end: эфемерный X25519 на сообщение, HKDF, ChaCha20-Poly1305. Сервер пересылает шифротекст, ключей у него нет.

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

2. Острова: свой сервер вместо нашего

Раз сервер это тупая труба, его можно вынести куда угодно. Любая организация (редакция, юрфирма, команда, НКО) поднимает свой экземпляр RCQ, свой остров, и общается внутри него: свой сервер, свои UIN, своя история, свои группы, отдельно от публичной сети.

Читать далее

Я засунул таск-трекер, голосования с кворумом и AI, следящего за экранами сотрудников, в один мессенджер

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

Звучит как мем про стартап, который пытается быть всем сразу. Я сам так думал примерно до середины разработки. Но в итоге мы это собрали, выкатили в App Store и Google Play, и теперь команды реально ведут в этом проекты. Расскажу, как оно устроено внутри, что было тупо, что неожиданно сработало, и где я до сих пор не уверен, что мы поступили правильно.

Сразу оговорюсь: это не «убийца Jira» и не «убийца Slack». Это попытка убрать одну конкретную боль, на которую я смотрел несколько лет.

Читать далее

Мобильный Vivaldi 8.0 — Лучший браузер для лета

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

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

Читать далее

Обмен через интернет между мобильными приложениями ТСД и 1С

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

У продуктов Клеверенса (например, «Магазин 15», «Склад 15») есть возможность обмениваться данными между учетной системой (например, «1С: Предприятие») и удаленными ТСД через сеть. Это так называемый обмен через Интернет, который решает вопрос работы с удаленными устройствами без сложных и длительных настроек ПО и оборудования (например, проброс портов на роутере).

Читать далее

Impact Analysis в дизайн-системе: как мы сделали CI осмысленнее, а review понятнее

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

Меня зовут Даниил, я Android-разработчик в «БКС Мир инвестиций».

В первой статье мой коллега рассказывал, как мы использовали Kotlin IR Compiler Plugin, чтобы автоматически добавлять testTag и semantics в Compose-компоненты: Kotlin IR Compiler Plugin в дизайн-системе: автотесты с Compose без ручной разметки.

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

Читать далее

Когда Reality не хватает: добавляем Hysteria2 + Salamander в iOS-мессенджер, и как всегда грабли по дороге (ч.2)

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

В прошлой статье я рассказывал, как мы встроили VLESS + Reality прямо в наше iOS-приложение через sing-box, чтобы обход блокировок был не задачей пользователя, а деталью реализации. Если коротко: TLS-рукопожатие проксируется на посторонний крупный сайт, активный пробинг упирается в этот сайт, IP относимся как к расходнику, конфиг доставляется отдельно от сборки. Подход работает, и для подавляющего большинства соединений из России работает прямо сейчас.

Кроме одного класса сетей, в которых не работал.

Внутри этого класса оказались, в том числе, корпоративные подсети, гостевой Wi-Fi в некоторых аэропортах и часть регионального покрытия одного из операторов. Картина в логах одна и та же. Туннель поднимается, TCP-соединение на relay открывается, TLS-рукопожатие начинается, и через секунду sing-box на сервере пишет в журнал: REALITY: processed invalid connection. Сразу обрыв, нет ретраев которые что-то меняют.

Эта статья про то, что мы увидели в этих сетях, почему Reality в одиночку их не пробивает, и что мы поставили рядом, чтобы пробивал. Если читали предыдущую часть, продолжайте отсюда. Если не читали, важен один тезис: туннель у нас живёт внутри приложения, через sing-box, скомпилированный в нативный фреймворк, без системного VPN.

Дальше про Hysteria2

Ищу ранних тестировщиков для Android-версии agent harnesses

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

Всем привет.

По состоянию продукта это бета версия. Поэтому я не ищу пользователей, которые ждут готовый polished-сервис. Мне нужны люди, которым интересно покопаться в сыром продукте, найти баги, сломанные сценарии и непонятные места.

Идея простая: есть много мелких дел, которые постоянно висят в голове - расходы, покупки, документы, гарантии, возвраты, записи на услуги, отслеживание цен и так далее. Хочется собрать это в одном месте и дать человеку возможность не держать все эти задачи в памяти.

Например, можно добавить чек из магазина в расходы, сохранить гарантийный талон и потом получить напоминание, когда гарантия заканчивается, отслеживать цену на товар и получить уведомление, когда она упадет ниже нужной суммы. Еще один пример - подготовить черновик претензии, например в фитнес-зал из-за невозврата денег по абонементу. Или подготовить черновик типового бытового/юридического документа, который потом уже можно проверить самому или показать специалисту.

Главная идея продукта - не просто сделать еще один список задач или еще одну табличку расходов. У сервиса есть обычный интерфейс, где можно кликать по разделам, добавлять данные и смотреть сохраненную информацию. Но кроме этого есть AI-агентный интерфейс, где можно просто написать или сказать, что нужно сделать.

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

Читать далее

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

Как я разработал PoC-конструктор для приложений Android

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

Как рутинная разработка PoC-приложений под Android привела к созданию собственного конструктора нагрузок: от зарождения идеи до появления DexRunner и DEXLab – инструментов для быстрой сборки, доставки и исполнения DEX-нагрузок прямо на устройстве без вмешательств в логику приложения.

Читать далее

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

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

Всем привет! Apple удалила «РСХБ Онлайн» из App Store в 2022 году. С тех пор мы выпустили пять новых iOS-приложений — «Учёт надоя», «Ягодный фест», «АгроСкан», «PRO Зерно» и «ПРО Жарка». Каждое рано или поздно удаляли. И каждый раз перед нами вставала одна и та же задача: перевести клиентскую базу со старого приложения на новое. Без App Store. Без возможности обновить бинарник. Без push-уведомлений в устаревшем клиенте.

Я Кирилл Адещенко, в прошлой статье я делился кейсом публикации мобильного банковского приложения РСХБ в условиях ужесточения правил магазинов приложений и санкционных ограничений. В этой статье буду говорить про миграцию: как технически и организационно переселять людей, когда главный канал дистрибуции у тебя отобрали, а клиенты цепляются за привычное.

Читать далее

Год разработки iOS-игры, 266 тысяч показов и $33: как я делал Vault и почти ничего не заработал

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

Я год делал iOS-игру Vault: the board game: онлайн, профили, друзья, локализация, сезонные ивенты, премиум-паки и нормальная страница в App Store. За последние 90 дней App Store Connect показал 266 тысяч показов, 6 тысяч первых загрузок и $33 proceeds. Это честный рассказ о том, почему хороший инди-проект сам по себе не становится бизнесом.

Читать далее

Глубокая интеграция месседжинга с бизнес процессами в фреймворке NodaLogic

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

В NodaLogic добавились чаты и мессенджинг в широком смысле (как доставка сообщений и как пользовательские чаты) и это имеет целью стереть границы между классическим интерфейсом работы с бизнес-процессами и лентой чата, создать глубоко интегрированную пользовательскую среду работы с документами и событиями, а в будущем – переиспользование этой инфраструктуры для LLM. Кроме того инфраструктура обмена сообщениями используется для обмена между объектами и обработчиками, а не только в "человекочитаемых" чатах что позволяет разработчику избавиться от многих забот по организации обменов данными.

Читать далее

Мессенджер HalChat теперь в Google Play: 3 года разработки, ИИ в браузере и квест с модерацией

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

Всем привет!

Моему мессенджеру HalChat исполнилось три года. За это время он прошел огромный путь: из месива символов и сырых блоков превратился в стабильную систему с интуитивным дизайном и современными протоколами. Я разрабатываю его один и позиционирую как приватный, кастомизируемый и автоматизированный мессенджер.

Далее: итоги разработки, локальный ИИ в браузере без сторонних серверов и история о том, как я проходил квест с новыми жесткими правилами тестирования в Google Play.

Читать далее

Мобильная разработка за неделю #631 (18 — 24 мая)

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

В новом дайджесте лаги Телеграм на флагманах и анонсы Google I/O 2026, переезд с XML на Jetpack Compose и новый Flutter с Dart-ом, счет на €3167от ошибки в Firebase двухлетней давности, как Apple боролась с мошенничеством в App Store в 2025, ИИ-система code-review от DoorDash, которая действительно работает, и многое другое. Заходите!

Читать далее

Мессенджер Ласточка. Нас не пустили в Rustore

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

Короткий пост про текущий статус по развитию мессенджера.

Последние два месяца мы занимались бумажной работой. Той самой, которую стартапы обычно откладывают до последнего, а потом делают в пожарном режиме. Мы решили пойти иначе: сначала закрыть все юридические вопросы, потом запускать пользователей. В итоге получили официальный ответ Роскомнадзора, подали уведомление об обработке персональных данных, открыли whitelist-доступ для первых тестеров. Обо всём по порядку.

Читать далее