В нашем новом дайджесте снова история уменьшения размера приложения, Android System Design и проектирование для больших экранов, мобильные таблицы, сообщения об ошибках, «антивирусный» Mastodon и многое другое!
В нашем Telegram-канале Mobile Insights, еще больше материалов для разработчиков — подключайтесь!

 iOS
iOS
• Как я уменьшил размер моего приложения на 73%
• Шифруем CoreML
• «Оживляем» наше iOS-приложение с помощью Live Activity
• Как устроено приложение Календарь в iPhone
• Пишем собственный CustomStepper в Swift
• Работая в Xcode: создаем реюзабельные цветовые палитры, которыми можно поделиться
• Core Data в современном интерьере SwftUI. Некоторые уточнения и заблуждения. часть 1 + часть 2
• Загружаем dSYM в Firebase Crashlytics через Xcode Cloud
• Месячная заруба с Apple. Встраиваем On-Demand Resources. Часть 1
• Observer (Наблюдатель) — шаблон проектирования на примере Swift
• Видение вариативных дженериков в Swift
• How Does Swift Concurrency Prevents Thread Explosions?
How Does Swift Concurrency Prevents Thread Explosions?
• Five ways to break Swift Concurrency
Five ways to break Swift Concurrency
• SwiftUI Labeled Content
SwiftUI Labeled Content
• The 5 Best iOS Developer Communities You Should Join
The 5 Best iOS Developer Communities You Should Join
• When to use Swift For-in and ForEach
When to use Swift For-in and ForEach
• Q&A: 10 Questions with Design Evangelism
Q&A: 10 Questions with Design Evangelism
• How to implement sound waves in iOS by using ZEGOCLOUD SDK
How to implement sound waves in iOS by using ZEGOCLOUD SDK
• Make swift ‘contains()’ and ‘filter()’ ready for iOS Development
Make swift ‘contains()’ and ‘filter()’ ready for iOS Development
• The Chain of Responsibility Pattern in Swift
The Chain of Responsibility Pattern in Swift
• The Ultimate Domain Language: Declarative Swift
The Ultimate Domain Language: Declarative Swift
• Dissect the PKCE Authorization Code Grant Flow on iOS
Dissect the PKCE Authorization Code Grant Flow on iOS
• Get Started with Unit Testing in Swift
Get Started with Unit Testing in Swift
• SwiftUI Binding Extensions
SwiftUI Binding Extensions
• Get Started With The Dynamic Island and Live Activities in iOS 16.1
Get Started With The Dynamic Island and Live Activities in iOS 16.1
• Dependency Injection in Swift 5
Dependency Injection in Swift 5
• 7 iOS Projects to Hack on This Weekend
7 iOS Projects to Hack on This Weekend
• Swift Charts Tutorial: Getting Started
Swift Charts Tutorial: Getting Started
• A Deep Dive Into the Swift Concurrency Bottleneck
A Deep Dive Into the Swift Concurrency Bottleneck
• Swift and Objective-C Interoperability With @objc and @objcMembers
Swift and Objective-C Interoperability With @objc and @objcMembers
• DALL-E API in Swift — Generate Faces
DALL-E API in Swift — Generate Faces
• How to Create Your Xcode Cloud Workflow
How to Create Your Xcode Cloud Workflow
• Two Practical Uses of Enum in Swift
Two Practical Uses of Enum in Swift
• Removing 30% of our iOS crashes
Removing 30% of our iOS crashes
• Introducing N26 Backend Driven Navigation: FlowKit
Introducing N26 Backend Driven Navigation: FlowKit
• PromiseKit: промисы для Swift и ObjC
PromiseKit: промисы для Swift и ObjC
• KeyboardKit: кастомные клавиатуры для iOS
KeyboardKit: кастомные клавиатуры для iOS
 Android
Android
• Собеседование Android System Design
• Шаблоны проектирования для больших экранов
• Orange Pi OS: операционная система от создателей конкурента Raspberry Pi. Возможности ОС
• Вращаем невращаемое, или Как повернуть экран звонка
• Удалённая сборка Android проектов на сервере прямо из Android Studio
• Как можно хранить стабы для MockWebServer в Android-тестах
• Поиск не вставая с дивана, или как подружить приложение со Сбер Ассистентом
• Системный подход к улучшению старта Android-приложения
• Компилируем validatekeymaps из Android для запуска в браузере
• Deep Dive Into Deep Link. Часть 5. Нюансы: port, mime, path, диспетчеризация, обратная совместимость
• Трудности, с которыми мы столкнулись при модуляризации нашего приложения — Часть 1
• Удовлетворенность экосистемой Kotlin — исследование JetBrains
• Google TV и Android TV переходят на Android App Bundle
• AGSL: Made in the Shade®
AGSL: Made in the Shade®
• Under the hood of Relay, Android Studio plugin for exporting Figma components to compose
Under the hood of Relay, Android Studio plugin for exporting Figma components to compose
• Faster Jetpack Compose <-> View interop with App Startup and baseline profile
Faster Jetpack Compose <-> View interop with App Startup and baseline profile
• Rethinking Android Runtime with Profile-Guided Optimizations
Rethinking Android Runtime with Profile-Guided Optimizations
• Compose by example: BoxWithConstraints
Compose by example: BoxWithConstraints
• Solving the Moshi enumeration problem using generics
Solving the Moshi enumeration problem using generics
• Fixing Dependency Metadata in Gradle
Fixing Dependency Metadata in Gradle
• Do you follow these Kotlin Best Practices?
Do you follow these Kotlin Best Practices?
• Card Flip Animation with Jetpack Compose
Card Flip Animation with Jetpack Compose
• Most Asked Android Interview Questions In 2022
Most Asked Android Interview Questions In 2022
• Why go with Paparazzi? Our journey with Android Screenshot Testing
Why go with Paparazzi? Our journey with Android Screenshot Testing
• How to Customize the Switch Slider in Android
How to Customize the Switch Slider in Android
• Coroutine: Make it faster and Efficient
Coroutine: Make it faster and Efficient
• Retrofitting null-safety onto Java at Meta
Retrofitting null-safety onto Java at Meta
• Development on steroids: Ping-pong Programming and TDD
Development on steroids: Ping-pong Programming and TDD
• You Must Be 64-Bit to Ride This Ferry
You Must Be 64-Bit to Ride This Ferry
• Mercado Libre Android app is on a diet: Dynamic Features
Mercado Libre Android app is on a diet: Dynamic Features
• Just your type: Variable fonts in Compose
Just your type: Variable fonts in Compose
• How Kotlin Is Going To Fix Your Pains in 2023
How Kotlin Is Going To Fix Your Pains in 2023
• Cloudy: blur для Jetpack Compose
Cloudy: blur для Jetpack Compose
• Android App Starter Template: шаблон правильного приложения
Android App Starter Template: шаблон правильного приложения
 Кроссплатформа
Кроссплатформа
• Создаём сложные интерфейсы и спецэффекты на базе Qt. Часть II
• Bender postmortem
• How to Build a Game for the Playdate Console Using the Playdate SDK and Lua
How to Build a Game for the Playdate Console Using the Playdate SDK and Lua
• In App Update — The Flutter Way
In App Update — The Flutter Way
• Flutter vs Jetpack Compose: The Battle of the Decade
Flutter vs Jetpack Compose: The Battle of the Decade
• Top 8 Flutter Animation Packages
Top 8 Flutter Animation Packages
• Dart Extensions Tutorial: Improve your Flutter Code
Dart Extensions Tutorial: Improve your Flutter Code
• Integrate Payment in Flutter with Stripe
Integrate Payment in Flutter with Stripe
• Blurhash — an image placeholder for React Native
Blurhash — an image placeholder for React Native
• How react-native became performant as native with the new architecture
How react-native became performant as native with the new architecture
• Kotlin for backend, is it that good?
Kotlin for backend, is it that good?
• Difference Between Ephemeral State & App State In Flutter
Difference Between Ephemeral State & App State In Flutter
 Разработка
Разработка
• Как отобразить таблицу на экране мобильного устройства: решения
• Использование Rust в стартапе: поучительная история
• Что такое Black Box Testing?
• Будьте другом своему пользователю, пишите осмысленные сообщения об ошибках
• Пользовательские истории в разработке
• Как доработка UX помогла сократить время прохождения сценария заказа еды на 70%. Часть 1
• Flower: как работает чат-бот платформа Авито
• Podlodka #295: финмониторинг и банковский compliance
• Alphabet планирует сократить 10,000 сотрудников
• Самые высокооплачиваемые вакансии ноября в области разработки приложений
• Niantic показала будущее AR-игр
• The Architecture of a Modern Startup
The Architecture of a Modern Startup
• The Difference Between The Clever Developer & The Wise Developer
The Difference Between The Clever Developer & The Wise Developer
• Coding is simple. Engineering is hard.
Coding is simple. Engineering is hard.
• How I’m a Productive Programmer With a Memory of a Fruit Fly
How I’m a Productive Programmer With a Memory of a Fruit Fly
• Why Some Developers Will Never Improve
Why Some Developers Will Never Improve
• Bullshit Software Projects
Bullshit Software Projects
• Real-Time Game Server Internals: Basic Theory, Architecture, Optimization, Auto-Scaling
Real-Time Game Server Internals: Basic Theory, Architecture, Optimization, Auto-Scaling
• Are Developers Costs or Assets?
Are Developers Costs or Assets?
• Learn Kubernetes with Google
Learn Kubernetes with Google
• This Simple Question Made Me Hire a Couple of Junior Programmers
This Simple Question Made Me Hire a Couple of Junior Programmers
• Elimination of programmers
Elimination of programmers
• Rhasspy: голосовой помощник
Rhasspy: голосовой помощник
 Аналитика, маркетинг и монетизация
Аналитика, маркетинг и монетизация
• Альтернатива Твиттеру: почему Mastodon сделан так, чтобы быть «антивирусным»
• Appodeal представил обновленный SDK 3.0 c улучшенным функционалом
• МТС запустила свой магазин приложений AppBazar
• Аудитория RuStore выросла в шесть раз
• Исследование “Бенчмарки продуктового опыта 2022”
• Careem app – сервисы в одно окно
• 97% доходов игр идет от повторных покупок
• App Store собирает все данные о действиях пользователей
• Самые зарабатывающие приложения США в октябре
 AI, Устройства, IoT
AI, Устройства, IoT
• Тестируем ультра-производительные кроссоверы для встраиваемых систем
• AlertBox Radio: ещё больше магии (плюс ETH, RS485, RTC, WDG, SD)
• Переделка оповещателя пожарной сигнализации для отправки тревоги в Home Assistant
• Google работает над новым ИИ для написания кода
• Kite, занимавшийся ИИ автодополнения кода, закрывается
• Amazon Alexa: «колоссальный провал», который в этом году может стоить $10 млрд
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
В нашем Telegram-канале Mobile Insights, еще больше материалов для разработчиков — подключайтесь!

 iOS
iOS• Как я уменьшил размер моего приложения на 73%
• Шифруем CoreML
• «Оживляем» наше iOS-приложение с помощью Live Activity
• Как устроено приложение Календарь в iPhone
• Пишем собственный CustomStepper в Swift
• Работая в Xcode: создаем реюзабельные цветовые палитры, которыми можно поделиться
• Core Data в современном интерьере SwftUI. Некоторые уточнения и заблуждения. часть 1 + часть 2
• Загружаем dSYM в Firebase Crashlytics через Xcode Cloud
• Месячная заруба с Apple. Встраиваем On-Demand Resources. Часть 1
• Observer (Наблюдатель) — шаблон проектирования на примере Swift
• Видение вариативных дженериков в Swift
•
 How Does Swift Concurrency Prevents Thread Explosions?
How Does Swift Concurrency Prevents Thread Explosions?•
 Five ways to break Swift Concurrency
Five ways to break Swift Concurrency•
 SwiftUI Labeled Content
SwiftUI Labeled Content•
 The 5 Best iOS Developer Communities You Should Join
The 5 Best iOS Developer Communities You Should Join•
 When to use Swift For-in and ForEach
When to use Swift For-in and ForEach•
 Q&A: 10 Questions with Design Evangelism
Q&A: 10 Questions with Design Evangelism•
 How to implement sound waves in iOS by using ZEGOCLOUD SDK
How to implement sound waves in iOS by using ZEGOCLOUD SDK•
 Make swift ‘contains()’ and ‘filter()’ ready for iOS Development
Make swift ‘contains()’ and ‘filter()’ ready for iOS Development•
 The Chain of Responsibility Pattern in Swift
The Chain of Responsibility Pattern in Swift•
 The Ultimate Domain Language: Declarative Swift
The Ultimate Domain Language: Declarative Swift•
 Dissect the PKCE Authorization Code Grant Flow on iOS
Dissect the PKCE Authorization Code Grant Flow on iOS•
 Get Started with Unit Testing in Swift
Get Started with Unit Testing in Swift•
 SwiftUI Binding Extensions
SwiftUI Binding Extensions•
 Get Started With The Dynamic Island and Live Activities in iOS 16.1
Get Started With The Dynamic Island and Live Activities in iOS 16.1•
 Dependency Injection in Swift 5
Dependency Injection in Swift 5•
 7 iOS Projects to Hack on This Weekend
7 iOS Projects to Hack on This Weekend•
 Swift Charts Tutorial: Getting Started
Swift Charts Tutorial: Getting Started•
 A Deep Dive Into the Swift Concurrency Bottleneck
A Deep Dive Into the Swift Concurrency Bottleneck•
 Swift and Objective-C Interoperability With @objc and @objcMembers
Swift and Objective-C Interoperability With @objc and @objcMembers•
 DALL-E API in Swift — Generate Faces
DALL-E API in Swift — Generate Faces•
 How to Create Your Xcode Cloud Workflow
How to Create Your Xcode Cloud Workflow•
 Two Practical Uses of Enum in Swift
Two Practical Uses of Enum in Swift•
 Removing 30% of our iOS crashes
Removing 30% of our iOS crashes•
 Introducing N26 Backend Driven Navigation: FlowKit
Introducing N26 Backend Driven Navigation: FlowKit•
 PromiseKit: промисы для Swift и ObjC
PromiseKit: промисы для Swift и ObjC•
 KeyboardKit: кастомные клавиатуры для iOS
KeyboardKit: кастомные клавиатуры для iOS Android
Android• Собеседование Android System Design
• Шаблоны проектирования для больших экранов
• Orange Pi OS: операционная система от создателей конкурента Raspberry Pi. Возможности ОС
• Вращаем невращаемое, или Как повернуть экран звонка
• Удалённая сборка Android проектов на сервере прямо из Android Studio
• Как можно хранить стабы для MockWebServer в Android-тестах
• Поиск не вставая с дивана, или как подружить приложение со Сбер Ассистентом
• Системный подход к улучшению старта Android-приложения
• Компилируем validatekeymaps из Android для запуска в браузере
• Deep Dive Into Deep Link. Часть 5. Нюансы: port, mime, path, диспетчеризация, обратная совместимость
• Трудности, с которыми мы столкнулись при модуляризации нашего приложения — Часть 1
• Удовлетворенность экосистемой Kotlin — исследование JetBrains
• Google TV и Android TV переходят на Android App Bundle
•
 AGSL: Made in the Shade®
AGSL: Made in the Shade®•
 Under the hood of Relay, Android Studio plugin for exporting Figma components to compose
Under the hood of Relay, Android Studio plugin for exporting Figma components to compose•
 Faster Jetpack Compose <-> View interop with App Startup and baseline profile
Faster Jetpack Compose <-> View interop with App Startup and baseline profile•
 Rethinking Android Runtime with Profile-Guided Optimizations
Rethinking Android Runtime with Profile-Guided Optimizations•
 Compose by example: BoxWithConstraints
Compose by example: BoxWithConstraints•
 Solving the Moshi enumeration problem using generics
Solving the Moshi enumeration problem using generics•
 Fixing Dependency Metadata in Gradle
Fixing Dependency Metadata in Gradle•
 Do you follow these Kotlin Best Practices?
Do you follow these Kotlin Best Practices?•
 Card Flip Animation with Jetpack Compose
Card Flip Animation with Jetpack Compose•
 Most Asked Android Interview Questions In 2022
Most Asked Android Interview Questions In 2022•
 Why go with Paparazzi? Our journey with Android Screenshot Testing
Why go with Paparazzi? Our journey with Android Screenshot Testing•
 How to Customize the Switch Slider in Android
How to Customize the Switch Slider in Android•
 Coroutine: Make it faster and Efficient
Coroutine: Make it faster and Efficient•
 Retrofitting null-safety onto Java at Meta
Retrofitting null-safety onto Java at Meta•
 Development on steroids: Ping-pong Programming and TDD
Development on steroids: Ping-pong Programming and TDD•
 You Must Be 64-Bit to Ride This Ferry
You Must Be 64-Bit to Ride This Ferry•
 Mercado Libre Android app is on a diet: Dynamic Features
Mercado Libre Android app is on a diet: Dynamic Features•
 Just your type: Variable fonts in Compose
Just your type: Variable fonts in Compose•
 How Kotlin Is Going To Fix Your Pains in 2023
How Kotlin Is Going To Fix Your Pains in 2023•
 Cloudy: blur для Jetpack Compose
Cloudy: blur для Jetpack Compose•
 Android App Starter Template: шаблон правильного приложения
Android App Starter Template: шаблон правильного приложения Кроссплатформа
Кроссплатформа• Создаём сложные интерфейсы и спецэффекты на базе Qt. Часть II
• Bender postmortem
•
 How to Build a Game for the Playdate Console Using the Playdate SDK and Lua
How to Build a Game for the Playdate Console Using the Playdate SDK and Lua•
 In App Update — The Flutter Way
In App Update — The Flutter Way•
 Flutter vs Jetpack Compose: The Battle of the Decade
Flutter vs Jetpack Compose: The Battle of the Decade•
 Top 8 Flutter Animation Packages
Top 8 Flutter Animation Packages•
 Dart Extensions Tutorial: Improve your Flutter Code
Dart Extensions Tutorial: Improve your Flutter Code•
 Integrate Payment in Flutter with Stripe
Integrate Payment in Flutter with Stripe•
 Blurhash — an image placeholder for React Native
Blurhash — an image placeholder for React Native•
 How react-native became performant as native with the new architecture
How react-native became performant as native with the new architecture•
 Kotlin for backend, is it that good?
Kotlin for backend, is it that good?•
 Difference Between Ephemeral State & App State In Flutter
Difference Between Ephemeral State & App State In Flutter Разработка
Разработка• Как отобразить таблицу на экране мобильного устройства: решения
• Использование Rust в стартапе: поучительная история
• Что такое Black Box Testing?
• Будьте другом своему пользователю, пишите осмысленные сообщения об ошибках
• Пользовательские истории в разработке
• Как доработка UX помогла сократить время прохождения сценария заказа еды на 70%. Часть 1
• Flower: как работает чат-бот платформа Авито
• Podlodka #295: финмониторинг и банковский compliance
• Alphabet планирует сократить 10,000 сотрудников
• Самые высокооплачиваемые вакансии ноября в области разработки приложений
• Niantic показала будущее AR-игр
•
 The Architecture of a Modern Startup
The Architecture of a Modern Startup•
 The Difference Between The Clever Developer & The Wise Developer
The Difference Between The Clever Developer & The Wise Developer•
 Coding is simple. Engineering is hard.
Coding is simple. Engineering is hard.•
 How I’m a Productive Programmer With a Memory of a Fruit Fly
How I’m a Productive Programmer With a Memory of a Fruit Fly•
 Why Some Developers Will Never Improve
Why Some Developers Will Never Improve•
 Bullshit Software Projects
Bullshit Software Projects•
 Real-Time Game Server Internals: Basic Theory, Architecture, Optimization, Auto-Scaling
Real-Time Game Server Internals: Basic Theory, Architecture, Optimization, Auto-Scaling•
 Are Developers Costs or Assets?
Are Developers Costs or Assets?•
 Learn Kubernetes with Google
Learn Kubernetes with Google•
 This Simple Question Made Me Hire a Couple of Junior Programmers
This Simple Question Made Me Hire a Couple of Junior Programmers•
 Elimination of programmers
Elimination of programmers•
 Rhasspy: голосовой помощник
Rhasspy: голосовой помощник Аналитика, маркетинг и монетизация
Аналитика, маркетинг и монетизация• Альтернатива Твиттеру: почему Mastodon сделан так, чтобы быть «антивирусным»
• Appodeal представил обновленный SDK 3.0 c улучшенным функционалом
• МТС запустила свой магазин приложений AppBazar
• Аудитория RuStore выросла в шесть раз
• Исследование “Бенчмарки продуктового опыта 2022”
• Careem app – сервисы в одно окно
• 97% доходов игр идет от повторных покупок
• App Store собирает все данные о действиях пользователей
• Самые зарабатывающие приложения США в октябре
 AI, Устройства, IoT
AI, Устройства, IoT• Тестируем ультра-производительные кроссоверы для встраиваемых систем
• AlertBox Radio: ещё больше магии (плюс ETH, RS485, RTC, WDG, SD)
• Переделка оповещателя пожарной сигнализации для отправки тревоги в Home Assistant
• Google работает над новым ИИ для написания кода
• Kite, занимавшийся ИИ автодополнения кода, закрывается
• Amazon Alexa: «колоссальный провал», который в этом году может стоить $10 млрд
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
 
          