Мобильная разработка за неделю #520 (18 — 24 декабря)
В этом дайджесте «условное ценообразование» для подписок и как управлять сложностью состояния, еще одно проигранное дело Google и как компания смогла проиграть там, где Apple выиграла, как почувствовать себя кассиром, анимации переходов во Flutter, рефакторинг кода и многое другое!
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
iOS
• Custom Segmented Control
• Beeper отказывается от борьбы с Apple и выкладывает код в open source
• Вопросы с собеседований: коллекции в Swift
• Поваренная книга SwiftUI: состояние, привязка, ObservableObject и ObservedObject
• В Internet Archive нашли старые приложения и игры из TestFlight
• Apple представила «условное ценообразование» для подписок
• Plain Swift — a simple Swift IDE for Windows
• Should you add final to all your Swift classes?
• Decoupled stacked sheet navigation with multiple modals in SwiftUI
• Integrating Haptic Feedback In SwiftUI Projects
• Hierarchical background styles in SwiftUI
• Stop using MVVM and abusing Observable classes in SwiftUI
• Coordinator Pattern for iOS Apps
• Why I chose The Composable Architecture for SwiftUI and never looked back
• Mastering MapKit in SwiftUI. Interactions.
• Preparing your App for VoiceOver: Accessibility Actions
• How to get the most played Apple Music songs and albums using Swift
• Quick Search with SwiftUI Searchable
• Xcode 15«s Hidden Treasure: Logging Like a Pro 2024
• Swift: Singleton Pattern
• The Case Against [unowned self]
• iOS UI Testing with Deep Links
• Scalable and Modular System Design for the simplest iOS App
• Creating a Scrolling Parallax Effect with SwiftUI
• SwiftUI View Models: Lifecycle Quirks
• Become More Senior iOS Developer with these 4 Xcode Tips & Tricks
• ❸☻- Simulation Emojimix on Xcode
• Building Complex Scroll Animations With New iOS 17 APIs
• SwiftUI Widgets | App Groups | Charts | Expense Tracker App
• How To Create A Submission Form In Xcode 15
• This is the CRAZIEST Swift code you«ll ever see
• SwiftData CloudKit
• SwiftUI Animated Toasts
• BadgeIcon: системные иконки для SwiftUI
• Google AI SDK for Swift: генеративный ИИ для ваших приложений
Android
• Как управлять сложностью состояния — Сергей Опивалов
• Создаем пассивный UI в Jetpack Compose
• Подключение сканера к Android или как почувствовать себя кассиром
• Stone. Квалификаторы и идентификаторы
• Как устроен Gradle Config Cache. Лучшие Практики. Интервью с инженером команды Gradle
• Google выплатит $700 млн в еще одном споре о Play Store + Все изменения, которые произойдут в Google Play и загрузке приложений
• Что нового в AOSP 14
• Вопросы с собеседований: для чего нужны inline функции
• Animating Inside and Outside the Box with Jetpack Compose
• The ViewModel«s leaked Flow collectors problem
• Glassmorphic Bottom Navigation in Jetpack Compose
• Building Passive UI in Jetpack Compose
• Kandy: the new Kotlin plotting library by JetBrains
• Don«t use var in enums
• Unleashing WebSocket in Android?
• Effect Handlers in Jetpack Compose: A Complete Guide
• Kotlin under the hood: how to get rid of recursion
• Foreground Services in Android 14: What«s Changing?
• Multi-Module with Clean Architecture
• Crash Course on the Android UI Layer | Part 2
• Fortifying Android Apps: A Comprehensive Guide to Securing Your App and Codebase with Kotlin
• State Management in Jetpack Compose
• Live Streaming and Audio Equalizer with ExoPlayer in Jetpack Compose
• Android Thread & Relation With Coroutine
• Demystifying Kotlin: Understanding the Inner Workings of Inline Functions
• How to handle single-event in Jetpack Compose
• Android Launch Modes Explained
• (W)rap — Android Developers Backstage
• Introducing Gemini, Google at NeurIPS 2023, and more dev news!
• Performance Optimization with @Stable and @Immutable in Jetpack Compose
• Demystifying Pixel Shaders (AGSL)
• Do You Have to Learn Clean Architecture as a Beginner?
• NanoKt: библиотека расширений для Android и Kotlin
• Ludwig: набор UI-компонентов для Jetpack Compose
• Android-PiP: реализация «картинки в картинке»
Кроссплатформа
• Transition Animation: настраиваем анимацию переходов во Flutter
• Создаем federated plugin для Flutter-проекта
• Автоматизированное тестирование событий аналитики в мобильном приложении: насколько это реально и оправдано
• Just DUIT — первый взгляд на server-driven UI фреймворк для Flutter
• Мультиплатформенная разработка на чистой Java
• Android System Design: делаем библиотеку Firebase
• Handle push and locale notifications in your Flutter app
• Jetpack Preferences DataStore in Kotlin Multiplatform
• Flutter and SQLite: A Deep Dive into Local Data Persistence
• Globe (a Flutter & Dart deployment platform) is now in public preview
• How we built it: Ask Dash — A generative AI Flutter application
• A novel architecture for Multiplatform applications with Pavel Lahoda
Разработка
• 13 советов для начинающих разработчиков, которые уже прочитали все остальные советы
• Рефакторинг кода, и как его не бояться
• Cоздание идеальных вкладок
• Как подготовиться к собеседованию по System Design мобильному разработчику
• Mobile Web, навигация и при чем тут Nginx
• «Они убивают Lottie — молодцы!»
• История разработки приложения для складных смартфонов Samsung. Часть 2 — гайдлайны
• Модульная запутанность. Как распарсить одну модель в разных модулях
• Оптимизация и автоматизация в бэкенд-разработке мобильных приложений: как ускорить разработку в четыре раза
• Разработка Авто.ру и роль руководителя в команде
• Что такое observability мобильного приложения
• Мобильные релизы в Авито
• Силиконовая Долина глазами российского разработчика
• Релокация на Кипр
• Redesigning our global order tracking experience
• I«ve vastly misunderstood the Single Responsibility Principle
• Empirically supported code review best practices
• How to Scale an App to 10 Million Users on AWS
• We Can«t Hire You
Аналитика, маркетинг и монетизация
• Эпический вопрос: как Google проиграл там, где Apple выиграла
• 5 трендов в области маркетинга приложений 2023 — и их проекция на 2024
• Краткое руководство по анализу данных и проведению продуктовых исследований
• Claim, социальная сеть, позволяющая пользователям зарабатывать и обмениваться вознаграждениями, привлекает $4 млн
• Spill, инклюзивная альтернатива X, запускает бету на iOS и Android
• Location — cоздатели Zenly выпускают приложение, похожее на Zenly
• Маркетологи в мобайле. Итоги года 2023. Часть 1
• Топ быстрорастущих приложений в России в декабре
• Итоги года и планы на 2024 от Adjust
• Количество пользователей социальной сети Jagat превысила 10 миллионов
• Спрос на приложения для ментального здоровья почти сошел на нет
• Самые скачиваемые приложения в мире в ноябре 2023
• Using campaign links to track impressions, downloads, and sales
AI, Устройства, IoT
• Управляем школьниками, не привлекая внимание санитаров
• Как пользователи убедили Chevrolet продать им машину за 100 рублей — или проблемы использования ИИ-чатботов
• NORVI Arita: добавляем SD картридер и веб-интерфейс (почти контроллер мечты)
• Сравнение популярных брокеров MQTT с открытым исходным кодом
• Apple разработала прорывной метод запуска LLM на устройствах с ограниченной памятью
• Apple останавливает продажи Apple Watch Series 9/Ultra 2 из-за нарушений патентов
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.