Мобильная разработка за неделю #566 (25 ноября — 1 декабря)

В новой подборке поисковые подсказки на SwiftUI и сравнение Koin и Dagger, асинхронность в iOS и переживания Jetpack ViewModel, Tracer спустя год, пасьянс для забытой периферии, доходы и установки в России в 3 квартале и многое другое. Подключайтесь!

zklofi5isy35rii_tj_o7z1oq0m.png

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

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Делаем поисковые подсказки в SwiftUI
• Используйте транзакции вместо сохранения в SwiftData и Core Data
• Асинхронность в iOS: как ускорить корпоративные приложения и не сломать мозг разработчика
• Как оптимизировали Яндекс Go для отображения 50+ заказов
• Кодогенерация в iOS-разработке
• Антимонопольный регулятор Бразилии снимает ограничения на IAP в Apple
• Финалисты App Store Award 2024
377ae0333d0f4b7b97307c9eea5ee21a.gifSyntax Highlighting SwiftUI Code with Swift Syntax
377ae0333d0f4b7b97307c9eea5ee21a.gifMy experience of setting up Continuous Delivery with Xcode Cloud for a fresh project
377ae0333d0f4b7b97307c9eea5ee21a.gifStop Making Singletons in Swift: A Dependency Injection Guide
377ae0333d0f4b7b97307c9eea5ee21a.gifSwift TOP 5 Mostly Used Protocols
377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI Zoom Navigation Transitions: Add a Touch of Magic to Your App
377ae0333d0f4b7b97307c9eea5ee21a.gifImplementing search suggestions in SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifGenerating JWT Tokens in Swift for the App Store Connect API
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Sendable in Swift 6
377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding the Avatar View from Messages using SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifWorking with Natural Language framework
377ae0333d0f4b7b97307c9eea5ee21a.gifGetting view size in SwiftUI without GeometryReader
377ae0333d0f4b7b97307c9eea5ee21a.gifTesting requirements with #require in Swift Testing
377ae0333d0f4b7b97307c9eea5ee21a.gifThe power of previews in Xcode
377ae0333d0f4b7b97307c9eea5ee21a.gifPreferenceKey in SwiftUI
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngInteractive Navigation Gesture | SwiftUI
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwift Testing with Test Plans and Floating Point Equality
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuilding a Reading List App
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCreate an Animated Mesh Gradient in SwiftUI
96716bcb926741e79bb1c284a88083ca.pngSwiftfulFirestore — работа с Firestore в Swift Concurrency
96716bcb926741e79bb1c284a88083ca.pngLazyPager for SwiftUI — просмотрщик изображений

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Как я купил нерабочую подделку iPhone 14 Pro Max за «косарь» и портировал на неё чистый Android
• Сравнение Koin и Dagger Hilt в современной Android-разработке
• Полное руководство по написанию чистого кода Jetpack Compose
• Google готовит новые функции для работы с окнами на рабочем столе Android
• Тестируйте лучше, а не больше: новая документация по стратегиям тестирования
• Плагины — это просто
• Как Jetpack ViewModel переживает поворот экрана
377ae0333d0f4b7b97307c9eea5ee21a.gifLet«s look at Bluesky performance on Android
377ae0333d0f4b7b97307c9eea5ee21a.gifRandom Musings on the Android 16 Developer Preview 1
377ae0333d0f4b7b97307c9eea5ee21a.gifGoogle Maps in Jetpack Compose: Polylines
377ae0333d0f4b7b97307c9eea5ee21a.gifPassing Parameters to the ViewModel, the Clean Way
377ae0333d0f4b7b97307c9eea5ee21a.gifScrcpy v3.0
377ae0333d0f4b7b97307c9eea5ee21a.gifCustom modifiers in Jetpack Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifExploring Kotlin Coroutines through Output Questions
377ae0333d0f4b7b97307c9eea5ee21a.gifDeciding Between Flow and Suspend in Repositories: A Detailed Guide
377ae0333d0f4b7b97307c9eea5ee21a.gifWhat«s new in Kotlin 2.1.0
377ae0333d0f4b7b97307c9eea5ee21a.gifApp incorrectly labeled as malware → lost 30,000+ users
377ae0333d0f4b7b97307c9eea5ee21a.gifAdvanced ViewModel injection with DaggerHilt in Jetpack Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifElevating Your Jetpack Compose UI with GraphicsLayer
377ae0333d0f4b7b97307c9eea5ee21a.gifTop 5 Problems Google Leaves to Third-Party Vendors for Android Developers
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngClipping and masking | Jetpack Compose Tips
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngRules about performance tools — Android Developers Backstage
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Observe the REAL Internet Connectivity — Android Studio Kotlin Tutorial
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThe Ultimate Gradle Kotlin Beginner«s Crash Course For 2025
96716bcb926741e79bb1c284a88083ca.pngMaterial Photo Widget — виджет с фотографиями
96716bcb926741e79bb1c284a88083ca.pngConstraints Explorer — отладка layout constraints
96716bcb926741e79bb1c284a88083ca.pngAkkurate — выразительная валидация на Kotlin

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

• Профилирование Flutter-приложений
• Понимание PWA: выбираем между Flutter и Web, и что ожидают заказчики
377ae0333d0f4b7b97307c9eea5ee21a.gifAchieving Type-safe Navigation Results in AndroidX Compose for KMP
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to create a scrollable chart in Compose Multiplatform
377ae0333d0f4b7b97307c9eea5ee21a.gifThis is my approach to state management in Flutter
377ae0333d0f4b7b97307c9eea5ee21a.gifWhy everyone is talking about state management?
377ae0333d0f4b7b97307c9eea5ee21a.gifDevelop Your Own Crashlytics Library Using Kotlin Multiplatform
377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter Riverpod 2.0: Modern State Management and Code Generation
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLet«s Build a Game with Jetpack Compose! (Kotlin Multiplatform)

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

• Tracer спустя год: новые фичи и возможности инструмента для аналитики ошибок в мобильных приложениях
• Легаси шмегаси
• Создаём пасьянс для забытой периферии Nintendo
• Кросс-платформенное тестирование мобильных приложений: особенности, инструменты и решения
• Всё о новых штрафах за утечки данных. Сколько светит и как защитить своё приложение
• BDUI — это спасение от релизов: «Какие ваши доказательства?»
• Упс, что-то пошло не так. Как UX-редактору написать сообщение об ошибке?
• Дизайн-ревью Яндекс Музыки. Тестировщик сравнивает дизайн макета с тестовой сборкой
• Ускорение разработки продуктов с помощью горизонтальных решений
• Перестаньте использовать Copilot. Вред ИИ для разработчиков
• Топ-5 страхов и проблем ИТ-индустрии — монополизация, ИИ, сокращения, выгорания
• Улучшает ли GitHub Copilot качество кода?
• Google Developer Program становится платной
• Huawei хочет 100,000 приложений для HarmonyOS в течение года
377ae0333d0f4b7b97307c9eea5ee21a.gifDemystifying Maestro«s UI Testing Implementation
377ae0333d0f4b7b97307c9eea5ee21a.gifNo GPS required: our app can now locate underground trains
377ae0333d0f4b7b97307c9eea5ee21a.gifTop 10 Rules of Continuous Integration
377ae0333d0f4b7b97307c9eea5ee21a.gifVector Databases Explained Simply
377ae0333d0f4b7b97307c9eea5ee21a.gifLights Out: Tools for controlling webcam LED on ThinkPad X230
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngEvent-Driven Architecture Course — NextJS, Clerk, Webhooks

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

• Доходы и установки в России в 3 квартале 2024 года
• Google пытается отменить антимонопольную победу Epic
• Appcharge получает $26 млн на продажу игровой валюты
• Самые скачиваемые и зарабатывающие приложения в мире в октябре 2024
• Геймифицируй это! Или игровые механики в неигровых продуктах
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to catch the Golden Geese of mobile in 2025

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

• Контроль микроклимата в серверной почти на коленке
• Делаю умный дом в бетонной коробке, где (пока) нет даже раковины: начинаю с умных розеток
• Raspberry Pi запускает Compute Module 5 для встраиваемых приложений

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

© Habrahabr.ru