В этом выпуске сетчатые градиенты и курощение виджетов, сломанная Android-разработка и инструментирование байт-кода Java во имя великого блага, единая биометрическая система во Flutter-приложении, портирование игр на Аврору, видеозвонки с Лили и многое другое. Подключайтесь!
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/r/w1560/webt/ey/je/4g/eyje4gjgv86kxezzbzjbkohk_tq.png)
iOS
• Работаем с сетчатыми градиентами в iOS 18
• SwiftUI: адаптация UI к различным размерам экрана (с примерами кода)
• Ускоряем SwiftUI с Observable
• Как укротить виджеты в супераппе?
• UICollectionViewLayout с самого начала
• UITableView с различными типами ячеек
•
Previews in Xcode Playgrounds
•
MoveMe — SwiftUI Edition
•
Xcode Folders & Groups
•
Parsing Beyond JSON with swift-parsing
•
Introduction to Communication Patterns in SwiftUI
•
Point-Free is Xcode 16 ready
•
From Swift beginner to an app in the App Store in a few months
•
Rotating Characters Loader Tutorial
•
Creating a Dynamic Draggable ScrollView with UIKit for SwiftUI
•
How to build a Safari extension with SwiftUI
•
Mastering container views in SwiftUI. Basics.
•
Using the zoom navigation transition in SwiftUI
•
The 2024 iOS Developer RoadMap
•
Let’s Integrate SwiftData CRUD into the Notes App
•
SwiftUI — Rotating Characters Loader Tutorial
•
Deep Dive into TabView Changes in iOS18
•
Let’s Make Notes App With Complex Transitions | SwiftData | SwiftUI
•
Testing 101: What Are Integration Tests & How to Write Them in Swift
•
SwiftUI — Image Presentation Animation Tutorial
•
WWDC22: The SwiftUI cookbook for navigation
•
HotReloading — горячая перезагрузка для Swift, Objective-C и C++
•
MIDIKit — обертка CoreMIDI
Android
• Android сломался или я чего-то не понимаю? — Обсуждение на Reddit
• ByteWeaver в Open Source: инструментирование байт-кода Java во имя великого блага
• Впечатления от доработки Telegram Android
• Создание Convention Plugin-ов на базе Kotlin-классов
• Остерегайтесь Rounds.com — Обсуждение на Reddit
• Превращаем планшет в терминал самообслуживания: осваиваем режим Kiosk в KNOX сервисах
• Прочие оптимизации кода Gradle Convention Plugins, выводы по результатам использования подхода
• Декларативный подход в организации gradle зависимостей в Android-проектах
• Троян Necro продолжает преследовать пользователей Android
• Размер имеет значение: как измерить и уменьшить вес Android-приложения
• Установка Android-приложений от доисторических времен до наших дней
• Rust избавляет Android от ошибок и помогает существенно сократить количество небезопасного кода
•
Bottom Sheets that… just work
•
PDFViewerFragment — AndroidX
•
Tools, not Rules: become a better Android developer with Compiler Explorer
•
Testing Android App Accessibility: Clue
•
Using Kotlin 2.0 for Android Development
•
Kotlin Exception Handling: Why Singleton Exceptions are a bad idea
•
Design Server-Driven UI with Jetpack Compose and Firebase
•
Metaspace in JVM Builds
•
Android Studio Ladybug | 2024.2.1 RC 1 now available
•
Expandable FlowRow with Indicator
•
AllTrails gains over 1 million downloads after implementing its Wear OS app
•
Rendering the Java heap as a Treemap
•
Kotlin JVM args: Inheritance & Defaults
•
Koin 4.0 — Official Release
•
Loading Initial Data on Android Part 2: Clear All Your Doubts
•
Understanding the “suspend” Keyword in Kotlin Coroutines and Why It Matters for Android Development
•
How Can MVI Architecture Revolutionize Your Compose Multiplatform Development?
•
Room Renovations — Android Conference Talks
•
How to Implement a Custom Swipe to Reveal in Jetpack Compose
•
Keyboard & Focus Management In Jetpack Compose
•
How easy is it to draw on GoogleMaps using Compose?
•
How to Make HTTP Requests With Retrofit - Android
•
Raw Ddraw Android — создание Android-приложений с C и Make
•
Rush — слова песен как на Spotify
Кроссплатформа
• Как мы успешно внедрили Единую Биометрическую Систему во Flutter-приложение
• ООП в Dart
• React Native перевернул игру
• Темная сторона изолятов в Dart
•
Example of a Cross-Platform macOS/Windows Application Developed Using Swift 6
•
Exploring Kotlin Multiplatform: A Visual Guide
•
Better Error Handling for Flutter — Error Stack
•
Pushing the Boundaries of Compose Multiplatform with AGSL Shaders
•
A practical guide on CPU architectures for Flutter developers
•
Common mistakes with OAuth in Flutter
•
Packages to improve UI/UX of your app
•
Is Kotlin Multiplatform killing Flutter?
Разработка
• Как энтузиасты на мобильную систему «Аврора» портировали игры
• Как делать простые анимированные онбординги в Lottie без After Effects
• Не разрабатывайте приложения для миллионов пользователей, когда у вас нет и ста
• Как мы сделали приложение для партнёрской платформы, с которым любой может зарабатывать на туризме. Кейс Travelpayouts
• Идеальный продукт и его UX/UI дизайн
• Пишем свой генератор ID для мобильных приложений
• Discord запустил SDK для создания Активностей на платформе
• Как технический долг испортил приложение Sonos
• VK Education запускает базу учебных проектов для студентов
• Интероп – неизбежность в больших системах: C и C++, JNI, WinAPI
• Что делать, если разработчики бесят
• Процесс CI/CD в Авито: от комита до релиза
• Clean Architecture (чистая архитектура, все для проекта любого размера, принципы, мышление)
•
How I Designed a Dieter Rams inspired iPhone Dock
•
What 10,000 Hours of Coding Taught Me: Don’t Ship Fast
•
How I Hire Programmers
•
Avoiding if-else Hell: The Functional Style
•
Mobile teams are second class citizens, but not on purpose
•
End-to-End Machine Learning Project – AI, MLOps
•
LiveKit — приложения для передачи голоса и видео
Аналитика, маркетинг и монетизация
• RevenueCat приобрел «пикантные» аудиокниги Dipsea
• Закон Калифорнии заставит цифровые магазины признать, что покупатели лицензируют, а не покупают контент
• Видеозвонки с Лили, Приключения и пианино — обновления Duolingo
• Ютубер MKBHD выпустил приложение для обоев — и фанаты раскритиковали его
• В VK Рекламе стало доступно продвижение приложений из Huawei AppGallery
• Shelf — социальная сеть, основанная на медиа, которые вы потребляете
• Будущее программной рекламы: полное руководство по технологии header bidding
• Gauth, ИИ-помощник в учебе, оседлал волну возвращения в школу
•
How Has Hamster Kombat helped Telegram reach 700M+ MAU?
AI, Устройства, IoT
• Что почитать по машинному обучению: подборка из 6 книг
• Генеративный ИИ меняет то, как мы программируем, но программирование не исчезнет
• Представлены AR-очки Orion
• Джони Айв подтвердил, что работает над новым устройством с OpenAI
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/ey/je/4g/eyje4gjgv86kxezzbzjbkohk_tq.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• Работаем с сетчатыми градиентами в iOS 18
• SwiftUI: адаптация UI к различным размерам экрана (с примерами кода)
• Ускоряем SwiftUI с Observable
• Как укротить виджеты в супераппе?
• UICollectionViewLayout с самого начала
• UITableView с различными типами ячеек
•
![](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/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)
• Android сломался или я чего-то не понимаю? — Обсуждение на Reddit
• ByteWeaver в Open Source: инструментирование байт-кода Java во имя великого блага
• Впечатления от доработки Telegram Android
• Создание Convention Plugin-ов на базе Kotlin-классов
• Остерегайтесь Rounds.com — Обсуждение на Reddit
• Превращаем планшет в терминал самообслуживания: осваиваем режим Kiosk в KNOX сервисах
• Прочие оптимизации кода Gradle Convention Plugins, выводы по результатам использования подхода
• Декларативный подход в организации gradle зависимостей в Android-проектах
• Троян Necro продолжает преследовать пользователей Android
• Размер имеет значение: как измерить и уменьшить вес Android-приложения
• Установка Android-приложений от доисторических времен до наших дней
• Rust избавляет Android от ошибок и помогает существенно сократить количество небезопасного кода
•
![](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/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)
• Как мы успешно внедрили Единую Биометрическую Систему во Flutter-приложение
• ООП в Dart
• React Native перевернул игру
• Темная сторона изолятов в Dart
•
![](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/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Как энтузиасты на мобильную систему «Аврора» портировали игры
• Как делать простые анимированные онбординги в Lottie без After Effects
• Не разрабатывайте приложения для миллионов пользователей, когда у вас нет и ста
• Как мы сделали приложение для партнёрской платформы, с которым любой может зарабатывать на туризме. Кейс Travelpayouts
• Идеальный продукт и его UX/UI дизайн
• Пишем свой генератор ID для мобильных приложений
• Discord запустил SDK для создания Активностей на платформе
• Как технический долг испортил приложение Sonos
• VK Education запускает базу учебных проектов для студентов
• Интероп – неизбежность в больших системах: C и C++, JNI, WinAPI
• Что делать, если разработчики бесят
• Процесс CI/CD в Авито: от комита до релиза
• Clean Architecture (чистая архитектура, все для проекта любого размера, принципы, мышление)
•
![](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/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• RevenueCat приобрел «пикантные» аудиокниги Dipsea
• Закон Калифорнии заставит цифровые магазины признать, что покупатели лицензируют, а не покупают контент
• Видеозвонки с Лили, Приключения и пианино — обновления Duolingo
• Ютубер MKBHD выпустил приложение для обоев — и фанаты раскритиковали его
• В VK Рекламе стало доступно продвижение приложений из Huawei AppGallery
• Shelf — социальная сеть, основанная на медиа, которые вы потребляете
• Будущее программной рекламы: полное руководство по технологии header bidding
• Gauth, ИИ-помощник в учебе, оседлал волну возвращения в школу
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Что почитать по машинному обучению: подборка из 6 книг
• Генеративный ИИ меняет то, как мы программируем, но программирование не исчезнет
• Представлены AR-очки Orion
• Джони Айв подтвердил, что работает над новым устройством с OpenAI
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.