В этом выпуске обеспечение архитектурных правил с SwiftLint и эмуляция бесконтактных карт, тестирование Android-приложений в масштабе Netflix и разрешения в Appium, полная инструкция по разработке PWA, защита данных пользователей от скриншотов, анти-этичный ИИ и многое другое. Заходите!

Подписывайтесь на мой Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков.
iOS
• Расширенные архитектурные правила в SwiftLint
• Как работать с запросами разрешений в Appium: распознаём, что от нас хочет iOS
• Пишем свой дебаунсер на Swift
• От модуляризации к Clang и обратно
• Суперапп с чистого листа
• А так ли нужна Swift Modern Concurrency?
• Мгновенный фидбэк: как оперативно получать отзывы о приложении в App Store
• Swift Reduce: объединение элементов в одно значение
• В мобильной ферме Selectel появилось тестирование приложений для iOS
• Интегрируем TimelineView в SwiftUI-приложение
•
Showing What’s New Screens using @AppStorage
•
Plurals with SwiftUI
•
Make your app content show on Spotlight
•
How to inspect .ipa files and secure your iOS app from common mistakes
•
SwiftUI Alert Guide + Code Examples
•
SwiftUI Colors – Exploring Overlooked Features
•
Gojek’s Journey to 3x Faster iOS Builds with Bazel
•
Swift Reduce: Combining elements into a single value
•
How to Create a Custom Loading Spinner in SwiftUI
•
Building an iOS Stickers App
•
Mastering Debouncers in iOS with Swift
•
SOLID Principles in Swift
•
Using .onAppear and .onDisappear in your SwiftUI
•
Using Instruments to profile a SwiftUI app
•
Introducing Swift Testing. Scoping.
•
Tracking Screen Views in SwiftUI with a Custom ViewModifier
•
Swift Charts: Animate Marks
•
iOS 18.4 — dlsym considered harmful
•
Drawing graphics with Canvas
•
Swift Measurements
•
SwiftUI Network Observer — Network Monitor
•
Animated Redacted Modifier — SwiftUI
•
Crafting Effective SwiftUI ViewModifiers
•
SwiftUI Skeleton View — Skeleton Loading Animations
•
ToastKit — информационные тосты
•
Kurozora — платформа аниме
•
StorySDK — истории для приложения
Android
• Тестирование Android-приложений в масштабе Netflix
• Сканирование баркодов c помощью камеры и внешних устройств в Compose
• Как я сократил время сборки Gradle на 50%
• Как работает Robolectric и почему это важно знать
• XML vs Compose, не можете решить? Часть 1: Введение + Часть 2: Что выбрать, и что нужно знать перед выбором
• Универсальное демоприложение
• Не два байта переслать: эмуляция бесконтактных карт на мобильных устройствах
• Архитектурное собеседование Android разработчика (все собеседования)
• Устройство Android Music SDK или как мы встроили музыку в суперапп-приложение
• Интеграция MediaPipe в Android-приложение видеоконференцсвязи
• От дашбордов к более глубокому пониманию приложений: обновления Play Console
• Google внедряет функцию безопасности с автоперезагрузкой в Android
• Google прекратил поддержку Android 12
•
Preloading Media: A Future-Forward Approach with ExoPlayer
•
Debugging Coroutines in IntelliJ and Android Studio
•
Enhancing Note-Taking with Jetpack Compose
•
Adaptive Camera: Smooth Tabletop Mode with Animations
•
Composition Over Inheritance: A Kotlin Perspective
•
Performance Optimization in Jetpack Compose
•
runCatching vs. try-catch in Kotlin: A Comprehensive Error Handling Comparison
•
Friendly Captcha 2.0 in Jetpack Compose with Hilt: A Ready-to-Use Solution
•
Making Android Code Cleaner with Use Cases: A Practical Approach Using Kotlin Coroutines
•
IntelliJ IDEA 2025.1 Released
•
Securing Android: Behind a few seconds of payment transaction…
•
Understanding the Internals of Side-Effect Handlers in Jetpack Compose
•
Avoid Redundant Network Checks in Android: Smart Offline-Aware API Handling
•
Handling UI Actions the Right Way in Kotlin ViewModels
•
Creating a Custom Observable Pattern with Lifecycle Awareness in Android
•
Clean Architecture: The ONE Change That Transforms Use Cases From Terrible to Super Useful
•
Troubleshooting Gradle and Maven builds with Develocity
•
Simple String Resources Obfuscation — пример обфускации константных строк
•
WriteBuddy — помощник в ведении заметок на Compose
Кроссплатформа
• Разрабатываем PWA. Полная инструкция по работе с Web App Manifest и Service Worker
• Использование wildcard-переменной _ в Dart 3
• Telegram Web App: Интеграция с Flutter
• Offline First в мобильных приложениях. Кэширование
• Как Kotlin Multiplatform изменил наши процессы
•
Why did you choose Flutter instead of React Native?
•
Flutter — Clean Architecture Repository Pattern
•
ViewModel in Flutter
•
Persistent State Management in Flutter with hydrated_bloc
•
Understanding the Flutter Widget Lifecycle: A Practical Guide
•
Build an agent-powered travel planning app with Generative AI
•
React Native Isn’t as Popular as You Think
•
Vibe Coding an Online Card Game with Flutter
Разработка
• GrapheneOS: Pixel, но не Google
• Какой фреймворк выбрать для MVP стартапа: опыт разработчика и фаундера
• XR на производстве: Инженерные хитрости создания VR-тренажеров для металлургов
• Разработали мобильное приложение для криптобиржи EVEDEX — функциональное решение для быстрой и безопасной торговли
• Не подсматривай: защищаем данные пользователей от скриншотов
• Fusion, или Как мы реализовали нашу версию BDUI
• Что показали на АврораКонф?
• Crystal – это Ruby без недостатков
• Amazon планирует внедрить ОС Vega в телевизоры
• Copilot Studio теперь может «использовать компьютер» для запуска ИИ-агентов
• OpenAI представила Codex CLI — открытый программный агент для командной строки
• Copilot Code Review теперь доступен для всех
•
The Best Programmers I Know
•
Overclocking dbt: Discord’s Custom Solution in Processing Petabytes of Data
•
Every Caching Strategy Explained in 5 Minutes
•
How to Avoid Massive Blows When Releasing New Features
•
Your App Codebase is Slowly Turning Into a Monster
•
Ktor vs. Spring Boot — Which Backend Framework Is Best For Mobile Developers?
•
Getting started with Agent Development Kit
Аналитика, маркетинг и монетизация
• 21 000+ установок и выход в топ RuStore: кейс продвижения мобильной игры от Rocket10
• Apple переименовала Search Ads в Apple Ads
• Самые скачиваемые и зарабатывающие приложения в мире в марте 2025
AI, Устройства, IoT
• Яндекс.Разврат или анти-этичный ИИ
• Помощник читателя: визуализируем сюжет
• Популярные API для работы с искусственным интеллектом
• Оповещение о РО через колонки Яндекса (Ну или в целом получение сигналов в УДЯ)
• 18% музыки, загружаемой в Deezer, генерируется искусственным интеллектом
• OpenAI разрабатывает свою социальную сеть
• Новые модели ИИ GPT-4.1 от OpenAI сосредоточены на программировании
• Лучшие фитнес-трекеры, которые можно купить прямо сейчас
•
Hacking a Smart Home Device
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.

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

• Расширенные архитектурные правила в SwiftLint
• Как работать с запросами разрешений в Appium: распознаём, что от нас хочет iOS
• Пишем свой дебаунсер на Swift
• От модуляризации к Clang и обратно
• Суперапп с чистого листа
• А так ли нужна Swift Modern Concurrency?
• Мгновенный фидбэк: как оперативно получать отзывы о приложении в App Store
• Swift Reduce: объединение элементов в одно значение
• В мобильной ферме Selectel появилось тестирование приложений для iOS
• Интегрируем TimelineView в SwiftUI-приложение
•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•


• Тестирование Android-приложений в масштабе Netflix
• Сканирование баркодов c помощью камеры и внешних устройств в Compose
• Как я сократил время сборки Gradle на 50%
• Как работает Robolectric и почему это важно знать
• XML vs Compose, не можете решить? Часть 1: Введение + Часть 2: Что выбрать, и что нужно знать перед выбором
• Универсальное демоприложение
• Не два байта переслать: эмуляция бесконтактных карт на мобильных устройствах
• Архитектурное собеседование Android разработчика (все собеседования)
• Устройство Android Music SDK или как мы встроили музыку в суперапп-приложение
• Интеграция MediaPipe в Android-приложение видеоконференцсвязи
• От дашбордов к более глубокому пониманию приложений: обновления Play Console
• Google внедряет функцию безопасности с автоперезагрузкой в Android
• Google прекратил поддержку Android 12
•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•


• Разрабатываем PWA. Полная инструкция по работе с Web App Manifest и Service Worker
• Использование wildcard-переменной _ в Dart 3
• Telegram Web App: Интеграция с Flutter
• Offline First в мобильных приложениях. Кэширование
• Как Kotlin Multiplatform изменил наши процессы
•

•

•

•

•

•

•

•


• GrapheneOS: Pixel, но не Google
• Какой фреймворк выбрать для MVP стартапа: опыт разработчика и фаундера
• XR на производстве: Инженерные хитрости создания VR-тренажеров для металлургов
• Разработали мобильное приложение для криптобиржи EVEDEX — функциональное решение для быстрой и безопасной торговли
• Не подсматривай: защищаем данные пользователей от скриншотов
• Fusion, или Как мы реализовали нашу версию BDUI
• Что показали на АврораКонф?
• Crystal – это Ruby без недостатков
• Amazon планирует внедрить ОС Vega в телевизоры
• Copilot Studio теперь может «использовать компьютер» для запуска ИИ-агентов
• OpenAI представила Codex CLI — открытый программный агент для командной строки
• Copilot Code Review теперь доступен для всех
•

•

•

•

•

•

•


• 21 000+ установок и выход в топ RuStore: кейс продвижения мобильной игры от Rocket10
• Apple переименовала Search Ads в Apple Ads
• Самые скачиваемые и зарабатывающие приложения в мире в марте 2025

• Яндекс.Разврат или анти-этичный ИИ
• Помощник читателя: визуализируем сюжет
• Популярные API для работы с искусственным интеллектом
• Оповещение о РО через колонки Яндекса (Ну или в целом получение сигналов в УДЯ)
• 18% музыки, загружаемой в Deezer, генерируется искусственным интеллектом
• OpenAI разрабатывает свою социальную сеть
• Новые модели ИИ GPT-4.1 от OpenAI сосредоточены на программировании
• Лучшие фитнес-трекеры, которые можно купить прямо сейчас
•

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