В новом дайджесте макросы и типизированные ошибки, форматирование кода и Unit-тесты, «железо» для Android Studio, переход на docs as code, возвращение Myspace для Поколения Z, AirPods с камерами и многое другое. Подключайтесь!
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

iOS
• Макросы — напишут код за вас, но есть нюанс…
• Типизированные ошибки (typed throws) в Swift с примерами
• Мне кажется, или SwiftUI еще не готов к проду? — обсуждение на Reddit
• Адаптируем VoiceOver для людей
• Принципы SOLID на примере iOS-разработки
• Как побеждать в конкурсах от Telegram
• Уязвимости в CocoaPods позволяли манипулировать библиотеками
•
Mixing colors in SwiftUI and Xcode 16
•
Displaying tips based on parameters and events with TipKit
•
Build a Jenga game in Vision OS
•
AdAttributionKit: What subscription apps need to know
•
Consolidated ViewState
•
SwiftUI and Accessibility: Creating Inclusive iOS Applications (eBook)
•
Exploring the Navigation Split View
•
Mastering the Swift Testing Framework
•
Mastering ScrollView in SwiftUI. Scroll Phases
•
Advanced Async Sequences in Swift
•
Swift 6: Incrementally migrate your Xcode projects and packages
•
Evolution of SDUI in iOS App development
•
AsyncStream and AsyncSequence for Swift Concurrency
•
SwiftUI Draggable Tab Bar
•
SwiftUI Re-Orderable Tab bar
•
SwiftUI Swipe to Hide Header
•
Mastering Swift Testing: Run Serialized Tests with One Line of Code
•
Explicit ViewBuilder
•
My Favorite SwiftUI Updates in iOS 18
•
Exploring Predictive Code Completion in Xcode 16
•
Pomodoro Timer App — SwiftUI
•
ZLPhotoBrowser — фотопикер в стиле Wechat
•
XCStrings Tool — константы для строк локализации
Android
• Интеграция форматирования кода в Android-проекты
• Unit-тесты в Android для начинающего разработчика
• Маппинг данных в Kotlin
• Как преодолеть сложности прохождения ревью Google Play в условиях санкций
• Android-разработчики в 2024 году: какие нужны скилы и как проходит процесс найма
• Как я перестал волноваться и полюбил ошибки в корутинах: поймай меня если сможешь
• «Железо» для Android Studio (gradle-сборка) в 2024 году
• Переходишь на Compose? Не спеши!
• Как работает ТВ в Android TV?
• Нужны ли Android-разработчики на заводе?
• Gradle DSL изнутри
• Kotlin DSL как единый источник правды для решения многих задач
•
Mastering SDUI: A Deep Dive into Server-Driven UI
•
Migrating from Play Core Library
•
Android Studio — Show Color and Icon Previews in Autocompletion
•
Pinterest-Inspired Android UI Development With Jetpack Compose
•
How LiveData Updates 100 Observers in Android
•
When should you use StateFlow over LiveData in Android development?
•
Understanding ViewModel Persistence During Configuration and Screen Rotation
•
Android Adventure: Flow of Views to Composable Flow
•
Stop Using the Wrong Loop! From for to onEach: Ultimate Guide to Kotlin Loops
•
Remote Config with Google Sheets is Crazy!
•
Cancellation in Kotlin Coroutines
•
Android Studio: debugging is a kind of hell for years and years
•
On-Device Machine Learning with TensorFlow Lite
•
Complete Guide to Ace an Android Developer Interview
•
Все видео droidcon Italy 2023
•
Lifecycles, Coroutines and Scopes
•
Developer first Gradle builds
•
DataFrame: Kotlin’s Innovative Approach to Data Structures
•
Texts, dates, numbers, currencies, plurals, etc. App internationalization guide
•
Android Crypto Samples — примеры криптографии
•
Entity It — генератор Entity классов
Кроссплатформа
• Road to Flutter – анализ опыта миграции с React Native
• Widget тесты с помощью ApprovalTests
• Multiplatform UI с Compose
•
Enhancing Flutter apps: Implementing unique charts
•
Xamarin alternatives for cross-platform mobile development
•
Exploring the Viability of Cross-Platform UI Development with Compose Multiplatform
•
How we built it: Creating the I/O Crossword puzzle, powered by AI
•
Create PDF file in your app
•
Exploring Hidden Treasures in Flutter: Lesser-Known Widgets Unveiled
•
Simplify Network Management with CMPConnectivityMonitor in Compose Multiplatform
•
Understanding Concurrency in Flutter
•
Unit & UI Testing With Compose Multiplatform
•
Full Guide to Dependency Injection With Koin for Compose Multiplatform
•
Kotlin Multiplatform Libraries Evolution
•
React Native & Expo Router Course – Build a Meditation App
•
Dropdown — выпадающее меню на Compose Multiplatform
Разработка
• Как мы в RuStore на docs as code переходили
• Получение D-U-N-S номера для мобильных разработчиков
• Работа над ошибками: как мы сделали приложение World Class удобнее
• Защита персональных данных в мобильных приложениях: как не нарушить закон
• Генеративный ИИ появился в сервисе VK для сбора и анализа ошибок в приложениях
• Самые высокооплачиваемые вакансии июня в сфере разработки приложений
• Чистый код – не значит правильный: clean code, паттерны, лучшие практики
• Менеджмент — ловушка или лучший карьерный путь для разработчика?
• Разработка библиотек с использованием подхода Request for Comments
• Пишем приложение на Ktor
• Kotlin Script: для кого, зачем и как
•
How Google migrated billions of lines of code from Perforce to Piper
•
Developer workflow tips no one tells you about
•
The gifts of 40
•
My programming beliefs as of July 2024
•
Solving a math problem with planner programming
•
Should you learn C to «learn how the computer works»?
•
Go for Absolute Beginners – Tutorial
Аналитика, маркетинг и монетизация
• Социальная сеть noplace, смесь Twitter и Myspace для Поколения Z, заняла первое место в App Store
• Fortnite и Epic Games Store запускаются на iOS в Европе
• AAA-игры не пользуются спросом на iOS
• Деньги из космоса. Как приложения зарабатывают $1 МЛН в месяц на гороскопах
AI, Устройства, IoT
• OrangePi AiPro — гайд и обзор
• У вас новый ремонт? Лучше! Рисунок нового ремонта. Как мы из Stable Diffusion сделали дизайнера интерьеров
• Интернет вещей с микрокомпьютером Repka Pi
• Figma отключит ИИ-функцию, которая копирует дизайн других приложений
• Apple выпустит AirPods с камерами
•
AI and Kotlin: A Perfect Mix
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.


• Макросы — напишут код за вас, но есть нюанс…
• Типизированные ошибки (typed throws) в Swift с примерами
• Мне кажется, или SwiftUI еще не готов к проду? — обсуждение на Reddit
• Адаптируем VoiceOver для людей
• Принципы SOLID на примере iOS-разработки
• Как побеждать в конкурсах от Telegram
• Уязвимости в CocoaPods позволяли манипулировать библиотеками
•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•


• Интеграция форматирования кода в Android-проекты
• Unit-тесты в Android для начинающего разработчика
• Маппинг данных в Kotlin
• Как преодолеть сложности прохождения ревью Google Play в условиях санкций
• Android-разработчики в 2024 году: какие нужны скилы и как проходит процесс найма
• Как я перестал волноваться и полюбил ошибки в корутинах: поймай меня если сможешь
• «Железо» для Android Studio (gradle-сборка) в 2024 году
• Переходишь на Compose? Не спеши!
• Как работает ТВ в Android TV?
• Нужны ли Android-разработчики на заводе?
• Gradle DSL изнутри
• Kotlin DSL как единый источник правды для решения многих задач
•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•


• Road to Flutter – анализ опыта миграции с React Native
• Widget тесты с помощью ApprovalTests
• Multiplatform UI с Compose
•

•

•

•

•

•

•

•

•

•

•

•

•


• Как мы в RuStore на docs as code переходили
• Получение D-U-N-S номера для мобильных разработчиков
• Работа над ошибками: как мы сделали приложение World Class удобнее
• Защита персональных данных в мобильных приложениях: как не нарушить закон
• Генеративный ИИ появился в сервисе VK для сбора и анализа ошибок в приложениях
• Самые высокооплачиваемые вакансии июня в сфере разработки приложений
• Чистый код – не значит правильный: clean code, паттерны, лучшие практики
• Менеджмент — ловушка или лучший карьерный путь для разработчика?
• Разработка библиотек с использованием подхода Request for Comments
• Пишем приложение на Ktor
• Kotlin Script: для кого, зачем и как
•

•

•

•

•

•

•


• Социальная сеть noplace, смесь Twitter и Myspace для Поколения Z, заняла первое место в App Store
• Fortnite и Epic Games Store запускаются на iOS в Европе
• AAA-игры не пользуются спросом на iOS
• Деньги из космоса. Как приложения зарабатывают $1 МЛН в месяц на гороскопах

• OrangePi AiPro — гайд и обзор
• У вас новый ремонт? Лучше! Рисунок нового ремонта. Как мы из Stable Diffusion сделали дизайнера интерьеров
• Интернет вещей с микрокомпьютером Repka Pi
• Figma отключит ИИ-функцию, которая копирует дизайн других приложений
• Apple выпустит AirPods с камерами
•

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