В моей новой подборке странное поведение UserDefaults и признание Google Play монополией, анимации космоса и авто-трекинг производительности, роль продуктового дизайнера, как перехватывают зашифрованный HTTP-трафик, новый рекорд приложений с подпиской и многое другое. Подключайтесь!
Подписывайтесь на мой Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
iOS
• Остерегайтесь UserDefaults: история о труднопонимаемых ошибках и потерянных данных
• Реализация Shared With You в SwiftUI
• Пишите на Swift как Apple
• История одного модального окна или переходим с UIKit на SwiftUI. Часть 1
• Собеседование iOS-разработчика: проектирование и лайфкодинг (+ все собеседования)
• Why I Stopped Building for visionOS (And What Could Bring Me Back)
• What Are 3 Truths About Becoming Successful IOS Tech Lead?
• How to Make Menu Buttons Easy to Tap in UIKit and SwiftUI
• The perfect iOS networking layer does not exist
• Virtualizing iOS on Apple Silicon
• Supporting Interactive Input in CLI Tools Using Property Wrappers
• Transcribing audio from live audio using the Speech framework
• Using Binaries as Libraries
• Announcing the Swift Student Challenge 2025
• UserDefaults and Observation in SwiftUI: How to Achieve Precise Responsiveness
• Crafting a Typewriter Text Animation in SwiftUI
• Introducing Tiny Storage: a small, lightweight UserDefaults replacement
• Applying visual effects combined with scrolling in SwiftUI
• How to listen for property changes in an @Observable class using AsyncStreams
• Mastering Swift’s RunLoop: A Comprehensive Guide
• Mastering container views in SwiftUI. Values.
• Swift Memory: Handle with Care! A Fun Dive into Advanced iOS Memory Management
• Improve Scroll Transitions | SwiftUI
• Grid Multi-Selection using Pan Gesture | SwiftUI
• How to Fix UIKit and SwiftUI Menu Buttons (make them easier to tap)
• TDD Basics with SwiftUI
• Adopt iPhone 16 Camera Control into your SwiftUI App
• WWDC22: Design protocol interfaces in Swift
• DevTutor for SwiftUI — примеры SwiftUI
• Swipe Cell SwiftUI — swipe-to-reveal для SwiftUI
Android
Магазин приложений 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 может позволить вам поместить любое приложение в плавающий пузырь
• Mastering FileProvider in Android: Secure File Sharing Explained
• Pull to Refresh with Compose Material 3
• Expandable FlowRow with Indicator
• Coil: My Favorite Image Loading Library for Jetpack Compose
• Hidden Gems of the Kotlin Standard Library — List
• Enhance Your App’s Performance: Optimizing API Calls with OkHttp Caching
• A Deep Dive into Android Hardware-Backed Keystore
• Introducing Ink API, a new Jetpack library for stylus apps
• Mastering FileProvider in Android: Secure File Sharing Explained
• Place Scope Handling on Auto-Pilot with Koin & Compose Navigation
• Drawing Custom Alerts on Top of Bottom Sheets in Jetpack Compose
• Upgrading from AGP 7.4.1 to 8.5.2: A Developer’s Diary
• How to Create a Pulse Effect in Jetpack Compose
• The day we (almost) lost 1,000 customers
• Bypassing Multiple Checks on Android Applications: A Security Researcher’s Experience
• Now in Android: 110 — Android 15, Credential Manager, Android Studio Koala, Compose for TV
• FULL Guide to Kotlin’s Inline Keyword (inline, crossinline & noinline)
• Micro Open Source: From Passion to Pet Project Publication
• MusicSearch — песни, исполнители и все, что с ними связано
• Transcribro — распознавание речи на устройстве
• KLogX — логирование для Kotlin
Кроссплатформа
• Попробуйте Tauri
• Что такое Home-виджеты и как их подружить с вашим приложением на Flutter
• Что такое covariant в Dart
• Flutter Web глазами мобильного разработчика
• Advanced Flutter Techniques Every Mobile Developer Should Know
• Qt 6.8 LTS Released!
• Building offline-first mobile apps with Supabase, Flutter and Brick
• Humble Opinion About Getx
• Customizable Calendar Widget with Flutter: flutter_custom_calendar
• Build a Book Library App for Android & iOS using ROOM KMP (MVVM)
Разработка
• Как Discord сократил Websocket трафик на 40%
• Чем роль продуктового дизайнера отличается от роли UX/UI-дизайнера. Показываю на практике
• Восстановление базы для миллионов пользователей
• Как зеленый Леруа Мерлен стал желтым Лемана ПРО
• Каково это, сделать игру на китайском движке Cocos Creator 3?
• Как перехватывают зашифрованный HTTP-трафик на мобильном устройстве
• LinkedIn сообщает о 10 миллионах фрилансеров на Services Marketplace
• Мобильная разработка в Алисе и YaOS: как это работает
• Путь тестировщика: ошибки, опыт, деньги
• Перформанс мобильных приложений
• Дизайн-система 2.0: менеджеры нужны
• Двое за ноутом, не считая copilot’а, или Как внедрить парное программирование
• Так много тимлидов хороших и разных. А я какой?
• Стартап мечты превратился в кошмар.
• MongoDB Atlas Data API End-of-Life and Deprecation
• Building an Uber clone
• Does it scale (down)?
• My First Game with Carimbo, My Homemade Engine, For my Son
• Cognitive Load is what matters
• My negative views on Rust
• Databases In-Depth – Complete Course
• Electron Course — Code Desktop Applications (inc. React and Typescript)
• AWS Certified AI Practitioner (AIF-C01) – Full Course to PASS the Certification Exam
Аналитика, маркетинг и монетизация
• Revyze — «TikTok для образования» — перенимает методики Duolingo
• Как TikTok бустит монетизацию, шеринг контента и количество сессий с помощью геймификации
• Xbox начнет продажи игр в приложении для Android
• Что такое Product-Market Fit
• Музыкальный эксперимент TikTok внезапно завершился
• Доходы от приложений с подпиской достигли нового рекорда
• How to get started with User-Generated Content
AI, Устройства, IoT
• Безумный дом от Яндекс, или как я искал максимально простое решение умного дома
• ChatGPT и Gemini не могут справиться даже с простой математической задачкой на логику
• Продуктовый матчинг, или туда и обратно с миллионами товаров
• Бывшие члены команды Google Maps создали доску для совместной работы на основе ИИ
• В приложение Philips Hue добавили дополненную реальность
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на мой Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
iOS
• Остерегайтесь UserDefaults: история о труднопонимаемых ошибках и потерянных данных
• Реализация Shared With You в SwiftUI
• Пишите на Swift как Apple
• История одного модального окна или переходим с UIKit на SwiftUI. Часть 1
• Собеседование iOS-разработчика: проектирование и лайфкодинг (+ все собеседования)
• Why I Stopped Building for visionOS (And What Could Bring Me Back)
• What Are 3 Truths About Becoming Successful IOS Tech Lead?
• How to Make Menu Buttons Easy to Tap in UIKit and SwiftUI
• The perfect iOS networking layer does not exist
• Virtualizing iOS on Apple Silicon
• Supporting Interactive Input in CLI Tools Using Property Wrappers
• Transcribing audio from live audio using the Speech framework
• Using Binaries as Libraries
• Announcing the Swift Student Challenge 2025
• UserDefaults and Observation in SwiftUI: How to Achieve Precise Responsiveness
• Crafting a Typewriter Text Animation in SwiftUI
• Introducing Tiny Storage: a small, lightweight UserDefaults replacement
• Applying visual effects combined with scrolling in SwiftUI
• How to listen for property changes in an @Observable class using AsyncStreams
• Mastering Swift’s RunLoop: A Comprehensive Guide
• Mastering container views in SwiftUI. Values.
• Swift Memory: Handle with Care! A Fun Dive into Advanced iOS Memory Management
• Improve Scroll Transitions | SwiftUI
• Grid Multi-Selection using Pan Gesture | SwiftUI
• How to Fix UIKit and SwiftUI Menu Buttons (make them easier to tap)
• TDD Basics with SwiftUI
• Adopt iPhone 16 Camera Control into your SwiftUI App
• WWDC22: Design protocol interfaces in Swift
• DevTutor for SwiftUI — примеры SwiftUI
• Swipe Cell SwiftUI — swipe-to-reveal для SwiftUI
Android
Магазин приложений 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 может позволить вам поместить любое приложение в плавающий пузырь
• Mastering FileProvider in Android: Secure File Sharing Explained
• Pull to Refresh with Compose Material 3
• Expandable FlowRow with Indicator
• Coil: My Favorite Image Loading Library for Jetpack Compose
• Hidden Gems of the Kotlin Standard Library — List
• Enhance Your App’s Performance: Optimizing API Calls with OkHttp Caching
• A Deep Dive into Android Hardware-Backed Keystore
• Introducing Ink API, a new Jetpack library for stylus apps
• Mastering FileProvider in Android: Secure File Sharing Explained
• Place Scope Handling on Auto-Pilot with Koin & Compose Navigation
• Drawing Custom Alerts on Top of Bottom Sheets in Jetpack Compose
• Upgrading from AGP 7.4.1 to 8.5.2: A Developer’s Diary
• How to Create a Pulse Effect in Jetpack Compose
• The day we (almost) lost 1,000 customers
• Bypassing Multiple Checks on Android Applications: A Security Researcher’s Experience
• Now in Android: 110 — Android 15, Credential Manager, Android Studio Koala, Compose for TV
• FULL Guide to Kotlin’s Inline Keyword (inline, crossinline & noinline)
• Micro Open Source: From Passion to Pet Project Publication
• MusicSearch — песни, исполнители и все, что с ними связано
• Transcribro — распознавание речи на устройстве
• KLogX — логирование для Kotlin
Кроссплатформа
• Попробуйте Tauri
• Что такое Home-виджеты и как их подружить с вашим приложением на Flutter
• Что такое covariant в Dart
• Flutter Web глазами мобильного разработчика
• Advanced Flutter Techniques Every Mobile Developer Should Know
• Qt 6.8 LTS Released!
• Building offline-first mobile apps with Supabase, Flutter and Brick
• Humble Opinion About Getx
• Customizable Calendar Widget with Flutter: flutter_custom_calendar
• Build a Book Library App for Android & iOS using ROOM KMP (MVVM)
Разработка
• Как Discord сократил Websocket трафик на 40%
• Чем роль продуктового дизайнера отличается от роли UX/UI-дизайнера. Показываю на практике
• Восстановление базы для миллионов пользователей
• Как зеленый Леруа Мерлен стал желтым Лемана ПРО
• Каково это, сделать игру на китайском движке Cocos Creator 3?
• Как перехватывают зашифрованный HTTP-трафик на мобильном устройстве
• LinkedIn сообщает о 10 миллионах фрилансеров на Services Marketplace
• Мобильная разработка в Алисе и YaOS: как это работает
• Путь тестировщика: ошибки, опыт, деньги
• Перформанс мобильных приложений
• Дизайн-система 2.0: менеджеры нужны
• Двое за ноутом, не считая copilot’а, или Как внедрить парное программирование
• Так много тимлидов хороших и разных. А я какой?
• Стартап мечты превратился в кошмар.
• MongoDB Atlas Data API End-of-Life and Deprecation
• Building an Uber clone
• Does it scale (down)?
• My First Game with Carimbo, My Homemade Engine, For my Son
• Cognitive Load is what matters
• My negative views on Rust
• Databases In-Depth – Complete Course
• Electron Course — Code Desktop Applications (inc. React and Typescript)
• AWS Certified AI Practitioner (AIF-C01) – Full Course to PASS the Certification Exam
Аналитика, маркетинг и монетизация
• Revyze — «TikTok для образования» — перенимает методики Duolingo
• Как TikTok бустит монетизацию, шеринг контента и количество сессий с помощью геймификации
• Xbox начнет продажи игр в приложении для Android
• Что такое Product-Market Fit
• Музыкальный эксперимент TikTok внезапно завершился
• Доходы от приложений с подпиской достигли нового рекорда
• How to get started with User-Generated Content
AI, Устройства, IoT
• Безумный дом от Яндекс, или как я искал максимально простое решение умного дома
• ChatGPT и Gemini не могут справиться даже с простой математической задачкой на логику
• Продуктовый матчинг, или туда и обратно с миллионами товаров
• Бывшие члены команды Google Maps создали доску для совместной работы на основе ИИ
• В приложение Philips Hue добавили дополненную реальность
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.