Мобильная разработка за неделю #521 (8 — 14 января)

Возвращаемся с нашим мобильными дайджестами! В первом в этом году про влияние AnyView на производительность, «вредоносность» 2ГИС, золотой век Kotlin и его неопределенное будущее, годовой отчет Data.ai и многое другое. Подключайтесь!

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

ddisz4gd3jbwydhetwsgsj-xzlu.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Влияние AnyView на производительность SwiftUI
• Как делать браузер под iOS и управлять большой командой
• Разборы важных новинок для iOS-разработки с WWDC 2023
• ScrollView с прилипающим выделенным элементом на SwiftUI
• Топ-10 вопросов по iOS: cобеседование с разбором ответов и материалами
• Swift-уроки: PropertyWrappers — обертки свойств
• Вопросы с собеседований: Как устроено наследование в Swift
• Вышел Xcode с поддержкой Apple Vision Pro
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow we built a Swift macOS app that uses our Rust library
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAnyView«s impact on SwiftUI performance
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCan Swift Keep Its Compile-Safe Thread Management Promise?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftData Course
• 377ae0333d0f4b7b97307c9eea5ee21a.gifChanging your iOS App Icon programmatically
• 377ae0333d0f4b7b97307c9eea5ee21a.gif@Observable Macro performance increase over ObservableObject
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift Note: How to write code faster by using Xcode Snippet
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUsing @Binding with @Environment (Object.self)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHorizontal scrollable buttons (tabs) with Indicators
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTestable SwiftUI views using async/await
• 377ae0333d0f4b7b97307c9eea5ee21a.gifA Girl and her @ViewBuilder
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPerception: A back-port of @Observable
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStoreKit testing in Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI Observation Framework: State Containers
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUsing Identifiable in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSolving SwiftUI Performance Issues with the Instruments App
• 377ae0333d0f4b7b97307c9eea5ee21a.gif5 Big Creators Every Aspiring Senior iOS Developer Must Follow 2024
• 377ae0333d0f4b7b97307c9eea5ee21a.gifScalable Continuous Integration for iOS
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAdvanced Swift Actors: Re-entrancy & Interleaving
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to use Published Properties inside a Protocol in SwiftUI?
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngDetecting Sensitive Content in your own iOS app
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI Custom File Extensions | Import & Export
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to write Unit Tests for Code Performance in Xcode
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow To Use Context Menus In Xcode 15 (SwiftUI)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCustomized Animated Paywalls — RevenueCat
• 96716bcb926741e79bb1c284a88083ca.pngPerception: бэкпорт @Observable на старые iOS
• 96716bcb926741e79bb1c284a88083ca.pngSwiftEasyPop: алерты и тосты в SwiftUI

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Как я попробовал написать авиасимулятор
• 2ГИС — опасное приложение?
• Рефакторинг аналитики в многомодульном Android приложение для ускорения сборки
• Вопросы с собеседований: Для чего нужны фрагменты, если есть активити
• Как мы создавали дизайн систему на Jetpack Compose
• Из 1С в Android-разработчики? Кодревью кода на Kotlin
• Google разрешит больше игр на реальные деньги в Play Store
• Google улучшает трансляции в Android
• Пример исследовательского реверс-инжиниринга приложения Zone Launcher
• 377ae0333d0f4b7b97307c9eea5ee21a.gifExploring use of Gemini Generative AI APIs in a Kotlin/Compose Multiplatform project
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRemoving Ambiguity in Kotlin Function by Reference
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFree hand draw polygon in Google Maps Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Android Dynamic Feature Module Delivery
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Lazy Lists in Jetpack Compose with Data Classes and MVI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding Real-Time Location Tracking in Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifReshaping the Network Layer: Transitioning from Retrofit to Ktor
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid Development in 2023: A Year of Evolution
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Tricky Output Questions
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBoosting Kotlin Performance: Essential Knowledge in 15 Best Practices
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSynchronous and Asynchronous runs: run, runCatching, runBlocking and runInterruptible in Kotlin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSafely Navigating the Transition: From Gson to kotlinx.serialization
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUsing C/C++ in Android: A Comprehensive Guide For Beginners
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid, Bluetooth and BLE the modern way: a complete guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid DevOps CI/CD Pipeline Architecture
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMy Top 10 Clean Code Tips for Kotlin Mobile in 2024
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSPI in Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSupercharging Android Build Processes to Boost Developer Efficiency
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThe FASTEST Local Search — Introduction to AppSearch on Android
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThe #1 Thing Android Developers Ignore When Testing Their App
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngTop 3 Secret Jetpack Compose Modifiers I Bet You Didn«t Know
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngDigging into Android System Services
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngWhat«s up with Android«s back?
• 96716bcb926741e79bb1c284a88083ca.pngCompose Stacked Snackbar: мультиплатформенный Snackbar
• 96716bcb926741e79bb1c284a88083ca.pngAnimatedBottomBarCompose: анимированный TabBar для Jetpack Compose

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

• Погружение в мир адаптивной верстки с Flutter
• Об одном способе реализации архитектуры крупного Flutter-приложения
• Управляем навигацией во Flutter с помощью библиотеки auto_route: часть 2. Guards, Wrappers и миграция
• Что нового во Flutter 3.16, ч.1 + ч.2
• WebSocket Reconnection in Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifObject Detection in React Native
• 377ae0333d0f4b7b97307c9eea5ee21a.gifImplementing Clean Code Principles in Flutter Programming
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter 3.18 | Top 8 Feature
• 377ae0333d0f4b7b97307c9eea5ee21a.gifReact Native Masters: Best Practices for React Native Applications
• 377ae0333d0f4b7b97307c9eea5ee21a.gifVisual Studio Code Settings for Flutter Project

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

• Золотой век Kotlin и его неопределенное будущее
• Разработка Карт и первый коммит с KMM в Яндексе
• Гайд по Scratch для детей: как запустить игру на Android
• Качество программного обеспечения
• Copilot стал подбирать выразительные имена для переменных
• C# стал языком года в Индексе TIOBE
• Рынок работы для разработчиков ухудшается
• Принципы функционального программирования — Обучающий курс Университета Карнеги-Меллона
• Unity сокращает 25% своего персонала
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDesign better pagination
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUI/UX Design Trends For 2024
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow Uber Finds Nearby Drivers at 1 Million Requests per Second
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe biggest mistake you«re probably making for your FAANG/MAANG Interview prep
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to use stacked PRs to unblock your entire team
• 377ae0333d0f4b7b97307c9eea5ee21a.gifProduct Management is broken, a change is coming
• 377ae0333d0f4b7b97307c9eea5ee21a.gifI«m a different engineer than I was 3 years ago
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGoogle Pay Home Page Redesigning
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGlaring UX Mistakes on Real Apps

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

• State of Mobile 2024 — годовой отчет Data.ai
• Темные паттерны в UX: как приложения нами манипулируют
• Продвижение приложения в VK Рекламе и in-app: как снизить CPI и CPA в 2 раза — кейс «Ситидрайв» и Rocket10
• Язык успеха — Duolingo
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPush Notifications — What to Push, What Not to Push, and How Often

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

• Кто знает, что значит GPT в названии ChatGPT, могут дальше не читать
• Как я победил хаос умных устройств, или Цифровая трансформация жилого пространства
• Энергетика Будущего: Как искусственный интеллект помог разработать батарею с 70%-ной экономией лития
• Zoe Care показала умную розетку, обнаруживающую падения людей при помощи Wi-Fi
• Google реорганизует свое «железное» подразделение
• PhotoRoom, ИИ-приложение для обработки фотографий, привлекает еще $60 млн
• Quora получила $75 млн на развитие ИИ-платформы Poe
• OpenAI запускает GPT Store
• Лучшие компьютерные мыши 2024
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngData Analyst Bootcamp for Beginners (SQL, Tableau, Power BI, Python, Excel, Pandas, Projects, more)
• 96716bcb926741e79bb1c284a88083ca.pngJan: открытый офлайн аналог ChatGPT

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

© Habrahabr.ru