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

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

Реклама @evgenycarter
Download Telegram
Media is too big
VIEW IN TELEGRAM
Осваиваем множества в Swift: практическое руководство

Массивы — это здорово, но они подходят не для каждой задачи. В этом видео мы подробно разбираем множества (Sets) в Swift: чем они отличаются, как эффективно с ними работать и когда выбирать их вместо массивов.

Вы узнаете:
• Как создавать и изменять множества
• Ключевые отличия множеств от массивов
• Основные операции: insert, remove, union, intersection и другие
• Методы сравнения: subset, superset и disjoint
• Реальные прим/Users/evgenycarter/Downloads/4K/Mastering Swift Sets A Practical Guide.mp4еры использования: фильтрация тегов, права доступа, удаление дубликатов, планирование встреч

К концу урока у вас будет полностью рабочий playground и ясное понимание, когда и почему стоит использовать Set вместо Array.

источник

#ios

👉 @developer_mobila
👍2
Создание красивой кнопки с прогрессом в Jetpack Compose

С момента появления Jetpack Compose нам, разработчикам, стало гораздо проще создавать уникальные взаимодействия. Я действительно считаю, что освоить систему представлений для создания кастомных взаимодействий было довольно сложно, и Jetpack Compose значительно упростил эту задачу.

Что мы будем создавать?
Мы собираемся создать многоразовый компонент ProgressButton. Эта кнопка будет иметь анимацию прогресса, которая заполняет кнопку слева направо. Ключевой особенностью этого компонента является его способность обрезать анимацию прогресса по форме кнопки, обеспечивая гладкий и плавный вид, независимо от того, используете ли вы закругленные углы или круглую форму.

https://proandroiddev.com/creating-an-engaging-progress-button-in-jetpack-compose-29ff8d5e383c

#Android

👉 @developer_mobila
👍1
⌨️ 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