Мобильная разработка за неделю #523 (22 — 28 января)

В новом дайджесте открытие сторонних магазинов на iOS в Европе и скучные приложения для Vision Pro, неизвестные инструменты Android Studio, путь к совершенству Flutter, трёхмерные игры на кнопочных телефонах? удаление кода в масштабе Google и многое другое!

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

5-zixb_wf-s32a1ymghenpta2hw.jpeg

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Пишем интерактивный виджет
• Моя малышка все еще любит самолеты — и я улучшил для нее радар
• Приложения для Vision Pro выглядят скучно
• Упрощаем локализацию iOS-приложения со String Catalogs
• Apple объявляет об изменениях в iOS, Safari и App Store в Европейском союзе
• После открытия App Store в Европе, Fortnite возвращается на iOS
• Apple разрешила стриминг игр в App Store
• Как через Push-уведомления на iPhone утекают данные пользователей
• Регистрация на Swift Student Challenge откроется 5 февраля
• Поваренная книга SwiftUI: шаринг состояний между представлениями с помощью объектов окружения
• Для Vision Pro пока разработано только 150 приложений
• Отношения Apple с разработчиками могут помешать Vision Pro
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAn Approach to Handling App Launch States in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOne-way bindings in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDeveloping with Swift in Visual Studio Code
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAsynchronous SwiftUI buttons
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI View Models: A Polymorphic Approach
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to place a view in the UINavigationBar and increase its height
• 377ae0333d0f4b7b97307c9eea5ee21a.gifiOS UI Testing with Deep Links
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to write Unit Tests for Code Performance
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Composable Architecture: Swift guide to TCA
• 377ae0333d0f4b7b97307c9eea5ee21a.gifScrollView Bounce Behavior configuration in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifInteractive Widgets With SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIntroducing SwiftUI on visionOS
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPreparing for Swift 6
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCreating a Collapsible UITableViewCell in Swift: A Step-by-Step Guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to use the rethrows keyword in Swift?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifA deep dive into the 2023 iPhone app of the year, AllTrails
• 377ae0333d0f4b7b97307c9eea5ee21a.gifLottie magic in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifVision Pro Apps look boring
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBring 3D to your App: Developing Native iOS Apps with Spline
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI Dock Progress Bar for macOS
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftData Background Tasks: Massively Improve Your Apps Performance
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSource Control with Xcode: Branching and Merging
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngUnit Testing a SwiftUI Application using Xcode
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFrom Challenge to Joy: My Journey Developing Tuist for Scalable Xcode Projects
• 96716bcb926741e79bb1c284a88083ca.pngOutRun: открытый фитнес-трекер
• 96716bcb926741e79bb1c284a88083ca.pngWinlator: эмулятор Windows (x86_64) для Android
• 96716bcb926741e79bb1c284a88083ca.pngLLMFarm: языковые модели на iOS и MacOS офлайн

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Samsung DEX в 2024 году: есть ли смысл?
• Как я приложение на Compose писал
• Просто об архитектуре в Android
• Программируем лучше: 4 неизвестных инструмента в Android Studio
• 377ae0333d0f4b7b97307c9eea5ee21a.gifImproving unit test performance in MEGA Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifExploring Health Connect Pt. 2 — Reading and Writing Data
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMaking Shadowfax Android App 40% faster
• 377ae0333d0f4b7b97307c9eea5ee21a.gifA Better Hash Map
• 377ae0333d0f4b7b97307c9eea5ee21a.gif8 simple extension methods to use in every Android project
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGradle: from Newbie to Strong fundamentals
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to automatically test a Google Play Subscription
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDIY: your own Dependency Injection library!
• 377ae0333d0f4b7b97307c9eea5ee21a.gifLateinit vs Lazy in Kotlin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCoroutine patterns in Android, and why they work
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRoom Relationships Explained
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid ViewModel: Single state or not?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifJetpack Compose: Passing data implicitly in Composable screens
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWhat«s new in the Jetpack Compose January »24 release
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPackage Visibility in API 30 or Higher with the TTS service
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEffect Handlers in Jetpack Compose
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngNow in Android: 98 — Gemini Pro, Google AI SDK, Google AI Studio, Cast, Rust, and more!
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Implement Firebase Push Notifications on Android (FCM + Backend)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Create an App Shortcut on Android
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to automatically test a Google Play Subscription
• 96716bcb926741e79bb1c284a88083ca.pngBottom Dialog Android Picker: диалог выбора файлов
• 96716bcb926741e79bb1c284a88083ca.pngYTDLnis: загрузчик видео/аудио для Android

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

• Flutter. На пути к совершенству
• Заводим Яндекс Карты в Compose Multiplatform
• Флаттер 3.18 | бета-релиз | Топ-8 фичей
• Полное руководство по управлению навигацией во Flutter с помощью пакета go_router: часть 1
• Project IDX получил симулятор iOS и эмулятор Android
• Позиция — KMP разработчик: Кирилла Розова собеседует Алексей Гладков
• Flutter Dev Podcast #42: как стать Flutter-разработчиком? Часть 1
• Конкурс экологичных игр от Flutter и Global Citizen
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBenchmarking Dart«s json serialization and dataclass ecosystem
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPublishing Kotlin Multiplatform Swift Packages Using Google Cloud Storage and Cloud Run
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHello MAUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMultiplatform Magic: One Codebase, Three Platforms
• 377ae0333d0f4b7b97307c9eea5ee21a.gifExpo Router v3: API Routes, bundle splitting, speed improvements, and more
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMemory Leak In Dart/Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter — Interactive with gallery viewer using InteractiveViewer and Matrix4
• 377ae0333d0f4b7b97307c9eea5ee21a.gif.NET MAUI — Creating Profile Settings Page with Form Items
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCustomize Your Flutter Environment with Dart Define
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngRunning Phi-2 a Large Language model like ChatGPT, locally offline in Flutter App

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

• Сам написал, сам поиграл: как работали трёхмерные игры на кнопочных телефонах нулевых? Пишем 3D-шутер с нуля
• Проект Sensenmann: удаление кода в масштабе
• Clerk получил $30 млн на аутентификацию и авторизацию для разработчиков
• Вопросы с собеседований: В чем разница между LinkedList и ArrayList
• Huawei презентовал HarmonyOS NEXT
• Разработка под Аврору
• Безопасность приложений
• Cracking the Mobile Interview
• Как тимлиду оценить успешность в своей роли
• Почему так мало женщин в IT?
• Podlodka: Про дипфейки, этику и цену прогресса
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow To Deal With Technical Debt
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Open Source Sustainability Crisis
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMobile App Architectural Best Practices in Action
• 377ae0333d0f4b7b97307c9eea5ee21a.gif3 questions that will make you a phenomenal rubber duck
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSensenmann: Code Deletion at Scale
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe art of shipping faster
• 377ae0333d0f4b7b97307c9eea5ee21a.gif5 achievable side hustles for developers
• 377ae0333d0f4b7b97307c9eea5ee21a.gifApp Deep Dive: Peacock
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Weirdest Bug I«ve Seen Yet
• 377ae0333d0f4b7b97307c9eea5ee21a.gif39 Challenges on Building Mobile Apps at Scale
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWriting code that makes mistakes harder

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

• Реальные знаменитости и Реальные бренды в BeReal
• Как посчитать ценные органические установки
• Почему игры становятся кроссплатформенными и как решить проблему привлечения пользователей
• Among Us: игра, которая не смогла
• X поставил рекорд по прибыли
• Эмоциональный интеллект в UX-исследованиях
• Google Ads использует ИИ для создания кампаний
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCreating an irresistible loyalty program for your app

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

• Отправляем и принимаем SMS с помощью SIM868 и Repka Pi
• Samsung и Google готовят Wear OS 5 на базе Android 14
• The Machine Learning Engineering Open Book: справочник по машинному обучению
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTensorFlow Lite vs PyTorch Mobile for On-Device Machine Learning
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLangChain GEN AI Tutorial — 6 End-to-End Projects using OpenAI, Google Gemini Pro, LLAMA2

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

© Habrahabr.ru