В новой подборке фреймворк Observation в Swift и быстрый и безопасный DI на Kotlin, побочные эффекты Jetpack Compose и написание UX-текстов, генератор межъязыковых мостов, самые скачиваемые и зарабатывающие приложения в России и многое другое.
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/8-/ph/u3/8-phu3u7wuvjeyathzyecjneuvs.jpeg)
iOS
• Осваиваем фреймворк Observation в Swift
• Вы не так готовите Kingfisher, или как самураи работают с загрузкой изображений
• Как ускорить сборку проекта и не остановить разработку
• Забудь про UITableView
• Новые подходы к работе с регулярными выражениями в Swift. Просто о сложном
• О дивный новый мир со Swift Concurrency
• Поваренная книга SwiftUI: изображения и кнопки
•
Debugging Improvements in Swift 5.9
•
Crossing the Boundary
•
Creating Shortcuts with App Intents
•
Taking your Strings Catalogs to the Next Level
•
Force Update Mechanism
•
Recreate a Dribbble App Design with UIKit
•
How to build a Tuist plugin and publish it using SPM and version control
•
A New Approach to Testing in Swift
•
Sync Data in SwiftUI Using NSUbiquitousKeyValueStore
•
Optimizing Binaries — How Does the Linker Help Reduce App Size
•
The SOLID principles with practical examples in Swift
•
Abstract Class vs. Protocol-Oriented Approach in Swift
•
Comparing the Performance of the Top 6 Analytics SDKs for iOS
•
How to Optimize Your iOS App Performance
•
Understanding SwiftUI ViewModifiers: A Comprehensive Guide
•
iOS Microapp Architecture
•
Unveiling the Data Modeling Principles of SwiftData
•
Recreate a Dribbble App Design with UIKit
•
Siri Intents for WatchOS
•
Custom In-App Notification’s – Xcode 15 – SwiftUI Tutorials
•
How to get started with Swift Concurrency (Beginner Tutorial)
•
Changing Status Bar Style in 5 Min’s — SwiftUI
•
Build an Air Quality Index App with SwiftUI Map & Google AQI API
•
How to Build a Custom Sheet in SwiftUI
•
New and Deprecated APIs in iOS 17
•
Papyrus: типобезопасный HTTP клиент для Swift
•
MetaCodable: расширение Codable с помощью метапрограммирования макросов
Android
• Библиотека Scout — быстрый и безопасный DI на Kotlin
• Побочные эффекты Jetpack Compose в подробностях
• Использование строковых ресурсов в ViewModel
• Миграция конфигурации сборки с Groovy на Kotlin
• Как устроена логика навигации флоу в приложении Тинькофф
• Введение в безопасность Android-приложений
• Удалил один класс, а сломался весь проект: Decoupling
• Корутинные загадки
• Измеряем sequence
• Вышел Android 14
•
Integrating Adaptability features into your Native Game
•
A feature flag PSA
•
Screenshot testing in Compose
•
Testing Android PagingSource
•
Optimize thermal and CPU performance with the Android Dynamic Performance Framework
•
Elegant Event Handling in Kotlin — A Refactoring Walkthrough
•
Unlocking the Power of ProGuard in Android: A Comprehensive Guide
•
Building Kotlin Coroutine Framework from Scratch: Part 2 -Reinventing Dispatchers
•
Understanding the Difference Between KSP and KAPS in Kotlin
•
Introducing RVTimeTracker — RecyclerView Time Tracker
•
Android Custom Views — 1 (Matrix & PorterDuffXfermode )
•
Elegant Event Handling in Kotlin — A Refactoring Walkthrough
•
Rise of Jetpack Media 3 — Revolutionising Media Playback on Android
•
Migration: Gson to Kotlinx.Serialization
•
Scratch Card in Android jetpack compose
•
Gestures in Jetpack compose — All you need to know
•
Hidden Mobile App Security Risks in Android Libraries
•
Automating Android Builds with GitHub Actions: From Debug to Release
•
Common Android Developer Interview Questions and Answers
•
How we built a Jenkins-Powered Cloud CI/CD Pipeline for our Android App in 2023
•
Now in Android: 92 — Studio Bot expansion, Firebase integration, Android Studio, and much more!
•
How to Build a Camera App With CameraX — Taking Photos
•
How to Build a Custom Gradle Plugin to Share Project Config — Multi-Module Architecture
•
Add Custom Google Fonts in your App
•
How to make and use BOM (Bill of Materials) dependencies in Android projects
•
Notify: заметки с MVVM, Compose и Material3
•
ComposeFadingEdges: исчезающие края для Compose
Кроссплатформа
• Модификаторы классов для сопровождающих API
•
A fond farewell to Flutter and Dart
•
Efficient Dart: optimizing CPU-bound load in Flutter without missing a frame
•
Flutter: Seamless multi-device debugging
•
Introducing Carbon for React Native
•
Everything you need to know about Enum with Flutter and Dart
•
Supercharge Your Flutter Development: Top Plugins to Boost Productivity
•
Pushing Flutter to the Limit: The Ultimate Guide to Reducing Flutter App Size
•
7 Tips to Boost .NET MAUI Mobile App Performance
•
Building an offline-first React Native app with Expo, WatermelonDB, and Supabase
•
How to use Parcelable in KMP?
•
React Native performance optimization using Render Locks
•
KMP Hopes & Dreamcatchers with Ritesh Gupta
•
Getting Started with Ignite
•
AnyPass: управление паролями на Compose Multiplatform
Разработка
• Как дизайн-мышление превратило Airbnb из неудачного стартапа в бизнес с миллиардными оборотами
• Как писать UX-тексты: изучаем интерфейсы мессенджеров
• Почему дизайн должен начинаться с исследования, даже когда всё очевидно
• Дизайнер интерфейсов: кого ищут компании, 10 лет спустя
• Как коридорное исследование помогло обновить каунтеры тредов в мессенджере
• Генератор межъязыковых мостов для мобильных приложений PyDjinni
• GitHub Innovation Graph — как разработчики всего мира работают на GitHub
• Microsoft обновила Teams
• Beams помогает продуктовым командам сосредоточиться на работе
• Количество вакансий в IT в России выросло на 10% за год
• Ozon запустит собственную оболочку для Smart TV со встроенными сервисами VK
• Самые высокооплачиваемые вакансии сентября в области разработки приложений
•
How To Create A Product Roadmap
•
Database Migrations
•
A Guide to Prototyping Automotive Interfaces
•
Which open-source monospaced font is best for coding?
•
Lessons from debugging a tricky direct memory leak
•
How to hire
•
Database Performance at Scale: A Free, Open Source Book
Аналитика, маркетинг и монетизация
• Самые скачиваемые и зарабатывающие приложения в России в сентябре 2023
• Pokémon Sleep в первый же месяц обогнал другие приложения для отслеживания сна
• Promova помогает людям с дислексией учить языки
• Zoom представил офисный пакет для совместной работы Zoom Docs
• Telegram исполнилось 10 лет, а доходы стагнируют
• Потребительские расходы на мобильных устройствах в 2023 превысили $100 млрд в рекордный срок — отчет Data.ai за 3 квартал
• Как подружить бизнес и процессы
• Суд признал законным решение ФАС оштрафовать Apple на 1.2 млрд рублей
• Приложение Microsoft Lists стало доступно всем пользователям
• Apple готовит обновленный поиск для App Store и Spotlight
AI, Устройства, IoT
• Нейронные сети для планирования движения беспилотных автомобилей
• Как собрать бюджетный умный дом. Общие принципы проектирования на оборудовании Wiren Board
• Калибровка магнитометра: через вращения к компасу
• Как я делал бюджетное устройство мониторинга качества среды и что из этого вышло
• SAGE: коррекция орфографии с помощью языковых моделей
• KC868-ASR: креа-нода (креативная для креативных)
• Тестируем PCIe в новом Raspberry Pi 5
• Starting Electronics: руководство по веб-серверам на Arduino. Часть 17. Завершающий урок и итоги
• Google представил Pixel 8 и Pixel 8 Pro
•
How Transformers Work
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/8-/ph/u3/8-phu3u7wuvjeyathzyecjneuvs.jpeg)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• Осваиваем фреймворк Observation в Swift
• Вы не так готовите Kingfisher, или как самураи работают с загрузкой изображений
• Как ускорить сборку проекта и не остановить разработку
• Забудь про UITableView
• Новые подходы к работе с регулярными выражениями в Swift. Просто о сложном
• О дивный новый мир со Swift Concurrency
• Поваренная книга SwiftUI: изображения и кнопки
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/e1a/3cf/2a8/e1a3cf2a8b65a0da69bbdd5c0ad040fe.png)
• Библиотека Scout — быстрый и безопасный DI на Kotlin
• Побочные эффекты Jetpack Compose в подробностях
• Использование строковых ресурсов в ViewModel
• Миграция конфигурации сборки с Groovy на Kotlin
• Как устроена логика навигации флоу в приложении Тинькофф
• Введение в безопасность Android-приложений
• Удалил один класс, а сломался весь проект: Decoupling
• Корутинные загадки
• Измеряем sequence
• Вышел Android 14
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/webt/ma/lx/8h/malx8hbgozt6lee8rmxmg96_s6a.png)
• Модификаторы классов для сопровождающих API
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Как дизайн-мышление превратило Airbnb из неудачного стартапа в бизнес с миллиардными оборотами
• Как писать UX-тексты: изучаем интерфейсы мессенджеров
• Почему дизайн должен начинаться с исследования, даже когда всё очевидно
• Дизайнер интерфейсов: кого ищут компании, 10 лет спустя
• Как коридорное исследование помогло обновить каунтеры тредов в мессенджере
• Генератор межъязыковых мостов для мобильных приложений PyDjinni
• GitHub Innovation Graph — как разработчики всего мира работают на GitHub
• Microsoft обновила Teams
• Beams помогает продуктовым командам сосредоточиться на работе
• Количество вакансий в IT в России выросло на 10% за год
• Ozon запустит собственную оболочку для Smart TV со встроенными сервисами VK
• Самые высокооплачиваемые вакансии сентября в области разработки приложений
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
![](https://habrastorage.org/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• Самые скачиваемые и зарабатывающие приложения в России в сентябре 2023
• Pokémon Sleep в первый же месяц обогнал другие приложения для отслеживания сна
• Promova помогает людям с дислексией учить языки
• Zoom представил офисный пакет для совместной работы Zoom Docs
• Telegram исполнилось 10 лет, а доходы стагнируют
• Потребительские расходы на мобильных устройствах в 2023 превысили $100 млрд в рекордный срок — отчет Data.ai за 3 квартал
• Как подружить бизнес и процессы
• Суд признал законным решение ФАС оштрафовать Apple на 1.2 млрд рублей
• Приложение Microsoft Lists стало доступно всем пользователям
• Apple готовит обновленный поиск для App Store и Spotlight
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Нейронные сети для планирования движения беспилотных автомобилей
• Как собрать бюджетный умный дом. Общие принципы проектирования на оборудовании Wiren Board
• Калибровка магнитометра: через вращения к компасу
• Как я делал бюджетное устройство мониторинга качества среды и что из этого вышло
• SAGE: коррекция орфографии с помощью языковых моделей
• KC868-ASR: креа-нода (креативная для креативных)
• Тестируем PCIe в новом Raspberry Pi 5
• Starting Electronics: руководство по веб-серверам на Arduino. Часть 17. Завершающий урок и итоги
• Google представил Pixel 8 и Pixel 8 Pro
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.