В этом дайджесте «условное ценообразование» для подписок и как управлять сложностью состояния, еще одно проигранное дело Google и как компания смогла проиграть там, где Apple выиграла, как почувствовать себя кассиром, анимации переходов во Flutter, рефакторинг кода и многое другое!
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

 iOS
iOS
• Custom Segmented Control
• Beeper отказывается от борьбы с Apple и выкладывает код в open source
• Вопросы с собеседований: коллекции в Swift
• Поваренная книга SwiftUI: состояние, привязка, ObservableObject и ObservedObject
• В Internet Archive нашли старые приложения и игры из TestFlight
• Apple представила «условное ценообразование» для подписок
• Plain Swift — a simple Swift IDE for Windows
Plain Swift — a simple Swift IDE for Windows
• Should you add final to all your Swift classes?
Should you add final to all your Swift classes?
• Decoupled stacked sheet navigation with multiple modals in SwiftUI
Decoupled stacked sheet navigation with multiple modals in SwiftUI
• Integrating Haptic Feedback In SwiftUI Projects
Integrating Haptic Feedback In SwiftUI Projects
• Hierarchical background styles in SwiftUI
Hierarchical background styles in SwiftUI
• Stop using MVVM and abusing Observable classes in SwiftUI
Stop using MVVM and abusing Observable classes in SwiftUI
• Coordinator Pattern for iOS Apps
Coordinator Pattern for iOS Apps
• Why I chose The Composable Architecture for SwiftUI and never looked back
Why I chose The Composable Architecture for SwiftUI and never looked back
• Mastering MapKit in SwiftUI. Interactions.
Mastering MapKit in SwiftUI. Interactions.
• Preparing your App for VoiceOver: Accessibility Actions
Preparing your App for VoiceOver: Accessibility Actions
• How to get the most played Apple Music songs and albums using Swift
How to get the most played Apple Music songs and albums using Swift
• Quick Search with SwiftUI Searchable
Quick Search with SwiftUI Searchable
• Xcode 15’s Hidden Treasure: Logging Like a Pro 2024
Xcode 15’s Hidden Treasure: Logging Like a Pro 2024
• Swift: Singleton Pattern
Swift: Singleton Pattern
• The Case Against [unowned self]
The Case Against [unowned self]
• iOS UI Testing with Deep Links
iOS UI Testing with Deep Links
• Scalable and Modular System Design for the simplest iOS App
Scalable and Modular System Design for the simplest iOS App
• Creating a Scrolling Parallax Effect with SwiftUI
Creating a Scrolling Parallax Effect with SwiftUI
• SwiftUI View Models: Lifecycle Quirks
SwiftUI View Models: Lifecycle Quirks
• Become More Senior iOS Developer with these 4 Xcode Tips & Tricks
Become More Senior iOS Developer with these 4 Xcode Tips & Tricks
• ❸☻- Simulation Emojimix on Xcode
❸☻- Simulation Emojimix on Xcode
• Building Complex Scroll Animations With New iOS 17 APIs
Building Complex Scroll Animations With New iOS 17 APIs
• SwiftUI Widgets | App Groups | Charts | Expense Tracker App
SwiftUI Widgets | App Groups | Charts | Expense Tracker App
• How To Create A Submission Form In Xcode 15
How To Create A Submission Form In Xcode 15
• This is the CRAZIEST Swift code you’ll ever see
This is the CRAZIEST Swift code you’ll ever see
• SwiftData CloudKit
SwiftData CloudKit
• SwiftUI Animated Toasts
SwiftUI Animated Toasts
• BadgeIcon: системные иконки для SwiftUI
BadgeIcon: системные иконки для SwiftUI
• Google AI SDK for Swift: генеративный ИИ для ваших приложений
Google AI SDK for Swift: генеративный ИИ для ваших приложений
 Android
Android
• Как управлять сложностью состояния — Сергей Опивалов
• Создаем пассивный UI в Jetpack Compose
• Подключение сканера к Android или как почувствовать себя кассиром
• Stone. Квалификаторы и идентификаторы
• Как устроен Gradle Config Cache. Лучшие Практики. Интервью с инженером команды Gradle
• Google выплатит $700 млн в еще одном споре о Play Store + Все изменения, которые произойдут в Google Play и загрузке приложений
• Что нового в AOSP 14
• Вопросы с собеседований: для чего нужны inline функции
• Animating Inside and Outside the Box with Jetpack Compose
Animating Inside and Outside the Box with Jetpack Compose
• The ViewModel’s leaked Flow collectors problem
The ViewModel’s leaked Flow collectors problem
• Glassmorphic Bottom Navigation in Jetpack Compose
Glassmorphic Bottom Navigation in Jetpack Compose
• Building Passive UI in Jetpack Compose
Building Passive UI in Jetpack Compose
• Kandy: the new Kotlin plotting library by JetBrains
Kandy: the new Kotlin plotting library by JetBrains
• Don’t use var in enums
Don’t use var in enums
• Unleashing WebSocket in Android?
Unleashing WebSocket in Android?
• Effect Handlers in Jetpack Compose: A Complete Guide
Effect Handlers in Jetpack Compose: A Complete Guide
• Kotlin under the hood: how to get rid of recursion
Kotlin under the hood: how to get rid of recursion
• Foreground Services in Android 14: What’s Changing?
Foreground Services in Android 14: What’s Changing?
• Multi-Module with Clean Architecture
Multi-Module with Clean Architecture
• Crash Course on the Android UI Layer | Part 2
Crash Course on the Android UI Layer | Part 2
• Fortifying Android Apps: A Comprehensive Guide to Securing Your App and Codebase with Kotlin
Fortifying Android Apps: A Comprehensive Guide to Securing Your App and Codebase with Kotlin
• State Management in Jetpack Compose
State Management in Jetpack Compose
• Live Streaming and Audio Equalizer with ExoPlayer in Jetpack Compose
Live Streaming and Audio Equalizer with ExoPlayer in Jetpack Compose
• Android Thread & Relation With Coroutine
Android Thread & Relation With Coroutine
• Demystifying Kotlin: Understanding the Inner Workings of Inline Functions
Demystifying Kotlin: Understanding the Inner Workings of Inline Functions
• How to handle single-event in Jetpack Compose
How to handle single-event in Jetpack Compose
• Android Launch Modes Explained
Android Launch Modes Explained
• (W)rap — Android Developers Backstage
(W)rap — Android Developers Backstage
• Introducing Gemini, Google at NeurIPS 2023, and more dev news!
Introducing Gemini, Google at NeurIPS 2023, and more dev news!
• Performance Optimization with @Stable and @Immutable in Jetpack Compose
Performance Optimization with @Stable and @Immutable in Jetpack Compose
• Demystifying Pixel Shaders (AGSL)
Demystifying Pixel Shaders (AGSL)
• Do You Have to Learn Clean Architecture as a Beginner?
Do You Have to Learn Clean Architecture as a Beginner?
• NanoKt: библиотека расширений для Android и Kotlin
NanoKt: библиотека расширений для Android и Kotlin
• Ludwig: набор UI-компонентов для Jetpack Compose
Ludwig: набор UI-компонентов для Jetpack Compose
• Android-PiP: реализация «картинки в картинке»
Android-PiP: реализация «картинки в картинке»
 Кроссплатформа
Кроссплатформа
• Transition Animation: настраиваем анимацию переходов во Flutter
• Создаем federated plugin для Flutter-проекта
• Автоматизированное тестирование событий аналитики в мобильном приложении: насколько это реально и оправдано
• Just DUIT — первый взгляд на server-driven UI фреймворк для Flutter
• Мультиплатформенная разработка на чистой Java
• Android System Design: делаем библиотеку Firebase
• Handle push and locale notifications in your Flutter app
• Jetpack Preferences DataStore in Kotlin Multiplatform
Jetpack Preferences DataStore in Kotlin Multiplatform
• Flutter and SQLite: A Deep Dive into Local Data Persistence
Flutter and SQLite: A Deep Dive into Local Data Persistence
• Globe (a Flutter & Dart deployment platform) is now in public preview
Globe (a Flutter & Dart deployment platform) is now in public preview
• How we built it: Ask Dash — A generative AI Flutter application
How we built it: Ask Dash — A generative AI Flutter application
• A novel architecture for Multiplatform applications with Pavel Lahoda
A novel architecture for Multiplatform applications with Pavel Lahoda
 Разработка
Разработка
• 13 советов для начинающих разработчиков, которые уже прочитали все остальные советы
• Рефакторинг кода, и как его не бояться
• Cоздание идеальных вкладок
• Как подготовиться к собеседованию по System Design мобильному разработчику
• Mobile Web, навигация и при чем тут Nginx
• «Они убивают Lottie — молодцы!»
• История разработки приложения для складных смартфонов Samsung. Часть 2 — гайдлайны
• Модульная запутанность. Как распарсить одну модель в разных модулях
• Оптимизация и автоматизация в бэкенд-разработке мобильных приложений: как ускорить разработку в четыре раза
• Разработка Авто.ру и роль руководителя в команде
• Что такое observability мобильного приложения
• Мобильные релизы в Авито
• Силиконовая Долина глазами российского разработчика
• Релокация на Кипр
• Redesigning our global order tracking experience
Redesigning our global order tracking experience
• I’ve vastly misunderstood the Single Responsibility Principle
I’ve vastly misunderstood the Single Responsibility Principle
• Empirically supported code review best practices
Empirically supported code review best practices
• How to Scale an App to 10 Million Users on AWS
How to Scale an App to 10 Million Users on AWS
• We Can’t Hire You
We Can’t Hire You
 Аналитика, маркетинг и монетизация
Аналитика, маркетинг и монетизация
• Эпический вопрос: как Google проиграл там, где Apple выиграла
• 5 трендов в области маркетинга приложений 2023 — и их проекция на 2024
• Краткое руководство по анализу данных и проведению продуктовых исследований
• Claim, социальная сеть, позволяющая пользователям зарабатывать и обмениваться вознаграждениями, привлекает $4 млн
• Spill, инклюзивная альтернатива X, запускает бету на iOS и Android
• Location — cоздатели Zenly выпускают приложение, похожее на Zenly
• Маркетологи в мобайле. Итоги года 2023. Часть 1
• Топ быстрорастущих приложений в России в декабре
• Итоги года и планы на 2024 от Adjust
• Количество пользователей социальной сети Jagat превысила 10 миллионов
• Спрос на приложения для ментального здоровья почти сошел на нет
• Самые скачиваемые приложения в мире в ноябре 2023
• Using campaign links to track impressions, downloads, and sales
Using campaign links to track impressions, downloads, and sales
 AI, Устройства, IoT
AI, Устройства, IoT
• Управляем школьниками, не привлекая внимание санитаров
• Как пользователи убедили Chevrolet продать им машину за 100 рублей — или проблемы использования ИИ-чатботов
• NORVI Arita: добавляем SD картридер и веб-интерфейс (почти контроллер мечты)
• Сравнение популярных брокеров MQTT с открытым исходным кодом
• Apple разработала прорывной метод запуска LLM на устройствах с ограниченной памятью
• Apple останавливает продажи Apple Watch Series 9/Ultra 2 из-за нарушений патентов
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

 iOS
iOS• Custom Segmented Control
• Beeper отказывается от борьбы с Apple и выкладывает код в open source
• Вопросы с собеседований: коллекции в Swift
• Поваренная книга SwiftUI: состояние, привязка, ObservableObject и ObservedObject
• В Internet Archive нашли старые приложения и игры из TestFlight
• Apple представила «условное ценообразование» для подписок
•
 Plain Swift — a simple Swift IDE for Windows
Plain Swift — a simple Swift IDE for Windows•
 Should you add final to all your Swift classes?
Should you add final to all your Swift classes?•
 Decoupled stacked sheet navigation with multiple modals in SwiftUI
Decoupled stacked sheet navigation with multiple modals in SwiftUI•
 Integrating Haptic Feedback In SwiftUI Projects
Integrating Haptic Feedback In SwiftUI Projects•
 Hierarchical background styles in SwiftUI
Hierarchical background styles in SwiftUI•
 Stop using MVVM and abusing Observable classes in SwiftUI
Stop using MVVM and abusing Observable classes in SwiftUI•
 Coordinator Pattern for iOS Apps
Coordinator Pattern for iOS Apps•
 Why I chose The Composable Architecture for SwiftUI and never looked back
Why I chose The Composable Architecture for SwiftUI and never looked back•
 Mastering MapKit in SwiftUI. Interactions.
Mastering MapKit in SwiftUI. Interactions.•
 Preparing your App for VoiceOver: Accessibility Actions
Preparing your App for VoiceOver: Accessibility Actions•
 How to get the most played Apple Music songs and albums using Swift
How to get the most played Apple Music songs and albums using Swift•
 Quick Search with SwiftUI Searchable
Quick Search with SwiftUI Searchable•
 Xcode 15’s Hidden Treasure: Logging Like a Pro 2024
Xcode 15’s Hidden Treasure: Logging Like a Pro 2024•
 Swift: Singleton Pattern
Swift: Singleton Pattern•
 The Case Against [unowned self]
The Case Against [unowned self]•
 iOS UI Testing with Deep Links
iOS UI Testing with Deep Links•
 Scalable and Modular System Design for the simplest iOS App
Scalable and Modular System Design for the simplest iOS App•
 Creating a Scrolling Parallax Effect with SwiftUI
Creating a Scrolling Parallax Effect with SwiftUI•
 SwiftUI View Models: Lifecycle Quirks
SwiftUI View Models: Lifecycle Quirks•
 Become More Senior iOS Developer with these 4 Xcode Tips & Tricks
Become More Senior iOS Developer with these 4 Xcode Tips & Tricks•
 ❸☻- Simulation Emojimix on Xcode
❸☻- Simulation Emojimix on Xcode•
 Building Complex Scroll Animations With New iOS 17 APIs
Building Complex Scroll Animations With New iOS 17 APIs•
 SwiftUI Widgets | App Groups | Charts | Expense Tracker App
SwiftUI Widgets | App Groups | Charts | Expense Tracker App•
 How To Create A Submission Form In Xcode 15
How To Create A Submission Form In Xcode 15•
 This is the CRAZIEST Swift code you’ll ever see
This is the CRAZIEST Swift code you’ll ever see•
 SwiftData CloudKit
SwiftData CloudKit•
 SwiftUI Animated Toasts
SwiftUI Animated Toasts•
 BadgeIcon: системные иконки для SwiftUI
BadgeIcon: системные иконки для SwiftUI•
 Google AI SDK for Swift: генеративный ИИ для ваших приложений
Google AI SDK for Swift: генеративный ИИ для ваших приложений Android
Android• Как управлять сложностью состояния — Сергей Опивалов
• Создаем пассивный UI в Jetpack Compose
• Подключение сканера к Android или как почувствовать себя кассиром
• Stone. Квалификаторы и идентификаторы
• Как устроен Gradle Config Cache. Лучшие Практики. Интервью с инженером команды Gradle
• Google выплатит $700 млн в еще одном споре о Play Store + Все изменения, которые произойдут в Google Play и загрузке приложений
• Что нового в AOSP 14
• Вопросы с собеседований: для чего нужны inline функции
•
 Animating Inside and Outside the Box with Jetpack Compose
Animating Inside and Outside the Box with Jetpack Compose•
 The ViewModel’s leaked Flow collectors problem
The ViewModel’s leaked Flow collectors problem•
 Glassmorphic Bottom Navigation in Jetpack Compose
Glassmorphic Bottom Navigation in Jetpack Compose•
 Building Passive UI in Jetpack Compose
Building Passive UI in Jetpack Compose•
 Kandy: the new Kotlin plotting library by JetBrains
Kandy: the new Kotlin plotting library by JetBrains•
 Don’t use var in enums
Don’t use var in enums•
 Unleashing WebSocket in Android?
Unleashing WebSocket in Android?•
 Effect Handlers in Jetpack Compose: A Complete Guide
Effect Handlers in Jetpack Compose: A Complete Guide•
 Kotlin under the hood: how to get rid of recursion
Kotlin under the hood: how to get rid of recursion•
 Foreground Services in Android 14: What’s Changing?
Foreground Services in Android 14: What’s Changing?•
 Multi-Module with Clean Architecture
Multi-Module with Clean Architecture•
 Crash Course on the Android UI Layer | Part 2
Crash Course on the Android UI Layer | Part 2•
 Fortifying Android Apps: A Comprehensive Guide to Securing Your App and Codebase with Kotlin
Fortifying Android Apps: A Comprehensive Guide to Securing Your App and Codebase with Kotlin•
 State Management in Jetpack Compose
State Management in Jetpack Compose•
 Live Streaming and Audio Equalizer with ExoPlayer in Jetpack Compose
Live Streaming and Audio Equalizer with ExoPlayer in Jetpack Compose•
 Android Thread & Relation With Coroutine
Android Thread & Relation With Coroutine•
 Demystifying Kotlin: Understanding the Inner Workings of Inline Functions
Demystifying Kotlin: Understanding the Inner Workings of Inline Functions•
 How to handle single-event in Jetpack Compose
How to handle single-event in Jetpack Compose•
 Android Launch Modes Explained
Android Launch Modes Explained•
 (W)rap — Android Developers Backstage
(W)rap — Android Developers Backstage•
 Introducing Gemini, Google at NeurIPS 2023, and more dev news!
Introducing Gemini, Google at NeurIPS 2023, and more dev news!•
 Performance Optimization with @Stable and @Immutable in Jetpack Compose
Performance Optimization with @Stable and @Immutable in Jetpack Compose•
 Demystifying Pixel Shaders (AGSL)
Demystifying Pixel Shaders (AGSL)•
 Do You Have to Learn Clean Architecture as a Beginner?
Do You Have to Learn Clean Architecture as a Beginner?•
 NanoKt: библиотека расширений для Android и Kotlin
NanoKt: библиотека расширений для Android и Kotlin•
 Ludwig: набор UI-компонентов для Jetpack Compose
Ludwig: набор UI-компонентов для Jetpack Compose•
 Android-PiP: реализация «картинки в картинке»
Android-PiP: реализация «картинки в картинке» Кроссплатформа
Кроссплатформа• Transition Animation: настраиваем анимацию переходов во Flutter
• Создаем federated plugin для Flutter-проекта
• Автоматизированное тестирование событий аналитики в мобильном приложении: насколько это реально и оправдано
• Just DUIT — первый взгляд на server-driven UI фреймворк для Flutter
• Мультиплатформенная разработка на чистой Java
• Android System Design: делаем библиотеку Firebase
• Handle push and locale notifications in your Flutter app
•
 Jetpack Preferences DataStore in Kotlin Multiplatform
Jetpack Preferences DataStore in Kotlin Multiplatform•
 Flutter and SQLite: A Deep Dive into Local Data Persistence
Flutter and SQLite: A Deep Dive into Local Data Persistence•
 Globe (a Flutter & Dart deployment platform) is now in public preview
Globe (a Flutter & Dart deployment platform) is now in public preview•
 How we built it: Ask Dash — A generative AI Flutter application
How we built it: Ask Dash — A generative AI Flutter application•
 A novel architecture for Multiplatform applications with Pavel Lahoda
A novel architecture for Multiplatform applications with Pavel Lahoda Разработка
Разработка• 13 советов для начинающих разработчиков, которые уже прочитали все остальные советы
• Рефакторинг кода, и как его не бояться
• Cоздание идеальных вкладок
• Как подготовиться к собеседованию по System Design мобильному разработчику
• Mobile Web, навигация и при чем тут Nginx
• «Они убивают Lottie — молодцы!»
• История разработки приложения для складных смартфонов Samsung. Часть 2 — гайдлайны
• Модульная запутанность. Как распарсить одну модель в разных модулях
• Оптимизация и автоматизация в бэкенд-разработке мобильных приложений: как ускорить разработку в четыре раза
• Разработка Авто.ру и роль руководителя в команде
• Что такое observability мобильного приложения
• Мобильные релизы в Авито
• Силиконовая Долина глазами российского разработчика
• Релокация на Кипр
•
 Redesigning our global order tracking experience
Redesigning our global order tracking experience•
 I’ve vastly misunderstood the Single Responsibility Principle
I’ve vastly misunderstood the Single Responsibility Principle•
 Empirically supported code review best practices
Empirically supported code review best practices•
 How to Scale an App to 10 Million Users on AWS
How to Scale an App to 10 Million Users on AWS•
 We Can’t Hire You
We Can’t Hire You Аналитика, маркетинг и монетизация
Аналитика, маркетинг и монетизация• Эпический вопрос: как Google проиграл там, где Apple выиграла
• 5 трендов в области маркетинга приложений 2023 — и их проекция на 2024
• Краткое руководство по анализу данных и проведению продуктовых исследований
• Claim, социальная сеть, позволяющая пользователям зарабатывать и обмениваться вознаграждениями, привлекает $4 млн
• Spill, инклюзивная альтернатива X, запускает бету на iOS и Android
• Location — cоздатели Zenly выпускают приложение, похожее на Zenly
• Маркетологи в мобайле. Итоги года 2023. Часть 1
• Топ быстрорастущих приложений в России в декабре
• Итоги года и планы на 2024 от Adjust
• Количество пользователей социальной сети Jagat превысила 10 миллионов
• Спрос на приложения для ментального здоровья почти сошел на нет
• Самые скачиваемые приложения в мире в ноябре 2023
•
 Using campaign links to track impressions, downloads, and sales
Using campaign links to track impressions, downloads, and sales AI, Устройства, IoT
AI, Устройства, IoT• Управляем школьниками, не привлекая внимание санитаров
• Как пользователи убедили Chevrolet продать им машину за 100 рублей — или проблемы использования ИИ-чатботов
• NORVI Arita: добавляем SD картридер и веб-интерфейс (почти контроллер мечты)
• Сравнение популярных брокеров MQTT с открытым исходным кодом
• Apple разработала прорывной метод запуска LLM на устройствах с ограниченной памятью
• Apple останавливает продажи Apple Watch Series 9/Ultra 2 из-за нарушений патентов
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
 
          