В этом выпуске перечисления Swift и осознанная оптимизация Compose, конфетные сетевые запросы и воображаемые проблемы, приложение для поиска друзей, пустые состояния, цвета Ripple, декораторы и многое другое. Заходите!
В нашем Telegram-канале Mobile Insights, еще больше материалов для мобильных разработчиков, а в IT Insights — об интересном коде и технологиях. Подключайтесь!

 iOS
iOS
• Императивный UIKit vs Декларативный SwiftUI
• Как использовать UIContentUnavailableConfiguration для управления пустыми состояниями
• Немного о перечислениях в Swift
• Внедряем MapKit Яндекс Карт в iOS приложение
• На смену CoreData пришёл новый фреймворк SwiftData. Разбираемся, как он упрощает хранение данных
• Многопоточность в iOS-разработке
• visionOS(xrOS) сессии WWDC2023: введение в пространственные вычисления Apple
• SwiftUI vs UIKit. Что выбрать новичку?
• Apple выпустила visionOS SDK
• visionOS Fundamentals
visionOS Fundamentals
• SwiftUI Menu and Context Menu: How to Show Buttons with Dropdown Lists
SwiftUI Menu and Context Menu: How to Show Buttons with Dropdown Lists
• SwiftUI Presentations with Modals, Bottom Sheets, and FullScreen cover in iOS
SwiftUI Presentations with Modals, Bottom Sheets, and FullScreen cover in iOS
• MatchedGeometryEffect in SwiftUI
MatchedGeometryEffect in SwiftUI
• Little big improvements in Xcode 15
Little big improvements in Xcode 15
• Inspectors in SwiftUI
Inspectors in SwiftUI
• How to Handle Empty States Using UIContentUnavailableConfiguration
How to Handle Empty States Using UIContentUnavailableConfiguration
• The @Environment && @EnvironmentProperty SwiftUI Property Wrappers
The @Environment && @EnvironmentProperty SwiftUI Property Wrappers
• Mastering SwiftUI’s onChange
Mastering SwiftUI’s onChange
• Deep Dive into the New Features of ScrollView in SwiftUI 5
Deep Dive into the New Features of ScrollView in SwiftUI 5
• Xcode Previews with UIKit and AppKit in Xcode 15
Xcode Previews with UIKit and AppKit in Xcode 15
• Facade Design Pattern in Swift for Beginners (with async/await)
Facade Design Pattern in Swift for Beginners (with async/await)
• A Deep Dive Into Observation: A New Way to Boost SwiftUI Performance
A Deep Dive Into Observation: A New Way to Boost SwiftUI Performance
• Embracing MVVM: Empowering iOS Development with a Robust Architecture
Embracing MVVM: Empowering iOS Development with a Robust Architecture
• Storing WKWebView content for offline access in your iOS app
Storing WKWebView content for offline access in your iOS app
• Xcode Bookmarks: Save code landmarks & organize tasks
Xcode Bookmarks: Save code landmarks & organize tasks
• Agile Architecture in Swift
Agile Architecture in Swift
• A Deep Dive Into Observation: A New Way to Boost SwiftUI Performance
A Deep Dive Into Observation: A New Way to Boost SwiftUI Performance
• Run iOS tests with Marathon Cloud
Run iOS tests with Marathon Cloud
• Building Your Own Swift Code Generator Using Swift Script
Building Your Own Swift Code Generator Using Swift Script
• Meet StoreKit SubscriptionStoreView in iOS 17
Meet StoreKit SubscriptionStoreView in iOS 17
• 2000+ iOS Interview Questions And Answers: Your Path to Success
2000+ iOS Interview Questions And Answers: Your Path to Success
• Slow architecture in Swift
Slow architecture in Swift
• Animate SF Symbols with symbolEffect
Animate SF Symbols with symbolEffect
• Quick: behavior-driven тестирование
Quick: behavior-driven тестирование
• Swift Macros: лучшие макросы Swift
Swift Macros: лучшие макросы Swift
 Android
Android
• Осознанная оптимизация Compose
• Библиотека MockWebServer-DSL в open-source: делаем конфетку из сетевых запросов в UI-тестах
• Сервисы Google и Huawei в единой кодовой базе Android-приложения
• Какого цвета Ripple?
• Фантастический Compose и его побочные эффекты
• Как эволюционировали уязвимости в приложениях для Android
• Android TextView freezesText — замораживаем текст в Android-приложении
• Что внутри Android SDK
• Top 3 things to know from Google Play at Google I/O ‘2
Top 3 things to know from Google Play at Google I/O ‘2
• Technical quality on Google Play
Technical quality on Google Play
• What is the Context? — Android Basics 2023
What is the Context? — Android Basics 2023
• ViewModels & Configuration Changes — Android Basics 2023
ViewModels & Configuration Changes — Android Basics 2023
• The Art of App Modularization
The Art of App Modularization
• App Size Metrics — Continuous monitoring of App Size
App Size Metrics — Continuous monitoring of App Size
• Creating a Split Flap Display in Compose
Creating a Split Flap Display in Compose
• Builder Design Pattern in Kotlin
Builder Design Pattern in Kotlin
• Jetpack Compose — Making Composable lifecycle-aware
Jetpack Compose — Making Composable lifecycle-aware
• Mastering Android App Performance: Analyzing Bottlenecks with Perfetto
Mastering Android App Performance: Analyzing Bottlenecks with Perfetto
• Increase the Performance in Jetpack Compose
Increase the Performance in Jetpack Compose
• Accessibility & Testing in Jetpack Compose
Accessibility & Testing in Jetpack Compose
• Difference between == and === in Kotlin
Difference between == and === in Kotlin
• Kotlin Delegates: The Secret Ingredient for Decorator Pattern!
Kotlin Delegates: The Secret Ingredient for Decorator Pattern!
• User stack animation in Jetpack Compose
User stack animation in Jetpack Compose
• 5 Pro Kotlin Dev Hacks For More Assertive Code
5 Pro Kotlin Dev Hacks For More Assertive Code
• ADB — Say bye to “more than one device/emulator” error
ADB — Say bye to “more than one device/emulator” error
• I want to run any number of Android UI tests on each PR. Your actions?
I want to run any number of Android UI tests on each PR. Your actions?
• Android Mastering the Integration: Coexisting Google and Huawei Mobile Services in a Single Codebase
Android Mastering the Integration: Coexisting Google and Huawei Mobile Services in a Single Codebase
• A few shorthands for Jetpack Compose
A few shorthands for Jetpack Compose
• Android Data Repository — Simple pattern that we misunderstand
Android Data Repository — Simple pattern that we misunderstand
• Jetpack Compose Custom Layout Made Easy
Jetpack Compose Custom Layout Made Easy
• Negative Padding For Jetpack Compose Made Possible
Negative Padding For Jetpack Compose Made Possible
• AnkiDroid: карточки для запоминания
AnkiDroid: карточки для запоминания
• Clock of Clocks: часы на Jetpack Compose
Clock of Clocks: часы на Jetpack Compose
• Compose Sensors: работа с сенсорами устройства в Compose
Compose Sensors: работа с сенсорами устройства в Compose
 Кроссплатформа
Кроссплатформа
• Алгоритм создания бесшовного списка данных
• Делаем многопользовательскую кроссплатформенную RPG с нуля
• Kotlin Multiplatform и Compose Multiplatform — стратегический провал Apple
• Дружим Flutter с С# и С++
• MVVM with Clean Architecture in React Native: A Detailed Guide
MVVM with Clean Architecture in React Native: A Detailed Guide
• Flutter Custom Theme with ThemeExtension + Templates
Flutter Custom Theme with ThemeExtension + Templates
• Native Apps Are Dead
Native Apps Are Dead
• Image Push Notification(Advanced) in Flutter using Firebase(iOS & Android)
Image Push Notification(Advanced) in Flutter using Firebase(iOS & Android)
• Revolutionise Your Workflow: Cut React Native Build Time by 67%
Revolutionise Your Workflow: Cut React Native Build Time by 67%
• Some useful linter rules for React Native
Some useful linter rules for React Native
• Revolutionizing Focus Management in TV Applications with React Native
Revolutionizing Focus Management in TV Applications with React Native
• How to Add Themes to Your Flutter Apps with Adaptive Chameleon Theme
How to Add Themes to Your Flutter Apps with Adaptive Chameleon Theme
 Разработка
Разработка
• Воображаемые проблемы — корень плохого программного обеспечения
• Раскрытие возможностей шаблона Декоратор
• Встречайте Dev Mode в Figma
• Про тестирование мобильных приложений. Часть 4. Интеграционное тестирование
• Фича Флаги и управление ими “по-взрослому”: кейс команды СберЗдоровье
• Podlodka #323: выбираем язык конфигураций — YAML, TOML или Dhall
• Яндекс в 2.5 раза увеличил годовой фонд программы «Охота за ошибками» — до 100 млн рублей
• $50 млн в Серии В: Warp — терминал с ИИ
• $4.4 млн: Hyperline — платформа биллинга для SaaS
• Что влияет на опыт разработчиков — исследование GitHub
• Microsoft анонсировала Fluent 2
• Top 10 Best Open Source Projects on GitHub 2023
Top 10 Best Open Source Projects on GitHub 2023
• Metis: Building Airbnb’s Next Generation Data Management Platform
Metis: Building Airbnb’s Next Generation Data Management Platform
• 15 Must-Have Figma Plugins for UX/UI Designers in 2023
15 Must-Have Figma Plugins for UX/UI Designers in 2023
• Programmers Are in Demand. Here Is Why You Can’t Get a Job.
Programmers Are in Demand. Here Is Why You Can’t Get a Job.
• Linking Modular Architecture to Development Teams
Linking Modular Architecture to Development Teams
• A 20-year-experienced CTO’s Advice “Don’t Be a Humble Developer”
A 20-year-experienced CTO’s Advice “Don’t Be a Humble Developer”
• How to fail basic refactor using Clean Architecture
How to fail basic refactor using Clean Architecture
• 4 mistakes to avoid to build a better 1-person business
4 mistakes to avoid to build a better 1-person business
 Аналитика, маркетинг и монетизация
Аналитика, маркетинг и монетизация
• Пэйволлы: прокачиваем насмотренность
• Bumble тестирует приложение для поиска друзей
• Реклама в App Store на вкладке «Сегодня» станет компактной
• Вышел 2023 Mobile Growth and Monetization Report от Unity
• 3 тренда, которые помогут возродить мобильные приложения в 2023 году
• Приложение ChatGPT отстает от сторонних приложений
• 5 reasons why apps fail in some African countries
5 reasons why apps fail in some African countries
• A practical guide to Google app campaigns
A practical guide to Google app campaigns
 AI, Устройства, IoT
AI, Устройства, IoT
• Как использовать Midjourney: подробный гайд, лайфхаки, промты
• Как поговорить с компьютером, если у вас не поехала крыша
• Трассировка распределенных IoT приложений на EMQX
• Интеграция с инфраструктурой NB-IoT МТС. Теория и практика. Часть 4
• OpenAI планирует открыть свой магазин приложений
• Inside StarCoder: The New Open Source LLM that Can Generative Code in Over 80 Programming Languages
Inside StarCoder: The New Open Source LLM that Can Generative Code in Over 80 Programming Languages
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
В нашем Telegram-канале Mobile Insights, еще больше материалов для мобильных разработчиков, а в IT Insights — об интересном коде и технологиях. Подключайтесь!

 iOS
iOS• Императивный UIKit vs Декларативный SwiftUI
• Как использовать UIContentUnavailableConfiguration для управления пустыми состояниями
• Немного о перечислениях в Swift
• Внедряем MapKit Яндекс Карт в iOS приложение
• На смену CoreData пришёл новый фреймворк SwiftData. Разбираемся, как он упрощает хранение данных
• Многопоточность в iOS-разработке
• visionOS(xrOS) сессии WWDC2023: введение в пространственные вычисления Apple
• SwiftUI vs UIKit. Что выбрать новичку?
• Apple выпустила visionOS SDK
•
 visionOS Fundamentals
visionOS Fundamentals•
 SwiftUI Menu and Context Menu: How to Show Buttons with Dropdown Lists
SwiftUI Menu and Context Menu: How to Show Buttons with Dropdown Lists•
 SwiftUI Presentations with Modals, Bottom Sheets, and FullScreen cover in iOS
SwiftUI Presentations with Modals, Bottom Sheets, and FullScreen cover in iOS•
 MatchedGeometryEffect in SwiftUI
MatchedGeometryEffect in SwiftUI•
 Little big improvements in Xcode 15
Little big improvements in Xcode 15•
 Inspectors in SwiftUI
Inspectors in SwiftUI•
 How to Handle Empty States Using UIContentUnavailableConfiguration
How to Handle Empty States Using UIContentUnavailableConfiguration•
 The @Environment && @EnvironmentProperty SwiftUI Property Wrappers
The @Environment && @EnvironmentProperty SwiftUI Property Wrappers•
 Mastering SwiftUI’s onChange
Mastering SwiftUI’s onChange•
 Deep Dive into the New Features of ScrollView in SwiftUI 5
Deep Dive into the New Features of ScrollView in SwiftUI 5•
 Xcode Previews with UIKit and AppKit in Xcode 15
Xcode Previews with UIKit and AppKit in Xcode 15•
 Facade Design Pattern in Swift for Beginners (with async/await)
Facade Design Pattern in Swift for Beginners (with async/await)•
 A Deep Dive Into Observation: A New Way to Boost SwiftUI Performance
A Deep Dive Into Observation: A New Way to Boost SwiftUI Performance•
 Embracing MVVM: Empowering iOS Development with a Robust Architecture
Embracing MVVM: Empowering iOS Development with a Robust Architecture•
 Storing WKWebView content for offline access in your iOS app
Storing WKWebView content for offline access in your iOS app•
 Xcode Bookmarks: Save code landmarks & organize tasks
Xcode Bookmarks: Save code landmarks & organize tasks•
 Agile Architecture in Swift
Agile Architecture in Swift•
 A Deep Dive Into Observation: A New Way to Boost SwiftUI Performance
A Deep Dive Into Observation: A New Way to Boost SwiftUI Performance•
 Run iOS tests with Marathon Cloud
Run iOS tests with Marathon Cloud•
 Building Your Own Swift Code Generator Using Swift Script
Building Your Own Swift Code Generator Using Swift Script•
 Meet StoreKit SubscriptionStoreView in iOS 17
Meet StoreKit SubscriptionStoreView in iOS 17•
 2000+ iOS Interview Questions And Answers: Your Path to Success
2000+ iOS Interview Questions And Answers: Your Path to Success•
 Slow architecture in Swift
Slow architecture in Swift•
 Animate SF Symbols with symbolEffect
Animate SF Symbols with symbolEffect•
 Quick: behavior-driven тестирование
Quick: behavior-driven тестирование•
 Swift Macros: лучшие макросы Swift
Swift Macros: лучшие макросы Swift Android
Android• Осознанная оптимизация Compose
• Библиотека MockWebServer-DSL в open-source: делаем конфетку из сетевых запросов в UI-тестах
• Сервисы Google и Huawei в единой кодовой базе Android-приложения
• Какого цвета Ripple?
• Фантастический Compose и его побочные эффекты
• Как эволюционировали уязвимости в приложениях для Android
• Android TextView freezesText — замораживаем текст в Android-приложении
• Что внутри Android SDK
•
 Top 3 things to know from Google Play at Google I/O ‘2
Top 3 things to know from Google Play at Google I/O ‘2•
 Technical quality on Google Play
Technical quality on Google Play•
 What is the Context? — Android Basics 2023
What is the Context? — Android Basics 2023•
 ViewModels & Configuration Changes — Android Basics 2023
ViewModels & Configuration Changes — Android Basics 2023•
 The Art of App Modularization
The Art of App Modularization•
 App Size Metrics — Continuous monitoring of App Size
App Size Metrics — Continuous monitoring of App Size•
 Creating a Split Flap Display in Compose
Creating a Split Flap Display in Compose•
 Builder Design Pattern in Kotlin
Builder Design Pattern in Kotlin•
 Jetpack Compose — Making Composable lifecycle-aware
Jetpack Compose — Making Composable lifecycle-aware•
 Mastering Android App Performance: Analyzing Bottlenecks with Perfetto
Mastering Android App Performance: Analyzing Bottlenecks with Perfetto•
 Increase the Performance in Jetpack Compose
Increase the Performance in Jetpack Compose•
 Accessibility & Testing in Jetpack Compose
Accessibility & Testing in Jetpack Compose•
 Difference between == and === in Kotlin
Difference between == and === in Kotlin•
 Kotlin Delegates: The Secret Ingredient for Decorator Pattern!
Kotlin Delegates: The Secret Ingredient for Decorator Pattern!•
 User stack animation in Jetpack Compose
User stack animation in Jetpack Compose•
 5 Pro Kotlin Dev Hacks For More Assertive Code
5 Pro Kotlin Dev Hacks For More Assertive Code•
 ADB — Say bye to “more than one device/emulator” error
ADB — Say bye to “more than one device/emulator” error•
 I want to run any number of Android UI tests on each PR. Your actions?
I want to run any number of Android UI tests on each PR. Your actions?•
 Android Mastering the Integration: Coexisting Google and Huawei Mobile Services in a Single Codebase
Android Mastering the Integration: Coexisting Google and Huawei Mobile Services in a Single Codebase•
 A few shorthands for Jetpack Compose
A few shorthands for Jetpack Compose•
 Android Data Repository — Simple pattern that we misunderstand
Android Data Repository — Simple pattern that we misunderstand•
 Jetpack Compose Custom Layout Made Easy
Jetpack Compose Custom Layout Made Easy•
 Negative Padding For Jetpack Compose Made Possible
Negative Padding For Jetpack Compose Made Possible•
 AnkiDroid: карточки для запоминания
AnkiDroid: карточки для запоминания•
 Clock of Clocks: часы на Jetpack Compose
Clock of Clocks: часы на Jetpack Compose•
 Compose Sensors: работа с сенсорами устройства в Compose
Compose Sensors: работа с сенсорами устройства в Compose Кроссплатформа
Кроссплатформа• Алгоритм создания бесшовного списка данных
• Делаем многопользовательскую кроссплатформенную RPG с нуля
• Kotlin Multiplatform и Compose Multiplatform — стратегический провал Apple
• Дружим Flutter с С# и С++
•
 MVVM with Clean Architecture in React Native: A Detailed Guide
MVVM with Clean Architecture in React Native: A Detailed Guide•
 Flutter Custom Theme with ThemeExtension + Templates
Flutter Custom Theme with ThemeExtension + Templates•
 Native Apps Are Dead
Native Apps Are Dead•
 Image Push Notification(Advanced) in Flutter using Firebase(iOS & Android)
Image Push Notification(Advanced) in Flutter using Firebase(iOS & Android)•
 Revolutionise Your Workflow: Cut React Native Build Time by 67%
Revolutionise Your Workflow: Cut React Native Build Time by 67%•
 Some useful linter rules for React Native
Some useful linter rules for React Native•
 Revolutionizing Focus Management in TV Applications with React Native
Revolutionizing Focus Management in TV Applications with React Native•
 How to Add Themes to Your Flutter Apps with Adaptive Chameleon Theme
How to Add Themes to Your Flutter Apps with Adaptive Chameleon Theme Разработка
Разработка• Воображаемые проблемы — корень плохого программного обеспечения
• Раскрытие возможностей шаблона Декоратор
• Встречайте Dev Mode в Figma
• Про тестирование мобильных приложений. Часть 4. Интеграционное тестирование
• Фича Флаги и управление ими “по-взрослому”: кейс команды СберЗдоровье
• Podlodka #323: выбираем язык конфигураций — YAML, TOML или Dhall
• Яндекс в 2.5 раза увеличил годовой фонд программы «Охота за ошибками» — до 100 млн рублей
• $50 млн в Серии В: Warp — терминал с ИИ
• $4.4 млн: Hyperline — платформа биллинга для SaaS
• Что влияет на опыт разработчиков — исследование GitHub
• Microsoft анонсировала Fluent 2
•
 Top 10 Best Open Source Projects on GitHub 2023
Top 10 Best Open Source Projects on GitHub 2023•
 Metis: Building Airbnb’s Next Generation Data Management Platform
Metis: Building Airbnb’s Next Generation Data Management Platform•
 15 Must-Have Figma Plugins for UX/UI Designers in 2023
15 Must-Have Figma Plugins for UX/UI Designers in 2023•
 Programmers Are in Demand. Here Is Why You Can’t Get a Job.
Programmers Are in Demand. Here Is Why You Can’t Get a Job.•
 Linking Modular Architecture to Development Teams
Linking Modular Architecture to Development Teams•
 A 20-year-experienced CTO’s Advice “Don’t Be a Humble Developer”
A 20-year-experienced CTO’s Advice “Don’t Be a Humble Developer”•
 How to fail basic refactor using Clean Architecture
How to fail basic refactor using Clean Architecture•
 4 mistakes to avoid to build a better 1-person business
4 mistakes to avoid to build a better 1-person business Аналитика, маркетинг и монетизация
Аналитика, маркетинг и монетизация• Пэйволлы: прокачиваем насмотренность
• Bumble тестирует приложение для поиска друзей
• Реклама в App Store на вкладке «Сегодня» станет компактной
• Вышел 2023 Mobile Growth and Monetization Report от Unity
• 3 тренда, которые помогут возродить мобильные приложения в 2023 году
• Приложение ChatGPT отстает от сторонних приложений
•
 5 reasons why apps fail in some African countries
5 reasons why apps fail in some African countries•
 A practical guide to Google app campaigns
A practical guide to Google app campaigns AI, Устройства, IoT
AI, Устройства, IoT• Как использовать Midjourney: подробный гайд, лайфхаки, промты
• Как поговорить с компьютером, если у вас не поехала крыша
• Трассировка распределенных IoT приложений на EMQX
• Интеграция с инфраструктурой NB-IoT МТС. Теория и практика. Часть 4
• OpenAI планирует открыть свой магазин приложений
•
 Inside StarCoder: The New Open Source LLM that Can Generative Code in Over 80 Programming Languages
Inside StarCoder: The New Open Source LLM that Can Generative Code in Over 80 Programming Languages← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
 
           
 
firemanfm
>ADB — Say bye to “more than one device/emulator” error
Решал такую же задачу https://github.com/fleytman/madb
Отличия:
1. Моя более сложна в установке
2. Есть выбор из списка устройств когда вводишь madb connect
3. Запуск команды на всех выделенных устройствах
4. Можно выделить сразу все устройства хоткеем
5. Также есть команда для работы со scrcpy