Мобильная разработка за неделю #553 (26 августа — 1 сентября)

В этом выпуске борьба с утечками памяти и 10 самых распространенных ошибок с Jetpack Compose, подходы к многомодульной функциональной архитектуре и реализация pixel-perfect тестирования дизайн-системы, 2.5 тысяч экрано-состояний и тесты на сотнях устройств, причины не использовать Server Driven UI, «осознанные» истории Calm и многое другое. Подключайтесь!

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

vxejqgd4i9oioqjk250ctktihv4.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Обновление CocoaPods: пошаговое руководство
• Карточка навигации для iOS 18 на SwiftUI
• Проверяем пакет iOS-приложения
• Шина данных и Swift: применение в слабосвязанных архитектурах
• SwiftUI AlignmentGuide
• Стратегия автотестирования для iOS приложений
• 5 вопросов для iOS разработчика
• Борьба с утечками памяти: от задачи до победы
• ARC в Swift: лучшие практики для предотвращения утечек памяти
377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI for Mac 2024
377ae0333d0f4b7b97307c9eea5ee21a.gifUnderstanding container values in SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifExploring SwiftUI: Working with Rotate Gesture
377ae0333d0f4b7b97307c9eea5ee21a.gifDynamic Library vs. Static Library: Optimising iOS App Performance
377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI Tip: Avoid Nesting ObservableObjects
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to make ZStack content fully scrollable in a SwiftUI ScrollView
377ae0333d0f4b7b97307c9eea5ee21a.gifSend data Between iOS Apps and Extensions Using Darwin Notifications
377ae0333d0f4b7b97307c9eea5ee21a.gifTranscribing audio from a file using the Speech framework
377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI Modifiers Deep Dive: containerBackground
377ae0333d0f4b7b97307c9eea5ee21a.gifMarking Swift Properties Available by iOS Version
377ae0333d0f4b7b97307c9eea5ee21a.gifWorking with UDP in SwiftNIO
377ae0333d0f4b7b97307c9eea5ee21a.gifExploring WidgetKit: Creating Configurable Control Widgets in iOS 18 and SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifEverything you never thought you wanted to know about emoji flags
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Navigation in SwiftUI Using Coordinator Pattern
377ae0333d0f4b7b97307c9eea5ee21a.gifDesign Your Dark and Tinted Versions of Your App Icon for iOS 18
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngImport & Export Swift Data with Password
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngInteractive Expandable Header — SwiftUI
96716bcb926741e79bb1c284a88083ca.pngSwiftDraw — парсинг и отрисовка SVG-изображений
96716bcb926741e79bb1c284a88083ca.pngSettings iOS — Настройки на SwiftUI

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• 10 самых распространенных ошибок с Jetpack Compose
• Kotlin Coroutines. От А до Я
• Подходы к многомодульной функциональной архитектуре на Android
• Автообновление через GitHub releases с помощью Hilt и Retrofit в Android
• Mapping объектов с помощью MapStruct
• Как переход на AGP&Gradle 8.* изменил взгляд на работу с производительностью сборки
• 5 уроков из опыта реализации pixel-perfect тестирования дизайн-системы в Android
• Gradle-сборка. Измеряем самое важное
• Шифруем файлы в Android
• Выпуск Android 15 перенесен на октябрь
377ae0333d0f4b7b97307c9eea5ee21a.gifEffective Map Composables: Draggable Markers
377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Granular Analytics With Lifecycle Delegate
377ae0333d0f4b7b97307c9eea5ee21a.gifAdd powerful analytics modifiers in Jetpack Compose with ModifierLocal
377ae0333d0f4b7b97307c9eea5ee21a.gifStrikt Unit Testing In Kotlin
377ae0333d0f4b7b97307c9eea5ee21a.gifAdding 16 KB Page Size to Android
377ae0333d0f4b7b97307c9eea5ee21a.gifNFC on Android: Creating a prepaid payment system using NDEF tags
377ae0333d0f4b7b97307c9eea5ee21a.gifHard-earned Learnings From Navigating Google Play App Rejections
377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Extensions: A Complete Guide to Extension Functions in Kotlin
377ae0333d0f4b7b97307c9eea5ee21a.gifAn effective testing strategy for Android — Unit Testing
377ae0333d0f4b7b97307c9eea5ee21a.gifConvergence in a multi-module application
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to implement Synchronization in Room Database in Kotlin
377ae0333d0f4b7b97307c9eea5ee21a.gifJetpack Compose and collectAsLazyPagingItems
377ae0333d0f4b7b97307c9eea5ee21a.gifCreate a Gradle Convention Plugin for Effortless Library Publishing
377ae0333d0f4b7b97307c9eea5ee21a.gifWhy using Channels is considered anti-pattern?
377ae0333d0f4b7b97307c9eea5ee21a.gifData structures and Algorithms are used in Android«s Architecture and Components
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Color Theming in Jetpack Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifCustom Koin Test Rule & Instrumented Android Tests in Multi-Module Architectures
377ae0333d0f4b7b97307c9eea5ee21a.gifCreating Pixel-Perfect UI with Jetpack Compose
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngNow in Android: 109 — Android 15 Beta 4, Samsung Galaxy Unpacked, Google Play«s new feature, & more
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHot Flows vs. Cold Flows In Kotlin — When to Use What?
gtu1iaz0-ajkbqpeq8n6dmql4zq.png5 Kotlin Coroutine Secrets I Wish I Knew Earlier
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngKotlin After 2.0
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngRevamping and Extending Kotlin«s Type System
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThe state of code coverage for Kotlin
96716bcb926741e79bb1c284a88083ca.pngSupercool App — пример использования паттерна Use Case
96716bcb926741e79bb1c284a88083ca.pngCompose Stopwatch — секундомер на Jetpack Compose
96716bcb926741e79bb1c284a88083ca.pngArtMaker — рисование с Jetpack Compose

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

• Апгрейд с Xamarin.Native на .NET 8
• Как я ускорил свое мобильное приложение BookDesk на React Native в 3 раза?
• Flutter vs Kotlin Multiplatform: что выбрать
377ae0333d0f4b7b97307c9eea5ee21a.gifPushing the Boundaries of Compose Multiplatform with AGSL Shaders
377ae0333d0f4b7b97307c9eea5ee21a.gifA deep dive into freezed: Data classes, cloning, and (de)serialization
377ae0333d0f4b7b97307c9eea5ee21a.gifWhite-label mobile apps with Flutter & Fastlane
377ae0333d0f4b7b97307c9eea5ee21a.gifEnums on Steroids with Dart. Best Enum features ever!
377ae0333d0f4b7b97307c9eea5ee21a.gifCross-Platform Swift: Building a Swift app for the browser
377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter Reload: What«s Under the Hood
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThere«s more than a mouse in Compose Multiplatform for Desktop
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFlutter tutorial: Sliding and resize image with CustomScrollView and Slivers

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

• 2,5 тысяч экрано-состояний и тесты на сотнях устройств: как мы с нуля делали темную тему в приложении
• Server Driven UI: 6 причин не использовать его
• Как Google победил Skynet или подготовка обучения модели на мобильном устройстве
• Сложно ли пронести гаджет в школу
• Снифферы трафика в мобильном тестировании: Обзор инструментов и их особенности
• Большое UX/UI исследование мобильных приложений аптек
• О важном: инклюзивность интерфейсов, в которой нуждаются
• Кайфовый дизайн: Как сделать приложение, которое не захочется удалить
• Как писать чистый код — угадываем что ввел юзер и дизайним с нуля Clean Code Approach
• Егор Бугаенко про ТикТок, Huawei и ленивых разработчиков
• Зачем учить язык Си в 2024 году — Как выбрать между C или C++ или Rust
• Зарплаты разработчиков в первом полугодии 2024
• Самые популярные языки программирования 2024 от IEEE Spectrum
377ae0333d0f4b7b97307c9eea5ee21a.gifLess Is More: Principles for Simple Comments
377ae0333d0f4b7b97307c9eea5ee21a.gifBetter CI/CD with GitHub Actions and deployment tracking
377ae0333d0f4b7b97307c9eea5ee21a.gifDesigning Apps: 5 Methods to improve your workflow
377ae0333d0f4b7b97307c9eea5ee21a.gifHow we run migrations across 2,800 microservices
377ae0333d0f4b7b97307c9eea5ee21a.gifHow we sped up Notion in the browser with WASM SQLite
377ae0333d0f4b7b97307c9eea5ee21a.gifProgramming With ChatGPT
377ae0333d0f4b7b97307c9eea5ee21a.gifCognitive Load is what matters

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

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

• $1697 за выключатель кондиционера: DIY ремонт управляющего планшета
• Действительно ли большие языковые модели галлюцинируют? Эксперимент
• Насколько ChatGPT-4o подвержен когнитивным искажениям?
• IoT Geofencing: как мы сократили время определения функциональных зон, используя H3-индексы
• Реализуем машинное обучение на сервере с помощью Swift
• Codeium привлек $150 млн и стал единорогом
• Стартап Magic, занимающийся ИИ-программированием, получил $320 млн инвестиций

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

© Habrahabr.ru