Мобильная разработка #1 – Telegram
Мобильная разработка #1
3.98K subscribers
795 photos
86 videos
32 files
1.26K links
Всё о создании приложений под Android и iOS в одном месте.

🔹 Инструменты, библиотеки и ресурсы для ускорения работы.
🔹 Статьи и гайды для разработчиков любого уровня.
🔹 Тренды мобильной разработки и новости индустрии.

Реклама @evgenycarter
Download Telegram
⌨️ DSL в Kotlin: от теории к практике

Приглашаем на открытый урок.

🗓 20 ноября в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».

Программа вебинара:


✔️ Что такое DSL и зачем он нужен в современной разработке

✔️ Основные элементы Kotlin для создания DSL: лямбды, infix-функции, расширения

✔️ Практические примеры использования DSL в Gradle, Ktor и TeamCity

Вебинар будет полезен:
Бэкенд-разработчикам на Kotlin, тимлидам и всем, кто хочет писать более чистый и поддерживаемый код.

В результате вебинара:
Научитесь создавать собственные DSL и применять их при разработке

🔗 Ссылка на регистрацию: https://vk.cc/cRbPWm

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Claude Code лучше всего работает как мультишаговый агент — выполняя задачу итеративно, внося изменения и проверяя, совпадает ли результат с целевым.

Рассмотрим один из способов наделить Claude Code (далее — «CC») возможностью использовать свои мультимодальные способности для просмотра результатов SwiftUI-кода — с помощью Swift Snapshot Testing. Мы изучим, как усилить его способности к анализу изображений через вызов инструментов (tool calling). И, наконец, проверим, насколько успешно он справится с задачей воссоздания SwiftUI-вида по эталонному изображению.

Стратегия, описанная в этом материале, оптимизирована для юнит-тестирования SwiftUI-вью в изоляции (без строки состояния, с гибкими размерами и т. д.). В конце поста кратко рассмотрим другие подходы к визуализации.

https://twocentstudios.com/2025/07/13/giving-claude-code-eyes-to-see-your-swiftui-views/

#ios

👉 @developer_mobila
👍1
🤝 Swift и C++: Прямая дружба без посредников

Долгое время использование C++ кода в iOS-разработке означало написание утомительных Objective-C++ ( .mm ) оберток. Но с выходом новых версий Swift ситуация кардинально изменилась.

Артур Гручала выпустил подробный гайд «Swift and C++ interoperability in practice», где разбирает, как настроить прямое взаимодействие двух языков на реальном примере.

Что внутри статьи:
🔹 Настройка с нуля: Как подружить Xcode, SwiftPM и CMake для сборки гибридного проекта.
🔹 Практика: Прямой вызов C++ классов и функций из Swift-кода.
🔹 Типы данных: Как передавать сложные структуры между языками (mapping types).
🔹 Подводные камни: Управление памятью, module maps и нюансы, о которых стоит знать заранее.

Если у вас есть легаси на C++ или вы хотите внедрить высокопроизводительные библиотеки в свой Swift-проект без лишней боли — это мастрид.

https://arturgruchala.com/swift-and-c-interoperability-in-practice/

#ios

👉 @developer_mobila
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Mesh для Flutter: синхронизация данных без облака, серверов и боли

🗓 26 ноября в 20:00 МСК на открытом уроке вы узнаете, как построить децентрализованное Flutter-приложение, где данные синхронизируются через Bluetooth, Wi-Fi Direct и WebRTC — без облака и API. Мы покажем архитектуру Flutter Mesh, в которой каждое устройство становится полноценным узлом локальной сети. Разберём, как работает peer-to-peer-обмен, как тестировать mesh-архитектуру и подключать новую open-source библиотеку flutter_mesh. На практике создадим демо-приложение, которое само находит соседей и передаёт данные напрямую.

❗️Если вы хотите выйти за рамки клиент-серверной модели и научиться строить автономные сети — этот урок для вас.

📖 Открытый вебинар проходит в преддверии старта курса «Flutter Mobile Developer». Регистрация открыта: https://vk.cc/cRu9RQ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👎1
Современные блокировки в Swift: мьютекс и фреймворк Synchronization

Фреймворк Synchronization вводит мьютексы — современные блокировки Swift для создания исключительного доступа к данным. Он отлично работает с Swift Concurrency и предоставляет решение для не-sendable типов, без введения накладных расходов на акторы.

Swift предлагает несколько решений для блокировки доступа к изменяемому контенту и предотвращения так называемого состояния гонки. Блокировки, такие как NSLock, DispatchSemaphore или последовательная DispatchQueue, являются популярным выбором для многих. В некоторых статьях сравнивается их производительность и указывается, какая из них работает лучше всего, но я хотел бы представить вам современный вариант блокировки Swift, представленный в SE-433 Synchronous Mutual Exclusion Lock.

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

https://www.avanderlee.com/concurrency/modern-swift-lock-mutex-the-synchronization-framework/

#ios

👉 @developer_mobila
👍1
⌨️ 🤖 Хочешь прокачаться в backend-разработке? Но справишься ли ты с тестом по Kotlin?

🏆 Пройди тест из 10 вопросов, проверь свой уровень знаний и приходи учиться на онлайн-курс «Kotlin Backend Developer. Professional» от OTUS!

На курсе:

✔️ Разработаете monolith, микросервисы и serverless с помощью Kotlin и фреймворков Spring, Ktor и бессерверных библиотек.
✔️ Освоите корутины для асинхронных и многопоточных задач, а также WebSocket, RabbitMQ, Kafka для транспорта.
✔️ Научитесь строить хранилища на Postgres, Cassandra, ArcadeDb и интегрировать OpenAPI с любым фронтендом.

🎫
Курс можно приобрести в рассрочку

➡️ Пройди тест и присоединяйся к группе: https://vk.cc/cRE6KT

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Dev Hub
Основы AGSL для android разработчика

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

Представь: тебе нужно «поколдовать» над пикселями прямо в UI - добавить живой градиент, искажение картинки под пальцем, стеклянный блеск карточке и тому подобные эффекты. Раньше для этого приходилось прибегать к «тяжеловесам» таким как OpenGL/Vulkan, либо мучить CPU постобработкой битмапов. AGSL (Android Graphics Shading Language) решает это элегантнее: это язык фрагментных шейдеров, встроенный в сам графический стек Android, так что эффекты применяются прямо на уровне отрисовки интерфейса.

https://habr.com/ru/articles/971992/

👉@androidspb
👍21
Утечка памяти: детективная история с Xcode

Я не мог предположить, что при повторном входе пользователя в систему возникнет такая серьезная проблема, как «половина функций нашего приложения дублируется в памяти». И что у нее есть такое простое решение, как перемещение захвата [weak self] на одну строку вверх.


Недавно я столкнулся с забавной ошибкой, связанной с глубокими ссылками.

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

Я начал расследование, не подозревая, насколько глубокой окажется эта кроличья нора.

https://www.emergetools.com/blog/posts/the-memory-leak-an-xcode-detective-story

#ios

👉 @developer_mobila
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🤖 Как сделать свой оператор Flow и не сломать логику приложения

Когда стандартных операторов Flow становится мало — значит, вы вышли на следующий уровень. На открытом уроке вы узнаете, как писать свои операторы для сложных сценариев, управлять потоками данных и правильно обрабатывать события в Kotlin. Мы покажем, как реализовать собственный оператор, работать с несколькими потоками в рамках одного и не потерять производительность.

❗️ Разберём подходы, которые помогают писать читаемый и поддерживаемый асинхронный код. Урок будет полезен Android-разработчикам уровня junior+, которые уже знакомы с Flow и хотят разобраться, как расширять его под реальные задачи.

🗓 8 декабря, 20:00 МСК. Открытый урок проходит в преддверии старта курса «Android Developer. Professional». Регистрация открыта: https://vk.cc/cRY1g7

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Compose animations - Android Developers Backstage

Chapters:
Intro (00:00)
Animation capabilities of Compose (1:06)
Different types of animation specs (3:43)
Layers of functionality, transitions (7:49)
TargetBasedAnimation (9:48)
Vectors & velocity of color change (12:43)
Second layer parallel to animation spec (16:39)
Animation interruptions (18:48)
Motion layout problem-solving (20:19)
Both scale and move in question (25:45)
Different mental models for layout animation in Compose vs. View (26:20)
Shared element (31:05)
Are there things you wish more people were aware of? (34:19)
What's the tooling story for this? (41:57)
What is Look Ahead? (43:16)
All software is regret (48:49)
New API: Modifier.animateBounds (51:52)
How to reach Doris – leave a comment (55:57)
Motion Frame of Reference Placement (57:29)
Wrap up (59:10)

https://www.youtube.com/watch?v=kFtFP5dBJDo

#Android

👉 @developer_mobila
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🛫 Flutter + Telegram: создаём полноценное веб-приложение с ботом и интерфейсом

Мир mini-apps в Telegram растёт, и теперь вы можете стать частью этого тренда. На открытом уроке вы узнаете, как соединить Flutter Web и Telegram Bot API, создать интерактивный интерфейс и развернуть приложение на Firebase Hosting. Мы разберёмся, как использовать dart:js_interop, связать Flutter Web-приложение с Telegram-ботом и настроить всё так, чтобы ваше приложение заработало прямо в мессенджере.

❗️ Занятие будет полезно Flutter- и Fullstack-разработчикам, которые хотят выйти за рамки мобильной разработки и использовать Flutter для современных Telegram-мини-приложений.

🗓 11 декабря в 20:00 МСК. Открытый урок проходит в преддверии старта курса «Flutter Mobile Developer». Регистрация открыта: https://vk.cc/cS9Ygm


Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Media is too big
VIEW IN TELEGRAM
Custom Keyboards SwiftUI - iOS 16+

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

источник

#ios

👉 @developer_mobila
👍3
Ускоряем Android-приложения с помощью Baseline Profiles

Привет, меня зовут Даниль Гатиатуллин, я инженер юнита Performance в Авито. Наша команда отвечает за производительность приложения Авито: мы следим за скоростью старта приложения и отрисовки экранов, качеством скролла, отслеживаем сетевые ошибки и занимаемся оптимизациями.

В этой статье я расскажу, что такое Baseline Profiles, как он ускоряет запуск программы и каким приложениям он принесет больше пользы. В качестве примера возьму наш эксперимент, который ускорил время запуска приложения на 15%. Также расскажу, как мы автоматизировали добавление профилей в каждый релиз.

https://habr.com/ru/companies/avito/articles/842218/

#Android

👉 @developer_mobila
👍1
Heat — это нативный клиент с открытым исходным кодом для iOS и macOS, позволяющий взаимодействовать с самыми популярными LLM-сервисами.

Фичи:

Поддержка популярных LLM-провайдеров (OpenAI, Mistral, Anthropic, Gemini)
Поддержка локальных LLM с открытым исходным кодом с помощью Ollama
Поддержка генерирования изображений (Stable Diffusion и Dall-e)
Поиск и просмотр веб-страниц для повышения точности ответов
Чтение и понимание календаря
Поиск в файловой системе (только для десктопа)
Базовое сохранение данных в памяти
Никаких зависимостей от сервера, кроме доступа к моделям

https://github.com/nathanborror/Heat

#ios

👉 @developer_mobila
👍2
Offline-First - это не просто кэширование GET-запросов

Многие путают Offline-Capable (показали кэш, если нет сети) и Offline-First (приложение полностью функционально без сети, сеть - лишь способ синхронизации).

На собеседованиях часто слышу: "Ну, сохраним в Room/Realm, а когда появится сеть - отправим на бэкенд". Звучит просто, пока не натыкаешься на Concurrancy & Conflict Resolution.

Допустим, у нас таск-трекер. Юзер А (в метро) меняет статус задачи на "Done". Юзер Б (в лифте) меняет описание этой же задачи. Оба выходят в онлайн. Что попадет в базу?

Если вы используете стратегию Last Write Wins (LWW), кто-то потеряет данные.

О чем стоит думать при проектировании синхронизации:

1. Optimistic UI: Мы обязаны показать изменение мгновенно. Но как откатить стейт, если сервер вернул 409 Conflict или бизнес-валидацию? Нужен надежный механизм транзакций на клиенте.

2. Queue Management: Очередь запросов должна быть персистентной. Но что, если первый запрос упал? Блокировать всю очередь? Или пропустить и нарушить причинно-следственную связь (causality)?

3. CRDTs (Conflict-free Replicated Data Types): Это "Святой Грааль" распределенных систем.
- Вместо хранения значения, мы храним операции.
- Математика CRDT гарантирует, что независимо от порядка применения операций, итоговое состояние у всех клиентов будет одинаковым (Eventual Consistency).


Практические выводы:

- Не пишите свои велосипеды для синка, если проект сложнее "To-Do листа". Это распределенная система в миниатюре.
- Смотрите в сторону решений, поддерживающих CRDT или дифференциальную синхронизацию "из коробки" (например, PowerSync, Replicache, или старый добрый Couchbase, если позволяет легаси).
- Если пишете сами - всегда версионируйте сущности (Vector Clocks) и проектируйте API так, чтобы сервер мог принимать патчи, а не целиковые объекты.

Offline-First - это не про базу данных на клиенте. Это про умение разруливать энтропию, когда Source of Truth временно недоступен.

#mobile #architecture #systemdesign #offlinefirst

👉 @developer_mobila
👍21
Forwarded from Mobile VK Hub
This media is not supported in your browser
VIEW IN TELEGRAM
Конец года, и снова заканчиваются все подписки 😱

Узнали? Согласны? Не беда — мы как раз разыгрываем промокоды на год от Облака Mail и VK Музыки!

Условия участия простые:
🔹 подпишитесь на наш канал @mobilehubvk
🔹нажмите кнопку «Участвовать»
🔹 дождитесь 30 декабря — в этом посте мы выберем случайным образом 6 победителей

Информацию об организаторе, правилах и призах ищите по ссылке.

Удачи!
👍21
👨‍💻 Как писать чистый код на SwiftUI: вспоминаем паттерны

Легко написать работающий экран на SwiftUI. Сложно написать поддерживаемое приложение. Часто проблема кроется в непонимании того, какие паттерны уже "зашиты" в фреймворк.

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

🔹 Observer - основа реактивности SwiftUI.
🔹 Builder - магия, которая позволяет писать декларативный UI.
🔹 Adapter - мост в мир UIKit.
🔹 Decorator - суть всех модификаторов.
🔹 Strategy - способ гибкой настройки логики.

Понимание этих концепций поможет не изобретать велосипед, а писать идиоматичный код.

https://medium.com/ios-nest/design-patterns-in-swiftui-9091a4fa722e

#iOS #Engineering #SwiftUI

👉 @developer_mobila
👍1
🚀 Что учить мобильному разработчику в 2026 году?

Индустрия не стоит на месте. То, что было «модно» пару лет назад, сегодня - стандарт индустрии, а знание легаси-технологий потихоньку отходит на второй план (но все еще нужно для поддержки).

Мы собрали ключевые фокусы для Junior и Middle разработчиков на этот год. Сверяйте свои планы! 👇

🤖 Android (Kotlin)

🔵Jetpack Compose: Это уже база. XML верстка уходит в легаси. Если вы еще не перешли на Compose - 2026 год самое время.
🔵KMP (Kotlin Multiplatform): Главный тренд. Бизнес хочет экономить, и шарить логику между iOS и Android стало стандартом. Учитесь выносить Data и Domain слои в общий модуль.
🔵Gradle Version Catalogs: Стандарт управления зависимостями. buildSrc и простое перечисление в build.gradle уступают место TOML-файлам.

🍎 iOS (Swift)

🔵SwiftUI: Как и с Android - это база для новых проектов. UIKit знать нужно (его еще много), но пилить новые экраны лучше декларативно.
🔵Swift 6 & Concurrency: Разберитесь наконец с async/await и Actors. Понимание потокобезопасности отличает Мидла от Джуна.
🔵Смотрим в сторону KMP: Да, iOS-разработчикам тоже полезно понимать, как подключать общие модули на Kotlin. Это повышает вашу ценность на рынке.

🛠 Общее (Must Have)

🔵AI-ассистенты: Copilot, Cursor или встроенные AI в IDE. Это не «чит», это инструмент ускорения. Учитесь писать правильные промпты для рефакторинга и тестов.
🔵CI/CD: Понимание, как ваше приложение собирается и летит в стор (GitHub Actions, Fastlane). Не ждите, пока это сделает DevOps, разберитесь сами.

🎓 Совет новичкам: Не пытайтесь выучить всё сразу. Выберите одну киллер-фичу (например, Compose или Concurrency) и углубитесь в нее в этом месяце.

💬 Вопрос: Какую технологию вы поставили себе в план изучить первой в этом году? Пишите в комментарии, обсудим! 👇

#roadmap #карьера #android #ios #тренды2026

👉 @developer_mobila
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
💼 Вопрос с собеседования: «Как вы боретесь с утечками памяти?»

Этот вопрос гарантированно зададут на собеседовании и Android, и iOS разработчику. Лид хочет услышать не сухую теорию, а ваши инструменты.

Вот как отличается уровень ответов:

Ответ Джуна:
«Утечка - это когда память не освобождается, забивается, и приложение падает с ошибкой Out Of Memory. Я стараюсь писать чистый код и надеюсь на Garbage Collector (или ARC в iOS)».
👉 Вердикт: Слишком абстрактно. Не понятно, умеет ли кандидат реально находить и чинить проблемы в коде.

Ответ Мидла:
«Утечки чаще всего возникают, когда объекты удерживаются дольше, чем нужно.
Классика жанра:
🤖 Android: Ссылка на Activity или Context внутри статического поля или долгоживущего фонового потока.
🍎 iOS: Retain Cycle (циклические ссылки), когда два объекта сильно ссылаются друг на друга (часто бывает в кложурах).

Как я их ищу:

1. Инструменты: Не гадаю на кофейной гуще, а запускаю Android Profiler (или библиотеку LeakCanary) / Xcode Instruments (Leaks & Memory Graph).
2. Лечение: Использую WeakReference или [weak self], чтобы разорвать сильную связь».

👉 Вердикт: Четкое понимание причины + знание профайлеров + конкретное решение.

💡 Совет: Перед следующим собеседованием запустите свой пет-проект с профайлером. Даже если там нет утечек, вы сможете сказать: «Я проверял свой проект через Instruments/Profiler, потребление памяти стабильное». Это огромный плюс в карму.

Сталкивались с OOM (Out Of Memory) в реальных проектах или пока проносило? 👇

#собеседование #карьера #ios #android #tips

👉 @developer_mobila
👍42
🛠 Хватит писать To-Do листы! Топ бесплатных API для твоего портфолио

Рекрутеры видят сотни «списков задач» и «калькуляторов». Чтобы выделиться, нужно показать работу с сетью, сложным UI, кэшированием и картинками.

Лучший способ это сделать - написать клиент для реального API. Вот подборка бесплатных, стабильных и открытых API, на которых можно построить крутой проект:

🎬 1. The Movie DB (TMDB)

🔵 Что там: Огромная база фильмов, актеров, рейтингов и постеров.
🔵 Чему научишься: Работать со сложными списками (RecyclerView/LazyColumn), пагинацией, поиском и загрузкой изображений (Glide/Coil/Kingfisher).
🔵 Идея: Клон Netflix или «Кинопоиска».

🚀 2. NASA Open APIs

🔵 Что там: Фото дня (APOD), данные о Марсе, астероидах.
🔵 Чему научишься: Работать с красивым медиа-контентом и датами.
🔵 Идея: Приложение «Космос сегодня» с ежедневными уведомлениями.

3. PokéAPI

🔵 Что там: Всё о покемонах. Полностью открытое, не требует ключа (Auth Key).
🔵 Чему научишься: Архитектуре. Данные хорошо структурированы, идеально для тренировки Clean Architecture и маппинга JSON в модели.
🔵 Идея: «Покедекс» с детальной информацией и статами.

📈 4. CoinGecko API

🔵 Что там: Курсы криптовалют в реальном времени.
🔵 Чему научишься: Работать с Websockets (если найдешь) или частым обновлением данных, рисовать графики.
🔵 Идея: Трекер портфеля крипты.

💡 Совет ментора: Не пытайтесь сделать всё сразу. Возьмите один экран (например, список популярных фильмов) и сделайте его идеально: с обработкой ошибок («нет интернета»), скелетоном при загрузке и красивой анимацией. Это ценнее, чем кривое, но большое приложение.

Сохраняй подборку, чтобы не потерять! А какое API вы использовали в своем последнем проекте? 👇

#ресурсы #api #петпроект #ideas #android #ios

👉 @developer_mobila
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
☠️ Баг, который вы не видите, а пользователи ненавидят

Представьте: пользователь заполнил длинную форму регистрации, свернул приложение, чтобы скопировать код из SMS, возвращается... а экран пустой. Данные исчезли. 🤬

Это System-initiated process death. Самая частая причина удаления приложения у пользователей и головная боль разработчиков.

Почему это происходит?
ОС (Android или iOS) всегда не хватает оперативной памяти. Когда ваше приложение уходит в фон, система может «тихо» убить его процесс, чтобы освободить ресурсы для активного окна (например, Камеры).

Ошибка новичка:
«Я храню данные в ViewModel (Android) или в переменной контроллера (iOS), они же живут долго!»
Реальность: ViewModel переживает поворот экрана, но умирает вместе с процессом. Синглтоны тоже сбрасываются.

Как делать правильно (Level Up):

🤖 Android:
Перестаньте полагаться только на поля класса. Используйте SavedStateHandle.
Это специальный механизм внутри ViewModel, который сохраняет небольшие кусочки данных (ID, поисковый запрос, ввод пользователя) в системный бандл. Система бережно восстановит его даже после смерти процесса.
Гуглить: SavedStateHandle, Parcelable.

🍏 iOS (SwiftUI/UIKit):
В SwiftUI для простых данных (например, выбранная вкладка или текст) используйте обертку @SceneStorage. Она автоматически сохраняет и восстанавливает состояние.
Для сложных данных — сохраняйте их в локальную БД (CoreData/Realm/SwiftData) при каждом изменении, а не при закрытии экрана.

🛠 Как проверить себя (Челлендж на 5 минут):
Не верьте эмулятору. Проверьте свой текущий проект прямо сейчас:

1. Запустите приложение и введите данные в любое поле.
2. Сверните приложение (Home).
3. Android: В настройках разработчика включите опцию «Don't keep activities» (Не сохранять действия).
4. iOS: В Xcode нажмите Debug -> Simulate Memory Warning или остановите дебаг и запустите другое тяжелое приложение.
5. Вернитесь в свое приложение.

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

Знали про SavedStateHandle или по старинке сохраняли всё в базу данных? 👇

#android #ios #bugs #middle #architecture #обучение

👉 @developer_mobila
👍7🔥2