Мобильная разработка за неделю #516 (20 — 26 ноября)

В нашей новой подборке отслеживание изменений в SwiftUI и тысяча проблем App Clip, Kotlin под капотом и простая архитектура, OpenStreetMap в Flutter, 18 лет работы в Google, мышление Platform Engineer, приложением №1 в App Store, которое не обновлялись уже 7 лет и многое другое!

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

i8zpgk7estxujykawitelerdyia.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Отладка представлений SwiftUI: что вызывает изменения?
• ChatGPT-4 в помощь: используем AI в доработке простого iOS-приложения
• App Clip и тысяча проблем
• Строки в Swift выглядят одинаково, но не являются таковыми?
• Swift-уроки: Actor
• Что можно и что нельзя делать с Async/Await
• Как получить международный оффер iOS-разработчику
• Вопросы с собеседований: что такое Семафор в Swift
• Выпуск Apple Vision Pro состоится «где-то в марте»
• Поваренная книга SwiftUI: настройка прозрачности
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDistributing Work Between Actors
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift strings look identical but aren«t
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to migrate to a new schema with SwiftData in iOS
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEnsuring App UI Correctness Using Snapshot Tests
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe alternative to SwiftUI«s Spacer
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAnimating numeric text in SwiftUI with the Content Transition modifier
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTypealias in Swift: 3 use cases
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDestroy dependency injection in Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDeploy CoreML Models on the Server with Vapor
• 377ae0333d0f4b7b97307c9eea5ee21a.gifenum Guru: Swift enum in depth
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUsing Observation framework outside of SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifScoped animations in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI SplitView Compact Column Control
• 377ae0333d0f4b7b97307c9eea5ee21a.gifReference types and Retain cycles (Weak vs. Unowned)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift UITableView Prefetching: A Guide to Smoother Scrolling
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOur developer account was removed by Apple, and they haven«t paid out $108,878
• 377ae0333d0f4b7b97307c9eea5ee21a.gifConquering the Climbing Stairs Challenge with Swift: A Dynamic Programming Approach
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFrom Concept to App Store: The Making of MuayThaiJournal
• 377ae0333d0f4b7b97307c9eea5ee21a.gifReplacing your logging framework with OSLog
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAutomatic Component Sizing — SwiftUI for iOS 17
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSimple Drop Down Picker — SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI: New Observation Framework
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI Tooltips with TipKit (Popover & Inline Tips)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.png8 Tips to Design a Great Paywall
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftData Lightweight Migrations
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwipe Actions For ScrollView — No Gestures! — iOS 17 Scroll APIs
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Make a Color Picker with ScrollView, Scroll Position and Visual Effects
• 96716bcb926741e79bb1c284a88083ca.pngKingfisher: загрузка и кеширование изображений
• 96716bcb926741e79bb1c284a88083ca.pngAcknowList: список лицензий

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Kotlin под капотом: нюансы использования аннотаций
• Пишем Kotlin DSL для графов навигации в домашних условиях
• Новые API для адаптивных макетов в Jetpack Compose
• API vs ABI: разницу видят не только лишь все
• Простая архитектура с использованием MVVM и делегатов в Android. Оптимальное решение для малых проектов
• Статический анализатор Ktlint для Kotlin в Android
• Как устроен Android в умных колонках Яндекса
• Топ-10 вопросов для Senior Android: собеседование с разбором ответов и материалами
• Где остановится Kotlin: язык поставил новый рекорд в индексе TIOBE
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMaking my concurrent algorithm 6000% better
• 377ae0333d0f4b7b97307c9eea5ee21a.gifJetpack Compose + Material Components for Android TV: Cards
• 377ae0333d0f4b7b97307c9eea5ee21a.gifNot all UI tests are the same
• 377ae0333d0f4b7b97307c9eea5ee21a.gifExercises in futility: One-time events in Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifJava Memory Leaks: Detection and Prevention
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMaking TDD a Habit in Android Development
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Add Content Descriptions in Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMigration from Kapt to KSP
• 377ae0333d0f4b7b97307c9eea5ee21a.gifViewModel: Events as State are an Antipattern
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTop 10 Android Memory Leak Causes
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Camera2 API in Kotlin: A Comprehensive Guide with Examples
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Kotlin«s Invoke Operator: Simplifying Code and Enhancing Readability
• 377ae0333d0f4b7b97307c9eea5ee21a.gifLaw of Demeter with examples in Kotlin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIn-App Update in Android 2023
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuild Video Calling for Your Android WhatsApp Clone With Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Create an Animated Splash Screen for Android: A Step-by-Step Guide
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngdroidcon London 2023 Videos
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Migrate an Android Project to Kotlin Multiplatform (KMP)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFirebase Demo Day Recap, Flutter 3.16, and more dev news!
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngA Team of 20 to Publish an App?! — THIS New Google Play Policy Change is CRAZY
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCustom Savers
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCircuit — Android App Architecture Masterclass with Zac and Josh from Slack
• 96716bcb926741e79bb1c284a88083ca.pngReorderable: таскание элементов в (Lazy)Column и (Lazy)Row
• 96716bcb926741e79bb1c284a88083ca.pngExposed: SQL-фреймворк для Kotlin
• 96716bcb926741e79bb1c284a88083ca.pngCapturable: получение Bitmap из Composable

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

• Как мы отказались от styled-components в React Native приложениях
• OpenStreetMap в Flutter-проекте: что такое flutter_map, как его внедрить и чем дополнить
• Как добавить Flutter в нативное приложение iOS и протестировать его на Codemagic: Часть 2 + Часть 1
• Flutter 3.16: обзор обновления фреймворка с комментариями разработчиков Surf
• 377ae0333d0f4b7b97307c9eea5ee21a.gifForbes Mobile App Shifts To Kotlin Multiplatform
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe new lint in Dart 3.2
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMajor steps this year on the journey to multiplatform development
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTop 12 Flutter Open source projects
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter Interview Questions and Answers: Top 30 for Pros!
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter Networking Tutorial: Getting Started
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMemory Management in Flutter: Best Practices and Pitfalls
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUtilizing JS Library for Flutter Web
• 377ae0333d0f4b7b97307c9eea5ee21a.gifNative UI Components in React
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOur journey from React Native to Expo for mobile app development at Alan
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThe State of Kotlin Multiplatform
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngGetting Started With KMP: Build Apps for iOS and Android With Shared Logic and Native UIs
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuild Apps for iOS, Android, and Desktop With Compose Multiplatform
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFlutter Responsive UI: Crafting Dynamic Layouts for Every Device

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

• Размышления о 18 годах работы в Google
• Как Spotify отслеживает размеры приложений
• Система аутентификации: сделай сам vs возьми готовое
• Мыслим как Platform Engineer
• Не нужно блокировать кнопки
• Лев Толстой о мобильной разработке: Искусство написания приложений
• Непрерывное тестирование: разработка выигрышной стратегии тестирования
• Tracer — альтернатива Crashlytics: другой взгляд на аналитику ошибок в приложениях
• Как качать миллионы фотографий в сутки, выдержать кратный рост и не умереть?
• Насколько реален российский айфон: разговор с Максимом Горшениным.
• Podlodka #347: развитие продукта от 0 до 1
• Исследование The State of Developer Ecosystem 2023 от JetBrains
• Magic Research: соло-разработчик заработал более $150,000, сделав всего 2 сообщения на Reddit
• GameMaker отменил подписку для инди-разработчиков
• Прежде чем пытаться что-то сделать, убедитесь, что вы можете сделать то, что ничего не делает
• Умный код — это, вероятно, худший код, который вы можете написать
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGoodbye, Clean Code
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow DoorDash Standardized and Improved Microservices Caching
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Architecture Of Serverless Data Systems
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIt«s OK if your code is just good enough

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

• Что такое метрика ага-момента и как ее найти
• Проектирование экономики F2P игр на основе продуктовых метрик
• Компания Sunbird закрыла свое приложение для обмена сообщениями с iMessage
• Секретная сделка Google позволила Spotify полностью обойти плату за пользование Google Play
• Аудитория RuStore достигла 22.5 миллиона пользователей в месяц
• Rooms, интерактивный 3D-конструктор и просто «уютная игра», появился в App Store
• В App Store приложением №1 стали раскраски, которые не обновлялись уже 7 лет
• Good games don«t die — Can legacy titles save the mobile game industry?
• Mastering SKAN 4: The essentials for iOS success

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

• Чем заменить Raspberry PI в промышленности?
• KC868-AM: мини мы или ESP32 IO Expansion Board
• Опубликован курс «Генеративный ИИ для начинающих» от Microsoft
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMachine Learning with Python and Scikit-Learn — Full Course

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

© Habrahabr.ru