Телеграм

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

@mobi_dev Программирование и разработка
РКН: проверяем Иноагент: проверяем
Актуальное по мобильной разработке — Android, iOS, кроссплатформа

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

Регистрация в перечне РКН: https://tprg.ru/oVBP

Статистика обновлена 12.11.2026 в 22:42 · 1 просмотр страницы · Хотите больше просмотров?

Подписчики13 000
Охват поста1 333 10% от подписчиков
ERR за месяц10,25%
ERR за 24 часа6,12%

Динамика за 30 дней

Рекламные публикации 1

Все рекламные посты →
Мобильная разработка tg13 тыс. подписчиков
Открыть пост ↗
Два String — и платёж ушёл не туда

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

В разборе опыта Verifone для каждого понятия вводят свой Kotlin value class: MerchantId, AcquirerId и другие. После этого подмена одного идентификатора другим становится ошибкой типов.

Та же логика распространяется на состояние операции. Обязательное поле не делают nullable «на всякий случай», а разные исходы описывают sealed-типами. Таймаут запроса сам по себе не доказывает, что платёж не состоялся.

Эти приёмы пригодятся и в мобильном клиенте: на границе API сырые данные проверяют и превращают в типы предметной области, с которыми дальше работает приложение.
👁 1.4 тыс. 🔥 1 ↻ 6 17 октября

Последние публикации

Все посты канала →
Мобильная разработка tg13 тыс. подписчиков
Открыть пост ↗
Pigeon генерирует обе стороны контракта Flutter и нативного кода

При ручной настройке platform channels имя метода или типы аргументов в Dart и нативном коде могут не совпасть. Pigeon генерирует типизированный API для обеих сторон из одного описания и связывает их через platform channels.

В Dart-файле задают модели и интерфейсы с аннотациями @HostApi и @FlutterApi. Затем запускают генератор. Для @HostApi реализуют полученные нативные интерфейсы и регистрируют их в Flutter engine. Из Flutter вызывают сгенерированные Dart-классы. @FlutterApi описывает обратные вызовы из нативного кода в Dart. При изменении API сначала правят описание, повторяют генерацию и обновляют реализацию.

Это снижает риск несовпадений в контракте, но не устраняет ошибки бизнес-логики. Сложное наследование моделей не поддерживается: документация советует уплощать их. Последовательность работы есть в руководстве Pigeon. Перед внедрением сверьте поддержку нужной платформы и версию Flutter в проекте.
👁 540 🤝 1 ↻ 4 сегодня в 11:35
Мобильная разработка tg13 тыс. подписчиков
Открыть пост ↗
Сохранить место чтения при подгрузке истории в React Native

В чат добавляются более ранние сообщения, а текущая строка должна остаться на месте. У ScrollView есть maintainVisibleContentPosition: он корректирует прокрутку, удерживая первый видимый дочерний элемент с индексом не меньше minIndexForVisible. Это не привязка навсегда к одному индексу. Значение 1 позволяет пропустить спиннер в начале списка.

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

Справочник ScrollView описывает эти ограничения. Перед внедрением сверьте поддержку свойства с версией React Native в проекте.
👁 676 👍 1🔥 1 ↻ 2 сегодня в 05:14
Мобильная разработка tg13 тыс. подписчиков
Открыть пост ↗
Доступ к файлам из SwiftUI fileImporter нужно освобождать

Системный выбор документа возвращает security-scoped URL, а не копию содержимого в приложении. Перед работой с каждым полученным URL вызывают startAccessingSecurityScopedResource. Если он вернул false, файл не читают. Если доступ получен, обязательно вызывают stopAccessingSecurityScopedResource, в том числе при ошибке чтения.

У перегрузки fileImporter с allowsMultipleSelection и onCancellation результат приходит в onCompletion как Result<[URL], Error>. При отмене вызывается только onCancellation. Это позволяет отдельно обработать отмену пользователем, ошибку импорта и выбранные файлы.

Именно эта перегрузка с обработчиком отмены доступна с iOS 17. Этот минимум не относится ко всем вариантам fileImporter. Схема касается URL из пикера, а не любого URL приложения.
👁 767 🎉 1 ↻ 3 вчера в 11:10