Темы



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