Мобильная разработка за неделю #580 (17— 23 марта)

В этой еженедельной подборке оптимизация производительности iOS-приложений и реактивное профилирование Android-приложений, полезные библиотеки для React-приложений 2025 и вопросы о размерах пальцев и кнопочек, последствия «вайб кодинга», соединение точек, многомодульные библиотеки и многое другое. Заходите!

awnhy2x_gctlh5efzwe36vndijw.jpeg

Подписывайтесь на мой Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков.

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• 10 хаков для оптимизации производительности iOS-приложений
• Соединяем две точки с помощью отрезков прямых линий и закругленных углов в SwiftUI
• Дивный мир Swift Concurrency
• Задачи с собеседований: Leetcode — Недостающее число
• Разработка под Apple Vision Pro
• Размещение UI-компонентов в пределах отступов Safe Area
• Как встроить в TextField индикатор загрузки и кастомную View
• Евросоюз заставит Apple полностью раскрыть функции iPhone сторонним разработчикам
377ae0333d0f4b7b97307c9eea5ee21a.gifRendering Pixel Art with SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Seamlessly Use Swift Package Manager (SPM) and CocoaPods (POD) Together with the Same SDK
377ae0333d0f4b7b97307c9eea5ee21a.gifParsing JSON using the Codable Protocol
377ae0333d0f4b7b97307c9eea5ee21a.gifTabletopKit tutorial
377ae0333d0f4b7b97307c9eea5ee21a.gifIdentifying individual sounds in an audio file
377ae0333d0f4b7b97307c9eea5ee21a.gifExploring The LabeledContent View In SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifPerforming your app actions with Siri through App Shortcuts Provider
377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI: Simple Workout App with HealthKit
377ae0333d0f4b7b97307c9eea5ee21a.gifUsing Proxyman to Intercept and Simulate iPhone App Network Requests
377ae0333d0f4b7b97307c9eea5ee21a.gifInterview Experience for SDE-II iOS at Flipkart
377ae0333d0f4b7b97307c9eea5ee21a.gifAccess Modifiers in Swift
377ae0333d0f4b7b97307c9eea5ee21a.gifDynamically adapting to available space with ViewThatFits
377ae0333d0f4b7b97307c9eea5ee21a.gifDon«t rely on BGAppRefreshTask for your app«s business logic
377ae0333d0f4b7b97307c9eea5ee21a.gifVibe Coding with Cursor AI
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngWhy The Composable Architecture is Overrated
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAnimated Async Button With Custom Spinner Using SwiftUI
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMaster SwiftUI Layout With EASY Spacing And Padding
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngChatGPT Pro for iOS Devs: HONEST Review
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCreate Custom Tab Bars in SwiftUI — An Alternative to Default Tabs
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngVisionOS Style Menus for iOS Using SwiftUI
96716bcb926741e79bb1c284a88083ca.pngSoundscape — 3D-звук для всех
96716bcb926741e79bb1c284a88083ca.pngGo Cycling — велотрекер для iOS

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Demeter в опенсорсе: реактивное профилирование Android-приложений
• Создаём многомодульную библиотеку на Android: как же собрать fat-aar?
• Protobuf против JSON для Android-разработки
• Передача данных от ESP32 по Bluetooth LE к Android
• Ликбез по разрешениям в Android
• Кастомные лейауты в Jetpack Compose
• Мапим данные из domain в ui модуль в многомодульном проекте
• Поиск Google и Play Store так же нарушают DMA, считает ЕС
377ae0333d0f4b7b97307c9eea5ee21a.gifWhy Visual Testing Is Critical for Mobile App Quality
377ae0333d0f4b7b97307c9eea5ee21a.gifUsing the Android Context and Manifest to Unveil the Android System Mechanics
377ae0333d0f4b7b97307c9eea5ee21a.gifEnhancing Dropdown Menus in Jetpack Compose: Implementing Searchable Selection
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Develop Firebase Genkit Flows
377ae0333d0f4b7b97307c9eea5ee21a.gifUnit Testing Lifecycle and State in ViewModels
377ae0333d0f4b7b97307c9eea5ee21a.gif12 tips to mastering Kotlin Coroutines
377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin for Seniors: Stop Writing Code, Start Crafting it. Infix.
377ae0333d0f4b7b97307c9eea5ee21a.gifSystem Design for Airbnb«s Android Application
377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin 2 Guard Condition
377ae0333d0f4b7b97307c9eea5ee21a.gifMaterial3 Color System Basics for Android Developers
377ae0333d0f4b7b97307c9eea5ee21a.gifBump«s Journey into Delightful Experiences on Android with Jetpack Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid Studio Meerkat Feature Drop
377ae0333d0f4b7b97307c9eea5ee21a.gifAvoiding Memory Leaks in Android: Best Practices for Context Usage
377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin for Seniors: 3 Powerful Features You Should Know
377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid Studio Narwhal Canary 1 now available
377ae0333d0f4b7b97307c9eea5ee21a.gifFirebender: Most powerful, privacy-first coding assistant for Android Studio
377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin 2.1.20 Released
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFull 2025 Kotlin Crash Course For Beginners
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCreate Boilerplate Files With ONE Click With Multi-File Templates In Android Studio
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMastering UI Events and States in Jetpack Compose
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngParsing XML namespaces and trying not to lose our minds
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFighting the Elephant — Gradle Convention Plugins
96716bcb926741e79bb1c284a88083ca.pngShader Ripple Effect Playground — библиотека шейдерных AGSL эффектов
96716bcb926741e79bb1c284a88083ca.pngHandWriting — все для рисования
96716bcb926741e79bb1c284a88083ca.pngOpenNote — Markdown редактор и блокнот для Android на Compose

malx8hbgozt6lee8rmxmg96_s6a.pngКроссплатформа

• Полезные библиотеки для React-приложений в 2025 году: на что обратить внимание
• Кроссплатформенные фреймворки поставили рекорд по распространению в 2024
• 5 причин плохого настроения. История одного Flutter-проекта, который заставил нас поломать голову
• Рецепт приготовления кроссплатформенного мобильного видеоредактора
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Use Swift Packages in Kotlin Multiplatform using Koin
377ae0333d0f4b7b97307c9eea5ee21a.gifFastlane in Kotlin Multiplatform projects
377ae0333d0f4b7b97307c9eea5ee21a.gifNo macros in Dart, how to replace freezed?
377ae0333d0f4b7b97307c9eea5ee21a.gifThe final word on Flutter architecture
377ae0333d0f4b7b97307c9eea5ee21a.gifSharing Data and Files In Compose Multiplatform
377ae0333d0f4b7b97307c9eea5ee21a.gifImplementing Keyboard Accessibility in Flutter
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuild a Video Streaming App like YouTube

7081c634ec176ab6b953d9d19e82a09a.pngРазработка

• Зумеры не просто слушают — они хотят, чтобы их слушали. Как баг изменил наш взгляд на продукт
• 20 идей из интервью с Питером Левелсом: про создание стартапов в одиночку, минимализм и жизнь цифрового кочевника
• Интерфейсы: к вопросу о размерах пальцев и кнопочек
• Что написание кода искусственным интеллектом значит для стартапов?
• Выжимаем максимум из код-ревью и спасаем нервные клетки
• Сделай удобно: подборка UI/UX-кейсов из цифровых и нецифровых продуктов (#10)
• Javascript для бэкенда — отличная идея: Node.js, NPM, Typescript
• Собеседование по System Design: проектируем клон Авито
• TurinTech исправляет последствия «вайб кодинга»
• Discord запустил Social SDK
• Cursor сказал человеку, чтобы тот сам писал свой код
377ae0333d0f4b7b97307c9eea5ee21a.gifSystems Ideas that Sound Good But Almost Never Work
377ae0333d0f4b7b97307c9eea5ee21a.gifCareer advice in 2025
377ae0333d0f4b7b97307c9eea5ee21a.gifSoftware Development Has Too Much Software In It
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuilding MCP with Kotlin: Claude Desktop Controls My Smart Home Lights
96716bcb926741e79bb1c284a88083ca.pngCursor Talk to Figma MCP — создание дизайна в Figma с помощью ИИ

509dc9bde69347ecbe0c21ff2973d7e7.jpgАналитика, маркетинг и монетизация

• Приложения с подпиской 2025 — отчет RevenueCat
• В Adapty выпустили FunnelFox — конструктор Web2App воронок
• Рост мобильного гейминга возобновляется: ИИ, гибридная монетизация и новые стратегии привлечения пользователей
• Galaxy Store снижает комиссию
• Самые скачиваемые и зарабатывающие приложения в мире в феврале 2024
377ae0333d0f4b7b97307c9eea5ee21a.gifMerge Mansion: +50% Revenue to Reclaim the Top Spot

8538129f5e7b404a720121cb9c3814db.jpgAI, Устройства, IoT

• Как я победил в RAG Challenge: от нуля до SoTA за один конкурс
• Как машинное обучение увеличило доход Duolingo на миллионы долларов
• Machine learning на ESP32
• Tasmota + Алиса = любовь. Протокол Matter в самодельных и перепрошитых устройствах умного дома
• Тестируем YandexGPT-5. Когда хотелось быть ChatGPT, но в душе всё ещё Алиса
• Дедупликация объявлений: как мы боремся с одинаковыми размещениями
• Умный домофон SmartIntercom. Ещё один… ДВА
• Демистифицируем машинное обучение — из разработчика в ML-инженеры
• Новая ИИ-модель Roblox может генерировать 3D-объекты

← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.

© Habrahabr.ru