Мобильная разработка за неделю #512 (23 — 29 октября)

В новом дайджесте изучаем Swift OpenAPI Generator и работу Spotify на Bazel, вспоминаем 15 лет Android и обозреваем невизуальную доступность, внедряем карты, пишем бесполезные программы, возвращаемся к Windows Phone и многое другое!

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

vy6ifruqkoggjoplufd4ohlzbbo.jpeg

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Готов ли Swift OpenAPI Generator для продуктивного кода?
• Как Spotify бесшовно перешел на сборки Bazel
• SwiftUI: от сомнений к успешному внедрению
• Keyboard Layout Guide
• Автоматизация ревью ресурсных картинок в iOS
• Реальное iOS собеседование в Яндекс
• Поваренная книга SwiftUI: настройка фона и границ представления + Создание View и его модификаторов
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftSyntax Code Generation Notes
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow (not) to monitor SwiftUI @State
• 377ae0333d0f4b7b97307c9eea5ee21a.gifObservation Evolution: SwiftUI 5«s Shift from Combine
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAnimating with Elegance: Exploring Phased Animations in SwiftUI 5
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCreate a Pie or Donut chart with SwiftUI Charts in iOS 17
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUnsafe memory mutation
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPreparing your App for VoiceOver: use Accessibility Label
• 377ae0333d0f4b7b97307c9eea5ee21a.gifiOS Single App Mode Escape
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMy Toddler Loves Planes, So I Built Her A Radar
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTypewriter Text Animation In SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBad practice: not using Phantom Types
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUse TensorFlow Lite model in SwiftUI Application
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFind Ancestor Types
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift Metatypes: What They Are and Why You Should Care
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBad practice: not using multiline strings
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGenerating Random Numbers Elegantly in Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTestFlight makes it even simpler to manage testers
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI Tutorial — Animated TabBar
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Integrate Camera APIs using SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCustom Swift Logger in Xcode 15
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift Metatypes: What They Are and Why You Should Care
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering TipKit: Advanced
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCreate a Spotify-Style Lyric View in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBeautify Code Without Optionals in Swift
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMastering TipKit in iOS 17
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI: Building Notes App + SwiftData + CRUD
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuild a Twitch-Like Live Streaming App With SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngResizable Custom Tab Bar for macOS
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLock SwiftUI View With Biometric/Custom Number Lock — Local Authentication
• 96716bcb926741e79bb1c284a88083ca.pngTagged: обертка типов для выразительного кода
• 96716bcb926741e79bb1c284a88083ca.pngDime: красивый трекер финансов для iOS

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Воспоминания о 15 годах Android
• Как зловредные приложения могут скрывать работу с буфером обмена в Android 14
• Оптимизируя sequences — или как мой код попал в Kotlin
• Построение графа покрытия UI-тестами бизнес-логики на основе VisualFSM
• Обзор невизуальной доступности смартфонов под управлением операционной системы Android
• Реализация экранов авторизации и регистрации с помощью Custom View и Firebase
• Stone: знакомство с API
• Вопросы с собеседований: для чего нужен Data class в Kotlin
• Собеседование в Яндекс: платформа Android
• По ту сторону EditText. Программная клавиатура в Android
• Kodein в Android. Что за зверь и как его готовить
• Готовим конфигурацию Android-приложения с помощью Dynamic Proxy и рефлексии
• Как OkHttpClient повышает сетевую производительность
• На 65% меньше APK и на 70% меньше потребление памяти: оптимизация приложения для Android — память
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAdopt Compose for View-based libraries
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCustom Dialog Animation in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDependency Injection in Legacy Code
• 377ae0333d0f4b7b97307c9eea5ee21a.gifInteraction Latency: Square«s User-Centric Mobile Performance Metric
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWhat«s new in Jetpack Benchmark 1.2.0
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin and Variance: Navigating Type Relationships
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFrom Blank to Beautiful: Implementing Shimmer Effect in Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDevice Streaming: The latest devices you need, when you need them
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGoogle Play Games on PC Developer Emulator
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to write less code in tests
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRethinking Base/Core Classes and Modules in Android Software Development
• 377ae0333d0f4b7b97307c9eea5ee21a.gifModularization of Android project in practice
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow I Fell in Kotlin«s RunBlocking Deadlock Trap, and How You Can Avoid It
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCurrying in Kotlin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifData caching using Room in Kotlin, Remote Mediator API, MVI Architecture
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDetails on Google Play«s Photo and Video Permissions policy
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Coroutines vs Threads Performance Benchmark
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAutomatically Mirroring Images for RTL Layouts
• gtu1iaz0-ajkbqpeq8n6dmql4zq.png#TheAndroidShow: faster and easier to build excellent apps, across devices!
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngPlay PolicyBytes
• gtu1iaz0-ajkbqpeq8n6dmql4zq.png95% Don«t Understand THIS About Coroutines (Main-Safety)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngWhich Compile Options Should You Choose? (Java & Kotlin Version)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuilding a Spotify Music Player with Real-Time Lyrics using Flutter
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBeginner Guide to Mutation Testing in Kotlin
• 96716bcb926741e79bb1c284a88083ca.pngImage Toolbox: графический редактор для Android на чистой архитектуре
• 96716bcb926741e79bb1c284a88083ca.pngComposeDialogs: расширяемые диалоги в Material 3

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

• Flutter Yandex Mapkit: как внедрить основные инструменты Яндекс Карт в проект на Flutter. Часть 1 и Часть 2
• Решаем трудности адаптации мобильных приложений с Responsive_framework
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSetting up Kotlin Multiplatform with KSP
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter theme made easy
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTesting in Flutter and Dart: Unit Testing + II
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter«s Overlay Widget and OverlayEntry: A Comprehensive Guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Flutter Forest — Demystifying Flutter trees
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Error Handling in Flutter with Dio
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuilding a Spotify Music Player with Real-Time Lyrics using Flutter
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFull Flutter Beginner Course
• 96716bcb926741e79bb1c284a88083ca.pngTwine: мультиплатформенный RSS-ридер на Kotlin и Compose

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

• Пишите больше «бесполезных» программ
• Как интегрировать мультиаккаунт в уже работающий сервис и не поломать всё
• Road Run, или как я свою первую игру делал. Часть 1
• Что будет с мобильными релизами, если улучшать и автоматизировать процессы
• Адаптивный дизайн приложений на Gtk
• Как изменились подходы к автоматизированному тестированию в Тинькофф
• Avito Platform engineering meetup #2
• Ozon Tech Community ML&DS Meetup
• Полный курс по QA. Как правильно писать тесты?
• Сатья Наделла признает, что отказ от Windows Phone и мобильных устройств был ошибкой
• Скриншот-тесты — это ручные тесты
• Respawn: лучшее приложение для саморазвития в мире
• Больше всего денег для счастья нужно программистам
• Разработка мобильных приложений: чем Android лучше iOS?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStartup CTO Handbook
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAn Interactive Introduction to Fourier Transforms
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow does macOS manage virtual cores on Apple silicon?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCourier: Reimagining How We Send Push Notifications
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStep by Step Guide to Succeed in Mobile System Design Interviews
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAn aborted experiment with server Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow Tinder designs product (and why)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWhere are all the laid-off software developers going?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUK games jobs vacancies reaches three-year low

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

• Luminar Neo упрощает использование ИИ в обработке фотографий
• Wyzr Friends — приложение поиска друзей для взрослых
• Daylyy — еще один анти-I*****
• Возврат к Windows Phone позволяет блокировать рекламу на YouTube
• Сторонние приложения ChatGPT теряют прибыль
• 377ae0333d0f4b7b97307c9eea5ee21a.gifQ3 2023 Regional Market Pulse from Data.ai
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIndia Festive Report 2023

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

• От Style Transfer до диффузии: эволюция визуальных эффектов на смартфонах
• ChatGPT в мобильной разработке: как использовать, чтобы получить пользу
• $30.5 млн в посевном раунде: CentML — оптимизация обучения и работы ИИ-моделей
• В стандарте Matter 1.2 появилась крупная бытовая техника
• Сделано с помощью ИИ Google — новая серия видео

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

© Habrahabr.ru