В этом выпуске борьба с утечками памяти и 10 самых распространенных ошибок с Jetpack Compose, подходы к многомодульной функциональной архитектуре и реализация pixel-perfect тестирования дизайн-системы, 2.5 тысяч экрано-состояний и тесты на сотнях устройств, причины не использовать Server Driven UI, «осознанные» истории Calm и многое другое. Подключайтесь!
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/vx/ej/qg/vxejqgd4i9oioqjk250ctktihv4.png)
iOS
• Обновление CocoaPods: пошаговое руководство
• Карточка навигации для iOS 18 на SwiftUI
• Проверяем пакет iOS-приложения
• Шина данных и Swift: применение в слабосвязанных архитектурах
• SwiftUI AlignmentGuide
• Стратегия автотестирования для iOS приложений
• 5 вопросов для iOS разработчика
• Борьба с утечками памяти: от задачи до победы
• ARC в Swift: лучшие практики для предотвращения утечек памяти
•
SwiftUI for Mac 2024
•
Understanding container values in SwiftUI
•
Exploring SwiftUI: Working with Rotate Gesture
•
Dynamic Library vs. Static Library: Optimising iOS App Performance
•
SwiftUI Tip: Avoid Nesting ObservableObjects
•
How to make ZStack content fully scrollable in a SwiftUI ScrollView
•
Send data Between iOS Apps and Extensions Using Darwin Notifications
•
Transcribing audio from a file using the Speech framework
•
SwiftUI Modifiers Deep Dive: containerBackground
•
Marking Swift Properties Available by iOS Version
•
Working with UDP in SwiftNIO
•
Exploring WidgetKit: Creating Configurable Control Widgets in iOS 18 and SwiftUI
•
Everything you never thought you wanted to know about emoji flags
•
Mastering Navigation in SwiftUI Using Coordinator Pattern
•
Design Your Dark and Tinted Versions of Your App Icon for iOS 18
•
Import & Export Swift Data with Password
•
Interactive Expandable Header — SwiftUI
•
SwiftDraw — парсинг и отрисовка SVG-изображений
•
Settings iOS — Настройки на SwiftUI
Android
• 10 самых распространенных ошибок с Jetpack Compose
• Kotlin Coroutines. От А до Я
• Подходы к многомодульной функциональной архитектуре на Android
• Автообновление через GitHub releases с помощью Hilt и Retrofit в Android
• Mapping объектов с помощью MapStruct
• Как переход на AGP&Gradle 8.* изменил взгляд на работу с производительностью сборки
• 5 уроков из опыта реализации pixel-perfect тестирования дизайн-системы в Android
• Gradle-сборка. Измеряем самое важное
• Шифруем файлы в Android
• Выпуск Android 15 перенесен на октябрь
•
Effective Map Composables: Draggable Markers
•
Kotlin Granular Analytics With Lifecycle Delegate
•
Add powerful analytics modifiers in Jetpack Compose with ModifierLocal
•
Strikt Unit Testing In Kotlin
•
Adding 16 KB Page Size to Android
•
NFC on Android: Creating a prepaid payment system using NDEF tags
•
Hard-earned Learnings From Navigating Google Play App Rejections
•
Kotlin Extensions: A Complete Guide to Extension Functions in Kotlin
•
An effective testing strategy for Android – Unit Testing
•
Convergence in a multi-module application
•
How to implement Synchronization in Room Database in Kotlin
•
Jetpack Compose and collectAsLazyPagingItems
•
Create a Gradle Convention Plugin for Effortless Library Publishing
•
Why using Channels is considered anti-pattern?
•
Data structures and Algorithms are used in Android’s Architecture and Components
•
Mastering Color Theming in Jetpack Compose
•
Custom Koin Test Rule & Instrumented Android Tests in Multi-Module Architectures
•
Creating Pixel-Perfect UI with Jetpack Compose
•
Now in Android: 109 — Android 15 Beta 4, Samsung Galaxy Unpacked, Google Play’s new feature, & more
•
Hot Flows vs. Cold Flows In Kotlin — When to Use What?
•
5 Kotlin Coroutine Secrets I Wish I Knew Earlier
•
Kotlin After 2.0
•
Revamping and Extending Kotlin’s Type System
•
The state of code coverage for Kotlin
•
Supercool App — пример использования паттерна Use Case
•
Compose Stopwatch — секундомер на Jetpack Compose
•
ArtMaker — рисование с Jetpack Compose
Кроссплатформа
• Апгрейд с Xamarin.Native на .NET 8
• Как я ускорил свое мобильное приложение BookDesk на React Native в 3 раза?
• Flutter vs Kotlin Multiplatform: что выбрать
•
Pushing the Boundaries of Compose Multiplatform with AGSL Shaders
•
A deep dive into freezed: Data classes, cloning, and (de)serialization
•
White-label mobile apps with Flutter & Fastlane
•
Enums on Steroids with Dart. Best Enum features ever!
•
Cross-Platform Swift: Building a Swift app for the browser
•
Flutter Reload: What’s Under the Hood
•
There’s more than a mouse in Compose Multiplatform for Desktop
•
Flutter tutorial: Sliding and resize image with CustomScrollView and Slivers
Разработка
• 2,5 тысяч экрано-состояний и тесты на сотнях устройств: как мы с нуля делали темную тему в приложении
• Server Driven UI: 6 причин не использовать его
• Как Google победил Skynet или подготовка обучения модели на мобильном устройстве
• Сложно ли пронести гаджет в школу
• Снифферы трафика в мобильном тестировании: Обзор инструментов и их особенности
• Большое UX/UI исследование мобильных приложений аптек
• О важном: инклюзивность интерфейсов, в которой нуждаются
• Кайфовый дизайн: Как сделать приложение, которое не захочется удалить
• Как писать чистый код — угадываем что ввел юзер и дизайним с нуля Clean Code Approach
• Егор Бугаенко про ТикТок, Huawei и ленивых разработчиков
• Зачем учить язык Си в 2024 году — Как выбрать между C или C++ или Rust
• Зарплаты разработчиков в первом полугодии 2024
• Самые популярные языки программирования 2024 от IEEE Spectrum
•
Less Is More: Principles for Simple Comments
•
Better CI/CD with GitHub Actions and deployment tracking
•
Designing Apps: 5 Methods to improve your workflow
•
How we run migrations across 2,800 microservices
•
How we sped up Notion in the browser with WASM SQLite
•
Programming With ChatGPT
•
Cognitive Load is what matters
Аналитика, маркетинг и монетизация
• Calm запускает «осознанные» истории
• Snapchat запустился на iPad
• Niantic стремится создать более насыщенную 3D-карту мира с помощью новой версии приложения Scaniverse
• The Shippies — первый конкурс RevenueCat для приложений с подпиской
• У Telegram лучший месяц по доходам
• Самые скачиваемые и зарабатывающие приложения в мире в июле 2024
• Где найти стажеров и молодых сотрудников: создали приложение с 900+ тысячами скачиваний
Cheap! Cheap! The Perils of Low Cost Being your ONLY Advantage
AI, Устройства, IoT
• $1697 за выключатель кондиционера: DIY ремонт управляющего планшета
• Действительно ли большие языковые модели галлюцинируют? Эксперимент
• Насколько ChatGPT-4o подвержен когнитивным искажениям?
• IoT Geofencing: как мы сократили время определения функциональных зон, используя H3-индексы
• Реализуем машинное обучение на сервере с помощью Swift
• Codeium привлек $150 млн и стал единорогом
• Стартап Magic, занимающийся ИИ-программированием, получил $320 млн инвестиций
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/vx/ej/qg/vxejqgd4i9oioqjk250ctktihv4.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• Обновление CocoaPods: пошаговое руководство
• Карточка навигации для iOS 18 на SwiftUI
• Проверяем пакет iOS-приложения
• Шина данных и Swift: применение в слабосвязанных архитектурах
• SwiftUI AlignmentGuide
• Стратегия автотестирования для iOS приложений
• 5 вопросов для iOS разработчика
• Борьба с утечками памяти: от задачи до победы
• ARC в Swift: лучшие практики для предотвращения утечек памяти
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/e1a/3cf/2a8/e1a3cf2a8b65a0da69bbdd5c0ad040fe.png)
• 10 самых распространенных ошибок с Jetpack Compose
• Kotlin Coroutines. От А до Я
• Подходы к многомодульной функциональной архитектуре на Android
• Автообновление через GitHub releases с помощью Hilt и Retrofit в Android
• Mapping объектов с помощью MapStruct
• Как переход на AGP&Gradle 8.* изменил взгляд на работу с производительностью сборки
• 5 уроков из опыта реализации pixel-perfect тестирования дизайн-системы в Android
• Gradle-сборка. Измеряем самое важное
• Шифруем файлы в Android
• Выпуск Android 15 перенесен на октябрь
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/webt/ma/lx/8h/malx8hbgozt6lee8rmxmg96_s6a.png)
• Апгрейд с Xamarin.Native на .NET 8
• Как я ускорил свое мобильное приложение BookDesk на React Native в 3 раза?
• Flutter vs Kotlin Multiplatform: что выбрать
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
![](https://habrastorage.org/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• 2,5 тысяч экрано-состояний и тесты на сотнях устройств: как мы с нуля делали темную тему в приложении
• Server Driven UI: 6 причин не использовать его
• Как Google победил Skynet или подготовка обучения модели на мобильном устройстве
• Сложно ли пронести гаджет в школу
• Снифферы трафика в мобильном тестировании: Обзор инструментов и их особенности
• Большое UX/UI исследование мобильных приложений аптек
• О важном: инклюзивность интерфейсов, в которой нуждаются
• Кайфовый дизайн: Как сделать приложение, которое не захочется удалить
• Как писать чистый код — угадываем что ввел юзер и дизайним с нуля Clean Code Approach
• Егор Бугаенко про ТикТок, Huawei и ленивых разработчиков
• Зачем учить язык Си в 2024 году — Как выбрать между C или C++ или Rust
• Зарплаты разработчиков в первом полугодии 2024
• Самые популярные языки программирования 2024 от IEEE Spectrum
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
![](https://habrastorage.org/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• Calm запускает «осознанные» истории
• Snapchat запустился на iPad
• Niantic стремится создать более насыщенную 3D-карту мира с помощью новой версии приложения Scaniverse
• The Shippies — первый конкурс RevenueCat для приложений с подпиской
• У Telegram лучший месяц по доходам
• Самые скачиваемые и зарабатывающие приложения в мире в июле 2024
• Где найти стажеров и молодых сотрудников: создали приложение с 900+ тысячами скачиваний
Cheap! Cheap! The Perils of Low Cost Being your ONLY Advantage
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• $1697 за выключатель кондиционера: DIY ремонт управляющего планшета
• Действительно ли большие языковые модели галлюцинируют? Эксперимент
• Насколько ChatGPT-4o подвержен когнитивным искажениям?
• IoT Geofencing: как мы сократили время определения функциональных зон, используя H3-индексы
• Реализуем машинное обучение на сервере с помощью Swift
• Codeium привлек $150 млн и стал единорогом
• Стартап Magic, занимающийся ИИ-программированием, получил $320 млн инвестиций
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.