Мобильная разработка за неделю #557 (23 — 29 сентября)

В этом выпуске сетчатые градиенты и курощение виджетов, сломанная Android-разработка и инструментирование байт-кода Java во имя великого блага, единая биометрическая система во Flutter-приложении, портирование игр на Аврору, видеозвонки с Лили и многое другое. Подключайтесь!

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

eyje4gjgv86kxezzbzjbkohk_tq.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Работаем с сетчатыми градиентами в iOS 18
• SwiftUI: адаптация UI к различным размерам экрана (с примерами кода)
• Ускоряем SwiftUI с Observable
• Как укротить виджеты в супераппе?
• UICollectionViewLayout с самого начала
• UITableView с различными типами ячеек
377ae0333d0f4b7b97307c9eea5ee21a.gifPreviews in Xcode Playgrounds
377ae0333d0f4b7b97307c9eea5ee21a.gifMoveMe — SwiftUI Edition
377ae0333d0f4b7b97307c9eea5ee21a.gifXcode Folders & Groups
377ae0333d0f4b7b97307c9eea5ee21a.gifParsing Beyond JSON with swift-parsing
377ae0333d0f4b7b97307c9eea5ee21a.gifIntroduction to Communication Patterns in SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifPoint-Free is Xcode 16 ready
377ae0333d0f4b7b97307c9eea5ee21a.gifFrom Swift beginner to an app in the App Store in a few months
377ae0333d0f4b7b97307c9eea5ee21a.gifRotating Characters Loader Tutorial
377ae0333d0f4b7b97307c9eea5ee21a.gifCreating a Dynamic Draggable ScrollView with UIKit for SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to build a Safari extension with SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering container views in SwiftUI. Basics.
377ae0333d0f4b7b97307c9eea5ee21a.gifUsing the zoom navigation transition in SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifThe 2024 iOS Developer RoadMap
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLet«s Integrate SwiftData CRUD into the Notes App
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI — Rotating Characters Loader Tutorial
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngDeep Dive into TabView Changes in iOS18
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLet«s Make Notes App With Complex Transitions | SwiftData | SwiftUI
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngTesting 101: What Are Integration Tests & How to Write Them in Swift
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI — Image Presentation Animation Tutorial
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngWWDC22: The SwiftUI cookbook for navigation
96716bcb926741e79bb1c284a88083ca.pngHotReloading — горячая перезагрузка для Swift, Objective-C и C++
96716bcb926741e79bb1c284a88083ca.pngMIDIKit — обертка CoreMIDI

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• 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 от ошибок и помогает существенно сократить количество небезопасного кода
377ae0333d0f4b7b97307c9eea5ee21a.gifBottom Sheets that… just work
377ae0333d0f4b7b97307c9eea5ee21a.gifPDFViewerFragment — AndroidX
377ae0333d0f4b7b97307c9eea5ee21a.gifTools, not Rules: become a better Android developer with Compiler Explorer
377ae0333d0f4b7b97307c9eea5ee21a.gifTesting Android App Accessibility: Clue
377ae0333d0f4b7b97307c9eea5ee21a.gifUsing Kotlin 2.0 for Android Development
377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Exception Handling: Why Singleton Exceptions are a bad idea
377ae0333d0f4b7b97307c9eea5ee21a.gifDesign Server-Driven UI with Jetpack Compose and Firebase
377ae0333d0f4b7b97307c9eea5ee21a.gifMetaspace in JVM Builds
377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid Studio Ladybug | 2024.2.1 RC 1 now available
377ae0333d0f4b7b97307c9eea5ee21a.gifExpandable FlowRow with Indicator
377ae0333d0f4b7b97307c9eea5ee21a.gifAllTrails gains over 1 million downloads after implementing its Wear OS app
377ae0333d0f4b7b97307c9eea5ee21a.gifRendering the Java heap as a Treemap
377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin JVM args: Inheritance & Defaults
377ae0333d0f4b7b97307c9eea5ee21a.gifKoin 4.0 — Official Release
377ae0333d0f4b7b97307c9eea5ee21a.gifLoading Initial Data on Android Part 2: Clear All Your Doubts
377ae0333d0f4b7b97307c9eea5ee21a.gifUnderstanding the «suspend» Keyword in Kotlin Coroutines and Why It Matters for Android Development
377ae0333d0f4b7b97307c9eea5ee21a.gifHow Can MVI Architecture Revolutionize Your Compose Multiplatform Development?
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngRoom Renovations — Android Conference Talks
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Implement a Custom Swipe to Reveal in Jetpack Compose
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngKeyboard & Focus Management In Jetpack Compose
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow easy is it to draw on GoogleMaps using Compose?
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Make HTTP Requests With Retrofit — Android
96716bcb926741e79bb1c284a88083ca.pngRaw Ddraw Android — создание Android-приложений с C и Make
96716bcb926741e79bb1c284a88083ca.pngRush — слова песен как на Spotify

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

• Как мы успешно внедрили Единую Биометрическую Систему во Flutter-приложение
• ООП в Dart
• React Native перевернул игру
• Темная сторона изолятов в Dart
377ae0333d0f4b7b97307c9eea5ee21a.gifExample of a Cross-Platform macOS/Windows Application Developed Using Swift 6
377ae0333d0f4b7b97307c9eea5ee21a.gifExploring Kotlin Multiplatform: A Visual Guide
377ae0333d0f4b7b97307c9eea5ee21a.gifBetter Error Handling for Flutter — Error Stack
377ae0333d0f4b7b97307c9eea5ee21a.gifPushing the Boundaries of Compose Multiplatform with AGSL Shaders
377ae0333d0f4b7b97307c9eea5ee21a.gifA practical guide on CPU architectures for Flutter developers
377ae0333d0f4b7b97307c9eea5ee21a.gifCommon mistakes with OAuth in Flutter
377ae0333d0f4b7b97307c9eea5ee21a.gifPackages to improve UI/UX of your app
377ae0333d0f4b7b97307c9eea5ee21a.gifIs Kotlin Multiplatform killing Flutter?

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

• Как энтузиасты на мобильную систему «Аврора» портировали игры
• Как делать простые анимированные онбординги в Lottie без After Effects
• Не разрабатывайте приложения для миллионов пользователей, когда у вас нет и ста
• Как мы сделали приложение для партнёрской платформы, с которым любой может зарабатывать на туризме. Кейс Travelpayouts
• Идеальный продукт и его UX/UI дизайн
• Пишем свой генератор ID для мобильных приложений
• Discord запустил SDK для создания Активностей на платформе
• Как технический долг испортил приложение Sonos
• VK Education запускает базу учебных проектов для студентов
• Интероп — неизбежность в больших системах: C и C++, JNI, WinAPI
• Что делать, если разработчики бесят
• Процесс CI/CD в Авито: от комита до релиза
• Clean Architecture (чистая архитектура, все для проекта любого размера, принципы, мышление)
377ae0333d0f4b7b97307c9eea5ee21a.gifHow I Designed a Dieter Rams inspired iPhone Dock
377ae0333d0f4b7b97307c9eea5ee21a.gifWhat 10,000 Hours of Coding Taught Me: Don«t Ship Fast
377ae0333d0f4b7b97307c9eea5ee21a.gifHow I Hire Programmers
377ae0333d0f4b7b97307c9eea5ee21a.gifAvoiding if-else Hell: The Functional Style
377ae0333d0f4b7b97307c9eea5ee21a.gifMobile teams are second class citizens, but not on purpose
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngEnd-to-End Machine Learning Project — AI, MLOps
96716bcb926741e79bb1c284a88083ca.pngLiveKit — приложения для передачи голоса и видео

509dc9bde69347ecbe0c21ff2973d7e7.jpgАналитика, маркетинг и монетизация

• RevenueCat приобрел «пикантные» аудиокниги Dipsea
• Закон Калифорнии заставит цифровые магазины признать, что покупатели лицензируют, а не покупают контент
• Видеозвонки с Лили, Приключения и пианино — обновления Duolingo
• Ютубер MKBHD выпустил приложение для обоев — и фанаты раскритиковали его
• В VK Рекламе стало доступно продвижение приложений из Huawei AppGallery
• Shelf — социальная сеть, основанная на медиа, которые вы потребляете
• Будущее программной рекламы: полное руководство по технологии header bidding  
• Gauth, ИИ-помощник в учебе, оседлал волну возвращения в школу
377ae0333d0f4b7b97307c9eea5ee21a.gifHow Has Hamster Kombat helped Telegram reach 700M+ MAU?

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

• Что почитать по машинному обучению: подборка из 6 книг
• Генеративный ИИ меняет то, как мы программируем, но программирование не исчезнет
• Представлены AR-очки Orion
• Джони Айв подтвердил, что работает над новым устройством с OpenAI

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

© Habrahabr.ru