Темы



Мобильная разработка за неделю #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