В новом дайджесте изучаем Swift OpenAPI Generator и работу Spotify на Bazel, вспоминаем 15 лет Android и обозреваем невизуальную доступность, внедряем карты, пишем бесполезные программы, возвращаемся к Windows Phone и многое другое!
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

iOS
• Готов ли Swift OpenAPI Generator для продуктивного кода?
• Как Spotify бесшовно перешел на сборки Bazel
• SwiftUI: от сомнений к успешному внедрению
• Keyboard Layout Guide
• Автоматизация ревью ресурсных картинок в iOS
• Реальное iOS собеседование в Яндекс
• Поваренная книга SwiftUI: настройка фона и границ представления + Создание View и его модификаторов
•
SwiftSyntax Code Generation Notes
•
How (not) to monitor SwiftUI @State
•
Observation Evolution: SwiftUI 5’s Shift from Combine
•
Animating with Elegance: Exploring Phased Animations in SwiftUI 5
•
Create a Pie or Donut chart with SwiftUI Charts in iOS 17
•
Unsafe memory mutation
•
Preparing your App for VoiceOver: use Accessibility Label
•
iOS Single App Mode Escape
•
My Toddler Loves Planes, So I Built Her A Radar
•
Typewriter Text Animation In SwiftUI
•
Bad practice: not using Phantom Types
•
Use TensorFlow Lite model in SwiftUI Application
•
Find Ancestor Types
•
Swift Metatypes: What They Are and Why You Should Care
•
Bad practice: not using multiline strings
•
Generating Random Numbers Elegantly in Swift
•
TestFlight makes it even simpler to manage testers
•
SwiftUI Tutorial — Animated TabBar
•
How to Integrate Camera APIs using SwiftUI
•
Custom Swift Logger in Xcode 15
•
Swift Metatypes: What They Are and Why You Should Care
•
Mastering TipKit: Advanced
•
Create a Spotify-Style Lyric View in SwiftUI
•
Beautify Code Without Optionals in Swift
•
Mastering TipKit in iOS 17
•
SwiftUI: Building Notes App + SwiftData + CRUD
•
Build a Twitch-Like Live Streaming App With SwiftUI
•
Resizable Custom Tab Bar for macOS
•
Lock SwiftUI View With Biometric/Custom Number Lock — Local Authentication
•
Tagged: обертка типов для выразительного кода
•
Dime: красивый трекер финансов для iOS
Android
• Воспоминания о 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 — память
•
Adopt Compose for View-based libraries
•
Custom Dialog Animation in Jetpack Compose
•
Dependency Injection in Legacy Code
•
Interaction Latency: Square’s User-Centric Mobile Performance Metric
•
What’s new in Jetpack Benchmark 1.2.0
•
Kotlin and Variance: Navigating Type Relationships
•
From Blank to Beautiful: Implementing Shimmer Effect in Compose
•
Device Streaming: The latest devices you need, when you need them
•
Google Play Games on PC Developer Emulator
•
How to write less code in tests
•
Rethinking Base/Core Classes and Modules in Android Software Development
•
Modularization of Android project in practice
•
How I Fell in Kotlin’s RunBlocking Deadlock Trap, and How You Can Avoid It
•
Currying in Kotlin
•
Data caching using Room in Kotlin, Remote Mediator API, MVI Architecture
•
Details on Google Play’s Photo and Video Permissions policy
•
Kotlin Coroutines vs Threads Performance Benchmark
•
Automatically Mirroring Images for RTL Layouts
•
#TheAndroidShow: faster and easier to build excellent apps, across devices!
•
Play PolicyBytes
•
95% Don’t Understand THIS About Coroutines (Main-Safety)
•
Which Compile Options Should You Choose? (Java & Kotlin Version)
•
Building a Spotify Music Player with Real-Time Lyrics using Flutter
•
Beginner Guide to Mutation Testing in Kotlin
•
Image Toolbox: графический редактор для Android на чистой архитектуре
•
ComposeDialogs: расширяемые диалоги в Material 3
Кроссплатформа
• Flutter Yandex Mapkit: как внедрить основные инструменты Яндекс Карт в проект на Flutter. Часть 1 и Часть 2
• Решаем трудности адаптации мобильных приложений с Responsive_framework
•
Setting up Kotlin Multiplatform with KSP
•
Flutter theme made easy
•
Testing in Flutter and Dart: Unit Testing + II
•
Flutter’s Overlay Widget and OverlayEntry: A Comprehensive Guide
•
The Flutter Forest — Demystifying Flutter trees
•
Mastering Error Handling in Flutter with Dio
•
Building a Spotify Music Player with Real-Time Lyrics using Flutter
•
Full Flutter Beginner Course
•
Twine: мультиплатформенный RSS-ридер на Kotlin и Compose
Разработка
• Пишите больше «бесполезных» программ
• Как интегрировать мультиаккаунт в уже работающий сервис и не поломать всё
• Road Run, или как я свою первую игру делал. Часть 1
• Что будет с мобильными релизами, если улучшать и автоматизировать процессы
• Адаптивный дизайн приложений на Gtk
• Как изменились подходы к автоматизированному тестированию в Тинькофф
• Avito Platform engineering meetup #2
• Ozon Tech Community ML&DS Meetup
• Полный курс по QA. Как правильно писать тесты?
• Сатья Наделла признает, что отказ от Windows Phone и мобильных устройств был ошибкой
• Скриншот-тесты — это ручные тесты
• Respawn: лучшее приложение для саморазвития в мире
• Больше всего денег для счастья нужно программистам
• Разработка мобильных приложений: чем Android лучше iOS?
•
Startup CTO Handbook
•
An Interactive Introduction to Fourier Transforms
•
How does macOS manage virtual cores on Apple silicon?
•
Courier: Reimagining How We Send Push Notifications
•
Step by Step Guide to Succeed in Mobile System Design Interviews
•
An aborted experiment with server Swift
•
How Tinder designs product (and why)
•
Where are all the laid-off software developers going?
•
UK games jobs vacancies reaches three-year low
Аналитика, маркетинг и монетизация
• Luminar Neo упрощает использование ИИ в обработке фотографий
• Wyzr Friends — приложение поиска друзей для взрослых
• Daylyy — еще один анти-I*****
• Возврат к Windows Phone позволяет блокировать рекламу на YouTube
• Сторонние приложения ChatGPT теряют прибыль
•
Q3 2023 Regional Market Pulse from Data.ai
•
India Festive Report 2023
AI, Устройства, IoT
• От Style Transfer до диффузии: эволюция визуальных эффектов на смартфонах
• ChatGPT в мобильной разработке: как использовать, чтобы получить пользу
• $30.5 млн в посевном раунде: CentML — оптимизация обучения и работы ИИ-моделей
• В стандарте Matter 1.2 появилась крупная бытовая техника
• Сделано с помощью ИИ Google — новая серия видео
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

iOS• Готов ли Swift OpenAPI Generator для продуктивного кода?
• Как Spotify бесшовно перешел на сборки Bazel
• SwiftUI: от сомнений к успешному внедрению
• Keyboard Layout Guide
• Автоматизация ревью ресурсных картинок в iOS
• Реальное iOS собеседование в Яндекс
• Поваренная книга SwiftUI: настройка фона и границ представления + Создание View и его модификаторов
•
SwiftSyntax Code Generation Notes•
How (not) to monitor SwiftUI @State•
Observation Evolution: SwiftUI 5’s Shift from Combine•
Animating with Elegance: Exploring Phased Animations in SwiftUI 5•
Create a Pie or Donut chart with SwiftUI Charts in iOS 17•
Unsafe memory mutation•
Preparing your App for VoiceOver: use Accessibility Label•
iOS Single App Mode Escape•
My Toddler Loves Planes, So I Built Her A Radar•
Typewriter Text Animation In SwiftUI•
Bad practice: not using Phantom Types•
Use TensorFlow Lite model in SwiftUI Application•
Find Ancestor Types•
Swift Metatypes: What They Are and Why You Should Care•
Bad practice: not using multiline strings•
Generating Random Numbers Elegantly in Swift•
TestFlight makes it even simpler to manage testers•
SwiftUI Tutorial — Animated TabBar•
How to Integrate Camera APIs using SwiftUI•
Custom Swift Logger in Xcode 15•
Swift Metatypes: What They Are and Why You Should Care•
Mastering TipKit: Advanced•
Create a Spotify-Style Lyric View in SwiftUI•
Beautify Code Without Optionals in Swift•
Mastering TipKit in iOS 17•
SwiftUI: Building Notes App + SwiftData + CRUD•
Build a Twitch-Like Live Streaming App With SwiftUI•
Resizable Custom Tab Bar for macOS•
Lock SwiftUI View With Biometric/Custom Number Lock — Local Authentication•
Tagged: обертка типов для выразительного кода•
Dime: красивый трекер финансов для iOS
Android• Воспоминания о 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 — память
•
Adopt Compose for View-based libraries•
Custom Dialog Animation in Jetpack Compose•
Dependency Injection in Legacy Code•
Interaction Latency: Square’s User-Centric Mobile Performance Metric•
What’s new in Jetpack Benchmark 1.2.0•
Kotlin and Variance: Navigating Type Relationships•
From Blank to Beautiful: Implementing Shimmer Effect in Compose•
Device Streaming: The latest devices you need, when you need them•
Google Play Games on PC Developer Emulator•
How to write less code in tests•
Rethinking Base/Core Classes and Modules in Android Software Development•
Modularization of Android project in practice•
How I Fell in Kotlin’s RunBlocking Deadlock Trap, and How You Can Avoid It•
Currying in Kotlin•
Data caching using Room in Kotlin, Remote Mediator API, MVI Architecture•
Details on Google Play’s Photo and Video Permissions policy•
Kotlin Coroutines vs Threads Performance Benchmark•
Automatically Mirroring Images for RTL Layouts•
#TheAndroidShow: faster and easier to build excellent apps, across devices!•
Play PolicyBytes•
95% Don’t Understand THIS About Coroutines (Main-Safety)•
Which Compile Options Should You Choose? (Java & Kotlin Version)•
Building a Spotify Music Player with Real-Time Lyrics using Flutter•
Beginner Guide to Mutation Testing in Kotlin•
Image Toolbox: графический редактор для Android на чистой архитектуре•
ComposeDialogs: расширяемые диалоги в Material 3
Кроссплатформа• Flutter Yandex Mapkit: как внедрить основные инструменты Яндекс Карт в проект на Flutter. Часть 1 и Часть 2
• Решаем трудности адаптации мобильных приложений с Responsive_framework
•
Setting up Kotlin Multiplatform with KSP•
Flutter theme made easy•
Testing in Flutter and Dart: Unit Testing + II•
Flutter’s Overlay Widget and OverlayEntry: A Comprehensive Guide•
The Flutter Forest — Demystifying Flutter trees•
Mastering Error Handling in Flutter with Dio•
Building a Spotify Music Player with Real-Time Lyrics using Flutter•
Full Flutter Beginner Course•
Twine: мультиплатформенный RSS-ридер на Kotlin и Compose
Разработка• Пишите больше «бесполезных» программ
• Как интегрировать мультиаккаунт в уже работающий сервис и не поломать всё
• Road Run, или как я свою первую игру делал. Часть 1
• Что будет с мобильными релизами, если улучшать и автоматизировать процессы
• Адаптивный дизайн приложений на Gtk
• Как изменились подходы к автоматизированному тестированию в Тинькофф
• Avito Platform engineering meetup #2
• Ozon Tech Community ML&DS Meetup
• Полный курс по QA. Как правильно писать тесты?
• Сатья Наделла признает, что отказ от Windows Phone и мобильных устройств был ошибкой
• Скриншот-тесты — это ручные тесты
• Respawn: лучшее приложение для саморазвития в мире
• Больше всего денег для счастья нужно программистам
• Разработка мобильных приложений: чем Android лучше iOS?
•
Startup CTO Handbook•
An Interactive Introduction to Fourier Transforms•
How does macOS manage virtual cores on Apple silicon?•
Courier: Reimagining How We Send Push Notifications•
Step by Step Guide to Succeed in Mobile System Design Interviews•
An aborted experiment with server Swift•
How Tinder designs product (and why)•
Where are all the laid-off software developers going?•
UK games jobs vacancies reaches three-year low
Аналитика, маркетинг и монетизация• Luminar Neo упрощает использование ИИ в обработке фотографий
• Wyzr Friends — приложение поиска друзей для взрослых
• Daylyy — еще один анти-I*****
• Возврат к Windows Phone позволяет блокировать рекламу на YouTube
• Сторонние приложения ChatGPT теряют прибыль
•
Q3 2023 Regional Market Pulse from Data.ai•
India Festive Report 2023
AI, Устройства, IoT• От Style Transfer до диффузии: эволюция визуальных эффектов на смартфонах
• ChatGPT в мобильной разработке: как использовать, чтобы получить пользу
• $30.5 млн в посевном раунде: CentML — оптимизация обучения и работы ИИ-моделей
• В стандарте Matter 1.2 появилась крупная бытовая техника
• Сделано с помощью ИИ Google — новая серия видео
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.