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

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

@developer_mobila

Всё о создании приложений под Android и iOS в одном месте.🔹 Инструменты, библиотеки и ресурсы для ускорения работы. 🔹 Статьи и гайды для разработчиков любого уровня. 🔹 Тренды мобильной разработки и новости индустрии.Реклама @evgenycarter

3 874подписчиков
Еженедельно🇷🇺

Похожие каналы

Все →

Последние посты

Мобильная разработка #1 — пост в ТГ канале

💳 Кредитная карта в коде: Почему за техдолг придется платить с процентами?В начале карьеры кажется: «Главное работает, а код... ну, потом причешу». Вы копипастите кусок из StackOverflow, зашиваете константы прямо в Activity и пропускаете тесты, чтобы успеть к релизу. Поздравляю, вы только что взяли кредит у своего будущего.Технический долг - это цена, которую вы платите за быстрые и некачественные решения. ❌ Как это выглядит (Симптомы):1. Страх перемен: Вы боитесь тронуть старый класс DataHelper, потому что всё приложение может развалиться.2. Эффект бабочки: Фиксите баг в одном месте - вылетает два новых в другом.3. Onboarding-катастрофа: Новый разработчик в команде неделю не может понять, как работает экран корзины.📈 Проценты по кредиту:Если долг не отдавать (не рефакторить), «проценты» растут. Скорость разработки падает. То, что раньше занимало 2 часа, теперь занимает 2 дня, потому что 90% времени уходит на борьбу с «костылями».🛡 Как выходить из долговой ямы (Стратегии Мидла):1. Правило Бойскаута: Оставляйте код чище, чем он был до вас. Зашли поправить мелкий баг? Заодно переименуйте кривую переменную или вынесите магическую строку в константу. По чуть-чуть, каждый день.2. Технический бэклог: Не прячьте техдолг в // TODO. Заводите реальные задачи в Jira/Trello. Если проблема не записана - её не существует.3. Правило 20%: Договоритесь с менеджером, что 20% времени спринта уходит на стабилизацию и рефакторинг. Аргумент для бизнеса: «Если мы не сделаем это сейчас, через полгода добавление новой кнопки будет стоить нам в 3 раза дороже».4. Code Review: Это ваш фильтр. Не пропускайте «грязный» код коллег (и свой тоже) только потому, что «нужно срочно».💡Техдолг это нормально, если он осознанный. Иногда реально нужно выкатиться «вчера», чтобы проверить гипотезу. Но плохой разработчик забывает о долге, а хороший - планирует его выплату.#cleanarch #techdebt #refactoring #quality #development #middle #management👉 @developer_mobila

6 апр. 2026 г.631В Telegram

🚀 Подборка полезных IT каналов в MaxСистемное администрирование, DevOps 📌https://max.ru/i_odmin Все для системного администратораhttps://max.ru/bash_srv Bash Советыhttps://max.ru/sysadminof Книги для админов, полезные материалыhttps://max.ru/i_odmin_book Библиотека Системного Администратораhttps://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.1C разработка 📌https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1СПрограммирование C++📌https://max.ru/cpp_lib Библиотека C/C++ разработчикаПрограммирование Go📌https://max.ru/golang_lib Библиотека Go (Golang) разработчикаПрограммирование React📌https://max.ru/react_lib ReactПрограммирование Python 📌https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчикаJava разработка 📌https://max.ru/bookjava Библиотека Java разработчикаGitHub Сообщество 📌https://max.ru/githublib Интересное из GitHubБазы данных (Data Base) 📌https://max.ru/database_info Все про базы данныхФронтенд разработка 📌https://max.ru/frontend_1 Подборки для frontend разработчиковБиблиотеки 📌https://max.ru/programmist_of Книги по программированиюhttps://max.ru/proglb Библиотека программистаhttps://max.ru/bfbook Книги для программистовПрограммирование 📌https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференцийhttps://max.ru/itmozg Программисты, дизайнеры, новости из мира IThttps://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻Шутки программистов 📌https://max.ru/itumor Шутки программистовЗащита, взлом, безопасность 📌https://max.ru/thehaking Канал о кибербезопасностиhttps://max.ru/xakkep_1 Хакер FreeКниги, статьи для дизайнеров 📌https://max.ru/odesigners Статьи, книги для дизайнеровМатематика 📌https://max.ru/Pomatematike Канал по математикеhttps://max.ru/phismat_1 Обучающие видео, книги по Физике и МатематикеВакансии 📌 https://max.ru/progjob Вакансии в ITМир технологий 📌 https://max.ru/mir_teh Канал для любознательныхБонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт

4 апр. 2026 г.502В Telegram
Мобильная разработка #1 — пост в ТГ канале

iOS network frameworks и HTTP TCP Server внутри приложенияПривет. В iOS разработке работа с сетью является одной из ключевых задач. Для этого существует целый арсенал инструментов: от высокоуровневого URLSession до работы с низкоуровневыми BSD сокетами.В этой статье мы разберем список доступных инструментов, напишем и запустим сервер внутри iOS приложения, используя самый низкоуровневых инструмент (BSD sockets). И закрепим это небольшим проектом, который будет использовать наш сервер. Им будет небольшая админка, с помощью которой можно будет загружать файлы из файловой директории приложения через веб браузер (с других устройств в локальной сети).https://habr.com/ru/articles/991366/👉 @developer_mobila

2 апр. 2026 г.633В Telegram
Мобильная разработка #1 — пост в ТГ канале

🧹 Синдром страуса: Зачем вы прячете баги под ковер?Хуже падающего приложения (Crash) может быть только приложение, которое «незаметно сломалось». Пользователь жмет кнопку «Оплатить», а ничего не происходит. Лоадер покрутился и исчез. Приложение не упало, но функция не работает. Почему? Потому что в коде написано это:try { api.buyPremium()} catch (e: Exception) { // TODO: обработать ошибку потом print(e.message) }❌ Подход Джуна: Поймать ошибку, чтобы приложение не скрашилось, вывести её в консоль (print или Log.e) и забыть. Но секрет в том, что консоль на телефоне реального пользователя никто не читает! Ошибка исчезает в пустоте.✅ Подход Мидла (Fail gracefully, log loudly):Приложение должно мягко обработать ошибку для пользователя (показать красивый Снекбар «Упс, что-то пошло не так»), но при этом громко заорать об этом разработчикам.🛠 Инструменты (Что должно быть в каждом проекте):🔥 Firebase Crashlytics / Sentry:Это не только для фатальных крашей! У них есть суперсила - Non-Fatal Exceptions (Нефатальные ошибки).Вместо пустого print, вы пишете:FirebaseCrashlytics.getInstance().recordException(e)Теперь каждое такое «тихое» падение сети или парсинга JSON прилетит вам на дашборд с аналитикой: у скольких пользователей это случилось, на каких моделях телефонов и версиях ОС.🍞 Хлебные крошки (Breadcrumbs):Представьте, что к вам прилетел краш: NullPointerException на строке 42. Как его воспроизвести? Сеньоры добавляют логирование действий до ошибки:Crashlytics.log("User opened Cart") -> Crashlytics.log("Clicked Checkout") -> Crash!Теперь вместе с краш-репортом вы получаете историю шагов пользователя. Баг фиксится за 5 минут вместо 5 часов гадания на кофейной гуще.💡 Правило хорошего тона:В Debug-сборке приложение должно падать с треском при любой неконсистентности данных (чтобы тестировщик или вы сразу это заметили). А в Release-сборке - пытаться выжить, но молча отправлять отчет вам на сервер.Признавайтесь, много у вас в проекте забытых TODO внутри catch? 👇#cr

24 мар. 2026 г.746В Telegram
Мобильная разработка #1 — пост в ТГ канале

🧠 ИИ-ассистенты помогают писать код, но часто делают это неправильно. Подсказки могут ломать архитектуру проекта, предлагать неверные решения или генерировать код, который трудно поддерживать. 🗓 25 марта в 20:00 МСК разберём, почему ИИ-ассистенты ошибаются при генерации кода, как структура проекта влияет на качество подсказок и какие принципы помогают писать ИИ-дружелюбный код.Вы увидите сравнение неправильных и правильных подходов, узнаете, как архитектура, названия и комментарии влияют на работу ИИ и как ускорить разработку мобильных приложений.➡️Открытый урок проходит в преддверии старта курса «Flutter-разработчик». Принять участие: https://vk.cc/cVBlt8Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

19 мар. 2026 г.698В Telegram
Мобильная разработка #1 — пост в ТГ канале

TUIkit — UI-фреймворк для терминаловФреймворк, похожий на SwiftUI, для создания пользовательских терминальных интерфейсов на Swift: без ncurses, без зависимостей от C, только чистый Swift.TUIkit позволяет создавать приложения, используя тот же декларативный синтаксис, который вы уже знаете из SwiftUI. Определяйте свой пользовательский интерфейс с помощью View, создавайте представления с помощью VStack, HStack и ZStack, стилизуйте текст с помощью модификаторов, таких как .bold() и .foregroundColor(.red), и запускайте все это в терминале.https://github.com/phranck/TUIkit👉 @developer_mobila

19 мар. 2026 г.617В Telegram
Мобильная разработка #1 — пост в ТГ канале

🍔 Приложение на диете: Как не заставлять пользователя удалять фото ради вашего кодаЗнакомая ситуация: вы сделали простенькое приложение со списком задач, собираете релиз, а маркетплейс показывает размер - 80 МБ. Пользователь, стоя на улице с мобильным интернетом, видит эту цифру и думает: "Да ну его, скачаю потом (никогда)".Почему приложения «толстеют»?Новички обожают тащить огромные библиотеки ради одной функции. Подключили гигантский фреймворк ради красивой анимации кнопки? Добавили 15 шрифтов и картинки в формате PNG без сжатия? Поздравляю, у вас ожирение.Взрослые проекты борются за каждый мегабайт. И главное оружие здесь - Minification & Shrinking (Минификация и удаление неиспользуемого).🛠 Как худеют приложения:🤖 Android (R8 / ProGuard):В файле build.gradle у сеньоров всегда написано:buildTypes { release { minifyEnabled true // Включает обфускацию и удаление мертвого кода shrinkResources true // Удаляет неиспользуемые картинки и XML }}Что это делает?1. Shrinking: R8 анализирует ваш код. Если вы импортировали огромную библиотеку, но используете из нее один метод - R8 просто вырежет остальные 99% библиотеки из финального APK.2. Obfuscation (Обфускация): R8 переименовывает ваши красивые классы NetworkUserRepository в a.b.c. Это не только уменьшает вес файла, но и усложняет жизнь хакерам (Reverse Engineering).💥 Обряд посвящения:Каждый разработчик хоть раз в жизни ловил краш на Релизе, потому что R8 переименовал классы для работы с сетью (JSON модели), и парсер сошел с ума. Решение: аннотация @Keep над data-классами.🍏 iOS (App Thinning & Dead Code Stripping):Apple делает много магии под капотом:1. Dead Code Stripping: Компилятор LLVM автоматически вырезает функции и классы, которые нигде не вызываются (включается в Build Settings).2. App Slicing: Когда пользователь скачивает приложение, App Store отдает ему не весь ваш бинарник со всеми картинками мира, а только те ресурсы, которые нужны для его конкретного устройства (например, только картин

18 мар. 2026 г.622В Telegram

🚀 Подборка полезных IT каналов в MaxСистемное администрирование, DevOps 📌https://max.ru/i_odmin Все для системного администратораhttps://max.ru/bash_srv Bash Советыhttps://max.ru/sysadminof Книги для админов, полезные материалыhttps://max.ru/i_odmin_book Библиотека Системного Администратораhttps://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.1C разработка 📌https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1СПрограммирование C++📌https://max.ru/cpp_lib Библиотека C/C++ разработчикаПрограммирование Python 📌https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчикаJava разработка 📌https://max.ru/bookjava Библиотека Java разработчикаGitHub Сообщество 📌https://max.ru/githublib Интересное из GitHubБазы данных (Data Base) 📌https://max.ru/database_info Все про базы данныхФронтенд разработка 📌https://max.ru/frontend_1 Подборки для frontend разработчиковБиблиотеки 📌https://max.ru/programmist_of Книги по программированиюhttps://max.ru/proglb Библиотека программистаhttps://max.ru/bfbook Книги для программистовПрограммирование 📌https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференцийhttps://max.ru/itmozg Программисты, дизайнеры, новости из мира IThttps://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻Шутки программистов 📌https://max.ru/itumor Шутки программистовЗащита, взлом, безопасность 📌https://max.ru/thehaking Канал о кибербезопасностиhttps://max.ru/xakkep_1 Хакер FreeКниги, статьи для дизайнеров 📌https://max.ru/odesigners Статьи, книги для дизайнеровМатематика 📌https://max.ru/Pomatematike Канал по математикеhttps://max.ru/phismat_1 Обучающие видео, книги по Физике и МатематикеВакансии 📌 https://max.ru/progjob Вакансии в ITМир технологий 📌 https://max.ru/mir_teh Канал для любознательныхБонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербургаhttps://max.ru/mockva_life Свежие новости Москвы

14 мар. 2026 г.616В Telegram
Мобильная разработка #1 — пост в ТГ канале

🚀 Как прогнать 37 000 тестов за 12 минут вместо 3 часов?В крупных проектах unit-тесты со временем превращаются в «тыкву»: их становится так много, что CI не выдерживает, а локальный запуск превращается в утопию. Ребята из Альфа-Банка столкнулись именно с этим в своем Android-приложении (800+ модулей) и поделились крутым кейсом оптимизации.В чем была проблема?1. Инициализация моков. Оказалось, что mockk<Activity>() может занимать больше 1 секунды из-за генерации байт-кода на лету. Второго такого «золотого» вызова нет (кешируется), но...2. Gradle и изоляция. Gradle запускает тесты каждого модуля в отдельном JVM-процессе. Итог: кеш байт-кода не шерится, и в каждом модуле мы снова и снова тратим секунды на тяжелые моки.3. Утечки в MockK. Метод clearAllMocks() со временем работает всё медленнее из-за раздувания внутренней карты объектов.Что сделали:✅ Отказались от стандартного распараллеливания Gradle по модулям. Вместо этого написали кастомную таску, которая собирает все тесты в единый classpath.✅ Ручное дробление. Все тесты разбили на 10 чанков (по количеству ядер/воркеров) и запустили их в 10 долгоживущих JVM-процессах.✅ Чистка рефлексией. Пофиксили деградацию MockK, принудительно очищая внутренние мапы библиотеки через рефлексию.Результат:Время прогона упало с 180 минут до 12 минут. На пулл-реквестах с учетом импакт-анализа тесты теперь пролетают вообще за минуту.Минусы подхода:Снижается изоляция. Если кто-то забыл сделать unmockkStatic, это может «отстрелить» в совершенно другом тесте, который попал в тот же процесс.Подробный разбор с примерами кода и ссылкой на черновики Gradle-плагина читайте в статье: https://habr.com/ru/companies/alfa/articles/993352/#Android #Gradle #Testing #Performance #Architecture👉 @developer_mobila

14 мар. 2026 г.515В Telegram
Мобильная разработка #1 — пост в ТГ канале

📶 Что видит пользователь, когда заходит в лифт? (Или почему ваш лоадер всех бесит)Представьте: пользователь едет в метро. Интернет то появляется, то пропадает. Он открывает ваше приложение, чтобы почитать ленту.❌ Подход Джуна (Прямая труба):Запрос в сеть -> Показ лоадера на весь экран -> Ошибка тайм-аута -> Пустой белый экран.А если пользователь случайно повернет телефон (сменит ориентацию) - лоадер появится снова, потому что Activity пересоздалась и запрос полетел заново. Это боль.✅ Подход Мидла (Single Source of Truth - SSOT):Открыл приложение -> Мгновенно увидел вчерашние данные из кэша -> В фоне пошел незаметный запрос в сеть -> Лента плавно обновилась свежими данными.Как это работает (Паттерн SSOT):Запомните золотое правило: UI никогда не должен получать данные напрямую из сети!Единственным источником «правды» для экрана должна быть ваша локальная База Данных (БД).1. Ваш ViewModel / Presenter просто подписывается на изменения в БД.2. Когда нужно обновить данные, Repository идет в сеть.3. Скачанные из сети данные сохраняются в Базу Данных.4. База данных отправляет сигнал в UI: "Эй, у меня новые данные, перерисуйся!".🛠 Чем пользуются профи:🤖 Android:Связка Room + Flow (или LiveData).Вы пишете в DAO: fun getNews(): Flow<List<News>>. UI начинает слушать этот Flow. Как только метод из сети сделает insert(newItems) в базу, Room сам протолкнет новые данные в Flow, и UI обновится. Магия!🍏 iOS:Современный SwiftData (или старая добрая CoreData) + макрос @Query (в SwiftUI) или Combine.Принцип тот же: UI биндится к хранилищу. Вы просто обновляете контекст базы, а списки на экране разъезжаются и анимируются сами.💡 Совет:Такой подход не только спасает от отсутствия интернета, но и решает проблему пагинации, поиска и шаринга данных между разными экранами (ведь все они смотрят в одну базу).#architecture #offlinefirst #ssot #android #ios #middle #caching👉 @developer_mobila

4 мар. 2026 г.763В Telegram