Мобильная разработка за неделю #531 (18 — 24 марта)

В новом выпуске быстрый старт и дело правительства США против Apple, цена Чистой Архитектуры и Android 15 Developer Preview 2, современный способ организации зависимостей, сила последовательности, топ быстрорастущих приложений в России в марте и многое другое.
Подключайтесь!

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

8gc4zmkoduv-_dx9hrsrhdlwti8.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Быстрый старт, или Как ускорить запуск iOS-приложений
• YandexMapKit и SwiftUI: обратный геокодинг
• Интерактивные виджет-подборки в Иви (iOS)
• Путь iOS-разработчика: как я много собеседовался и попал на стажировку
• Разработка под Apple Vision Pro
• Как встроить в TextField индикатор загрузки и кастомную View
• США подали в суд на Apple за незаконную монополию
• ЕС присматривается к Core Technology Fee
• Поваренная книга SwiftUI: тексты и шрифты — часть 1
• Apple может лицензировать ИИ-модели Google или OpenAI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift Tooling: Windows Edition
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIf you use UserDefaults in an app
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI Tasks Blocking the MainActor
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStore a codable model into AppStorage
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOh Sh*t, My App is Successful and I Didn«t Think About Accessibility
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCustomizing a Chart in Swift Charts
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to support dark mode in SwiftUI programmatically
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow SwiftUI & Concurrency Could Forward Fix Their Issues
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to migrate an iOS app to Bazel
• 377ae0333d0f4b7b97307c9eea5ee21a.gifXCUITest + SauceLabs + GitHub Actions = Incredible Mobile iOS CI/CD Automation
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAsync Unit Testing: The Comprehensive Guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMockirinha — a approach to write unit test for API requests
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGetting Started with Structured Concurrency in Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOptimizing UI Testing Efficiency with Page Object Model
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOur journey with Swift thus far — some notes and reflections
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI-Container View«s hierarchy
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPrompt to code in Xcode with Claude 3
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to link to native type extensions in DocC
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTuist-ing TravelPerks iOS app for Faster Build Times
• 377ae0333d0f4b7b97307c9eea5ee21a.gifYour How-To Guide for Implementing Image Cropping and Rotating in iOS
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHacking Disneyland«s App to fix a Freeze
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngJSON Parsing With Pagination
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuild 3D content for visionOS Apps
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLong Press Button With Progress Bar
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCreate a 3D shiny card in SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSign In With Apple — Firebase
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI Horizontal Wheel Picker
• 96716bcb926741e79bb1c284a88083ca.pngJTAppleCalendar: библиотека календаря на Swift
• 96716bcb926741e79bb1c284a88083ca.pngSwiftfin: видеоплеер Jellyfin для iOS и tvOS

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Вы за это заплатите! Цена Чистой Архитектуры. Часть 1 + Часть 2
• Осваиваем ViewModel в Android: «можно» и «нельзя» — Часть 1
• Вышел Android 15 Developer Preview 2
• Разработка под Android в 2024 году
• Зачем в мобильной разработке использовать Flow, если есть мощный ChannelFlow?
• Android TOML. Просто о каталогах зависимостей в Android Studio
• Современный способ организации зависимостей в Android. Version catalog (TOML) и Gradle convention plugin
• Разработка новостного приложения. Часть 4
• Мапим данные из domain в ui модуль в многомодульном проекте
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAnimations with Lookahead in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAdding Ktlint to your Android project
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOptimize App Performance By Mastering Stability in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Ktor Roadmap for 2024
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCustomize Clickables and Ripples
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStressing the JVM GC on Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAutomating Android App Deployment to Firebase App Distribution With Fastlane
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAccessibility Checks with Jetpack Compose Previews
• 377ae0333d0f4b7b97307c9eea5ee21a.gifJetpack Compose needs a Design System layer
• 377ae0333d0f4b7b97307c9eea5ee21a.gifComposition over Inheritance: My refactoring recipe
• 377ae0333d0f4b7b97307c9eea5ee21a.gif@Composable Modifier vs composed factory in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStop Passing Event/UI-Action Callbacks in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid Localization: List Formatter in Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin«s JDK release compatibility flag
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuild Wear OS application using Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDetecting Banker Malware Installed on Android Devices
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOptimizing CI/CD Processes with Selective Testing
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngNow in Android: 101 — Android 15 Developer Preview 2, TheAndroidShow, the Google I/O date, & more
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Implement Biometric Auth in Your Android App
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThis Is My FAVORITE Error Handling Class
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngJava vs. Kotlin: The Ultimate Showdown of Virtual Threads & Coroutines
• 96716bcb926741e79bb1c284a88083ca.pngGramophone: музыкальный плеер на Media3 и Material Design
• 96716bcb926741e79bb1c284a88083ca.pngRoutine Tracker: календарь-планировщик для Android

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

• ViewModel + Kotlin Multiplatform. Пробуем нативное решение
• Тестирование пользовательского интерфейса во Flutter
• Dart 3.1 и ретроспектива программирования в функциональном стиле в Dart 3
• Рецепт приготовления кроссплатформенного мобильного видеоредактора
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFixing FVM with an open source mindset
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter & ML Kit 1.0: AI powered Apps
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to use KMP library inside the Flutter plugin?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe power of open-source. Making Maestro work better with Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter-Clean Architecture
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIntroducing the Redacted Widget for Flutter: Enhance Your Loading Experience!
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAdvanced Theming Techniques in Flutter: Leveraging Extensions for Dynamic UIs

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

• Как растратить свою карьеру — один комфортный год за другим
• Перехват трафика мобильных приложений
• Сила последовательности в побочных проектах
• Как рождаются идеи pet-проектов?
• О вреде Test Driven Development
• Почему навигация в Google, Booking и Spotify именно такая, и какую лучше выбрать вам
• Собеседование по System Design: проектируем клон Авито
• Не работал в FAANG — не программист: полгода работы в Apple
• Программисты не нужны
• Как инсайт Netflix удвоил конверсию Gett
• GitHub предлагает автоматическое исправление уязвимостей в коде с помощью ИИ
• JetBrains запускает TeamCity Pipelines для упрощения работы с CI/CD
• Visual Studio App Center закрывается
• 377ae0333d0f4b7b97307c9eea5ee21a.gifInterviewing at Staff+ level
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow Figma«s databases team lived to tell the scale
• 377ae0333d0f4b7b97307c9eea5ee21a.gifVision Pro is an over-engineered «devkit»
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMake CI/CD Part of Your Development Flow With TeamCity Pipelines
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow Tinder Scaled to 1.6 Billion Swipes per Day
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEmpirically supported code review best practices
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTooltip: A small design element with a big UX impact
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThis is the moment to reinvent your product
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Solve 1000 Leetcode Problems in 300 Days?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWill AI Devices Kill UX?
• 96716bcb926741e79bb1c284a88083ca.pngAutoDev: ИИ-помощник для разработки
• 96716bcb926741e79bb1c284a88083ca.pngShattered Pixel Dungeon: кроссплатформенный «рогалик»

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

• Приложение для ведения бюджета Copilot переживает бум после закрытия Mint
• Epic Games запускает магазин на iOS и Android
• Топ быстрорастущих приложений в России в марте
• Sensor Tower покупает data.ai
• Приложение Apple Sports не смогло опередить конкурентов
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCasual Gaming in 2024: Using Insights From 2023

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

• Quantization Deep Dive, или Введение в современную квантизацию
• Ищем Арнольда Шварценеггера среди мужчин, женщин и детей с помощью нейросети на С++
• Расчёт вкусов пользователя для ленты рекомендаций с применением item2vec-подхода
• Умный офис в «Москва-Сити» на Home Assistant: автоматизируем только нужное
• Демистифицируем машинное обучение — из разработчика в ML-инженеры
• Исследователи обнаружили неисправимую уязвимость в чипах Apple Silicon
• Google DeepMind разработал ИИ ассистента для футбола
• Лучшие механические клавиатуры 2024
• xAI Илона Маска открыл код ИИ-модели Grok
• Новый метод обучения ИИ от Apple сохраняет конфиденциальность

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

© Habrahabr.ru