Мобильная разработка за неделю #559 (7 — 13 октября)

В моей новой подборке странное поведение UserDefaults и признание Google Play монополией, анимации космоса и авто-трекинг производительности, роль продуктового дизайнера, как перехватывают зашифрованный HTTP-трафик, новый рекорд приложений с подпиской и многое другое. Подключайтесь!

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

u0xbqx4et70cx5-d3p_ikysp81m.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Остерегайтесь UserDefaults: история о труднопонимаемых ошибках и потерянных данных
• Реализация Shared With You в SwiftUI
• Пишите на Swift как Apple
• История одного модального окна или переходим с UIKit на SwiftUI. Часть 1
• Собеседование iOS-разработчика: проектирование и лайфкодинг (+ все собеседования)
377ae0333d0f4b7b97307c9eea5ee21a.gifWhy I Stopped Building for visionOS (And What Could Bring Me Back)
377ae0333d0f4b7b97307c9eea5ee21a.gifWhat Are 3 Truths About Becoming Successful IOS Tech Lead?
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Make Menu Buttons Easy to Tap in UIKit and SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifThe perfect iOS networking layer does not exist
377ae0333d0f4b7b97307c9eea5ee21a.gifVirtualizing iOS on Apple Silicon
377ae0333d0f4b7b97307c9eea5ee21a.gifSupporting Interactive Input in CLI Tools Using Property Wrappers
377ae0333d0f4b7b97307c9eea5ee21a.gifTranscribing audio from live audio using the Speech framework
377ae0333d0f4b7b97307c9eea5ee21a.gifUsing Binaries as Libraries
377ae0333d0f4b7b97307c9eea5ee21a.gifAnnouncing the Swift Student Challenge 2025
377ae0333d0f4b7b97307c9eea5ee21a.gifUserDefaults and Observation in SwiftUI: How to Achieve Precise Responsiveness
377ae0333d0f4b7b97307c9eea5ee21a.gifCrafting a Typewriter Text Animation in SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifIntroducing Tiny Storage: a small, lightweight UserDefaults replacement
377ae0333d0f4b7b97307c9eea5ee21a.gifApplying visual effects combined with scrolling in SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to listen for property changes in an @Observable class using AsyncStreams
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Swift«s RunLoop: A Comprehensive Guide
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering container views in SwiftUI. Values.
377ae0333d0f4b7b97307c9eea5ee21a.gifSwift Memory: Handle with Care! A Fun Dive into Advanced iOS Memory Management
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngImprove Scroll Transitions | SwiftUI
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngGrid Multi-Selection using Pan Gesture | SwiftUI
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Fix UIKit and SwiftUI Menu Buttons (make them easier to tap)
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngTDD Basics with SwiftUI
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAdopt iPhone 16 Camera Control into your SwiftUI App
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngWWDC22: Design protocol interfaces in Swift
96716bcb926741e79bb1c284a88083ca.pngDevTutor for SwiftUI — примеры SwiftUI
96716bcb926741e79bb1c284a88083ca.pngSwipe Cell SwiftUI — swipe-to-reveal для SwiftUI

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

Магазин приложений Google для Android является незаконной монополией — и теперь ему придется измениться. Судья Джеймс Донато вынес окончательное решение по делу Epic против Google, предписав Google фактически открыть магазин приложений Google Play для конкурентов как минимум на три года. Google должен будет распространять конкурирующие магазины приложений сторонних разработчиков внутри Google Play, а также предоставить им доступ к полному каталогу приложений Google Play. Кроме того, начиная с 1 ноября 2024 года Google также должен ввести ряд других мер для смягчения своей деятельности. Подробнее:

• Google должен открыть Android для сторонних магазинов
• Паря в космосе: анимации с помощью Compose и Canvas
• Как улучшить качество WebRTC-звонков на примере сервиса VK Звонки
• 10 причин НЕ использовать Jetpack Compose
• Авто-трекинг производительности Room Database
• Как грузить данные во ViewModel?
• Selenoid на Android — от А до Я
• Делегаты и делегированные свойства в Kotlin
• Android 16 может позволить вам поместить любое приложение в плавающий пузырь
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering FileProvider in Android: Secure File Sharing Explained
377ae0333d0f4b7b97307c9eea5ee21a.gifPull to Refresh with Compose Material 3
377ae0333d0f4b7b97307c9eea5ee21a.gifExpandable FlowRow with Indicator
377ae0333d0f4b7b97307c9eea5ee21a.gifCoil: My Favorite Image Loading Library for Jetpack Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifHidden Gems of the Kotlin Standard Library — List
377ae0333d0f4b7b97307c9eea5ee21a.gifEnhance Your App«s Performance: Optimizing API Calls with OkHttp Caching
377ae0333d0f4b7b97307c9eea5ee21a.gifA Deep Dive into Android Hardware-Backed Keystore
377ae0333d0f4b7b97307c9eea5ee21a.gifIntroducing Ink API, a new Jetpack library for stylus apps
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering FileProvider in Android: Secure File Sharing Explained
377ae0333d0f4b7b97307c9eea5ee21a.gifPlace Scope Handling on Auto-Pilot with Koin & Compose Navigation
377ae0333d0f4b7b97307c9eea5ee21a.gifDrawing Custom Alerts on Top of Bottom Sheets in Jetpack Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifUpgrading from AGP 7.4.1 to 8.5.2: A Developer«s Diary
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Create a Pulse Effect in Jetpack Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifThe day we (almost) lost 1,000 customers
377ae0333d0f4b7b97307c9eea5ee21a.gifBypassing Multiple Checks on Android Applications: A Security Researcher«s Experience
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngNow in Android: 110 — Android 15, Credential Manager, Android Studio Koala, Compose for TV
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFULL Guide to Kotlin«s Inline Keyword (inline, crossinline & noinline)
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMicro Open Source: From Passion to Pet Project Publication
96716bcb926741e79bb1c284a88083ca.pngMusicSearch — песни, исполнители и все, что с ними связано
96716bcb926741e79bb1c284a88083ca.pngTranscribro — распознавание речи на устройстве
96716bcb926741e79bb1c284a88083ca.pngKLogX — логирование для Kotlin

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

• Попробуйте Tauri
• Что такое Home-виджеты и как их подружить с вашим приложением на Flutter
• Что такое covariant в Dart
• Flutter Web глазами мобильного разработчика
377ae0333d0f4b7b97307c9eea5ee21a.gifAdvanced Flutter Techniques Every Mobile Developer Should Know
377ae0333d0f4b7b97307c9eea5ee21a.gifQt 6.8 LTS Released!
377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding offline-first mobile apps with Supabase, Flutter and Brick
377ae0333d0f4b7b97307c9eea5ee21a.gifHumble Opinion About Getx
377ae0333d0f4b7b97307c9eea5ee21a.gifCustomizable Calendar Widget with Flutter: flutter_custom_calendar
377ae0333d0f4b7b97307c9eea5ee21a.gifBuild a Book Library App for Android & iOS using ROOM KMP (MVVM)

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

• Как Discord сократил Websocket трафик на 40%
• Чем роль продуктового дизайнера отличается от роли UX/UI-дизайнера. Показываю на практике
• Восстановление базы для миллионов пользователей
• Как зеленый Леруа Мерлен стал желтым Лемана ПРО
• Каково это, сделать игру на китайском движке Cocos Creator 3?
• Как перехватывают зашифрованный HTTP-трафик на мобильном устройстве
• LinkedIn сообщает о 10 миллионах фрилансеров на Services Marketplace
• Мобильная разработка в Алисе и YaOS: как это работает
• Путь тестировщика: ошибки, опыт, деньги
• Перформанс мобильных приложений
• Дизайн-система 2.0: менеджеры нужны
• Двое за ноутом, не считая copilot«а, или Как внедрить парное программирование
• Так много тимлидов хороших и разных. А я какой?
• Стартап мечты превратился в кошмар.
377ae0333d0f4b7b97307c9eea5ee21a.gifMongoDB Atlas Data API End-of-Life and Deprecation
377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding an Uber clone
377ae0333d0f4b7b97307c9eea5ee21a.gifDoes it scale (down)?
377ae0333d0f4b7b97307c9eea5ee21a.gifMy First Game with Carimbo, My Homemade Engine, For my Son
377ae0333d0f4b7b97307c9eea5ee21a.gifCognitive Load is what matters
377ae0333d0f4b7b97307c9eea5ee21a.gifMy negative views on Rust
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngDatabases In-Depth — Complete Course
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngElectron Course — Code Desktop Applications (inc. React and Typescript)
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAWS Certified AI Practitioner (AIF-C01) — Full Course to PASS the Certification Exam

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

• Revyze — «TikTok для образования» — перенимает методики Duolingo
• Как TikTok бустит монетизацию, шеринг контента и количество сессий с помощью геймификации
• Xbox начнет продажи игр в приложении для Android
• Что такое Product-Market Fit
• Музыкальный эксперимент TikTok внезапно завершился
• Доходы от приложений с подпиской достигли нового рекорда
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to get started with User-Generated Content

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

• Безумный дом от Яндекс, или как я искал максимально простое решение умного дома
• ChatGPT и Gemini не могут справиться даже с простой математической задачкой на логику
• Продуктовый матчинг, или туда и обратно с миллионами товаров
• Бывшие члены команды Google Maps создали доску для совместной работы на основе ИИ
• В приложение Philips Hue добавили дополненную реальность

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

© Habrahabr.ru