Мобильная разработка за неделю #527 (19 — 25 февраля)

В нашем новом еженедельном выпуске приложение для Apple Vision Pro за 8 дней и анимированные переходы, Android 15 для разработчиков и делегаты в Kotlin, гироскопический параллакс, разработчики мобильных приложений в 1С и многое другое!

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

g4nllkmqiajfoklmlzjrd1pw294.jpeg

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Миссия выполнима: как мы создали приложение для Apple Vision Pro за 8 дней
• Введение в разработку под Apple Vision Pro
• Добавляем SharePlay в iOS-приложение
• Создаем анимированные переходы с помощью Matched Geometry Effect в SwiftUI
• Xcode Console and Unified Logging
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Implement the MVVM Design Pattern in Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift enums and the danger of the default case
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to write safer code using the Lock and Key pattern
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEnsuring Secure API Access: Harnessing Apple«s Attest Protocol for iOS App Integration
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFrom Fragile to Agile: Automating the fight against Flaky Tests
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGenerating SwiftUI snapshot tests with Swift macros
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFundamentals of type-driven code
• 377ae0333d0f4b7b97307c9eea5ee21a.gifElevating Code Sharing: Safeguarding Intellectual Property through Binary Frameworks in Swift Packages
• 377ae0333d0f4b7b97307c9eea5ee21a.gifShould You Enable Swift«s Complete Concurrency Checking?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCustom Core Data migrations
• 377ae0333d0f4b7b97307c9eea5ee21a.gifShrink Images for Accessibility in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifExtensions in Swift: How and when to use them
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBad practice: not using .isMultiple (of:)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift Macros: Understanding Freestanding & Attached Macros
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngiOS Dev«s Thoughts on Working in Apple Vision Pro
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to use ContentUnavailableView in SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to use Grid in SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to use NavigationSplitView in SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngApple Maps Bottom Sheet
• gtu1iaz0-ajkbqpeq8n6dmql4zq.png65 tips to use Xcode like a PRO
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAdvance Map Interaction — Draggable Annotation
• 96716bcb926741e79bb1c284a88083ca.pngVortex: эффекты частиц для SwiftUI
• 96716bcb926741e79bb1c284a88083ca.pngFigma Preview: просмотр макетов в Xcode

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Google выпустил первую предварительную версию Android 15 для разработчиков
• SmartFlow: «В начале был пароль…» или новая аутентификация VK ID
• Сквозное тестирование с помощью шаблона Робот и Jetpack Compose
• Deep dive into delegated properties: разбираемся с делегатами в Kotlin
• Карьерный путь: Android мобилка, фронт или бэкенд?
• Делаю навигацию в приложении на Compose
• Новостное приложение: с нуля до публикации в Google Play. Часть 1
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRandom Musings on the Android 15 Developer Preview 1
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPhoto StoryTelling — Leveraging Generative AI and Google APIs to compose posts from your photo albums
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAvoid «Useless» Cases in Layered Architecture
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTesting with Accessibility Scanner
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuild Rot: The Hidden Technical Debt in Maven and Gradle Builds
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUnderstanding Nested Scrolling in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifI made the same app 15 times, here are the results
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEvolving our Android CI to the Cloud
• 377ae0333d0f4b7b97307c9eea5ee21a.gifQuick start guide to writing Espresso UI tests on Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifType Stability in Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDifferent ways to change the color of Status bar and Navigation bar in Android Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRefining Compose API for design systems
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid Biometric Authentication With BiometricManager
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSeven demos to understand coroutines: scope, context and Jobs
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUIState in Kotlin: Basic Information and Usage Tips
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRetrofit vs. Ktor Client
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFan«otations — Android Developers Backstage
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngderivedStateOf VS. remember (key) — THIS is Really the Difference
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFull Beginner«s Guide to the Jetpack Compose Preview in Android Studio
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMastering Jetpack Compose Previews — Test your UI before it tests you
• 96716bcb926741e79bb1c284a88083ca.pngPhotoView: компонент ImageView с жестами
• 96716bcb926741e79bb1c284a88083ca.pngVico: легковесные графики для Android

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

• Создаем гироскопический параллакс-эффект во Flutter
• Соединяем Flutter, Firebase и ESP32 в единую систему
•  Как стать Flutter-разработчиком бесплатно?
• От Skia к Impeller: эволюция графического движка в кроссплатформенной разработке на Flutter
• Исследование State of React Native 2023
• Практическое применение Sliver«ов для создания современного UI
• Добавление ресурсов в приложении на Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUsing Amper with Fleet in a Kotlin/Compose Multiplatform project
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWhat«s new in Flutter 3.19
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBroadening the scope of dev tools plugins
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding a Flutter SDK
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGetting the native iOS look & feel in your Compose Multiplatform app

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

• Паттерн поиска в мобильном приложении. Какую механику выбрать дизайнеру?
• Кому и зачем нужны разработчики мобильных приложений в 1С
• Публичное собеседование на позицию Head of QA
• Обязательные знания для тимлида
• Краш-курс по автоматизации тестирования
• Ozon Tech Community Design Meetup
• Какой могла бы быть Windows 12 Mobile
• Go вошел в Топ-10 индекса TIOBE
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEvent-Driven Architecture Fundamentals and Common Pitfalls (and How to Avoid Them)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe ideal PR is 50 lines long
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFalsehoods Junior Developers believe about becoming Senior

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

• Отчет Mobile App Trends: 2024 Edition от Adjust и AppLovin
• В 2023 году Roblox выплатил создателям игр $741 млн
• Apple выпустила приложение Apple Sports со статистикой игр
• Аудитория RuStore достигла 29 млн в месяц
• Google тестирует использование ИИ в Play
• Топ быстрорастущих приложений в России в январе
• В Европе заработает Epic Games Store
• 377ae0333d0f4b7b97307c9eea5ee21a.gifState of Mobile Gaming 2024 report

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

• О чем говорят руки. 2 место на соревновании Kaggle + код решения
• Уловимые частицы: как сервисы Яндекса помогают прогнозировать последствия извержений вулканов
• Lavritech: теперь с дисплеем и платой управления (наконец-то дождались)
• KC868-A16S: тоже железный, но в два раза дешевле
• Magic AI привлек $117 млн на создание ИИ-программиста
• Gemma — новая открытая модель Google
• Groq ускоряет работу языковых моделей
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngGoogle Gemini AI Course for Beginners

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

© Habrahabr.ru