В этом выпуске работаем с SwiftUI на iOS 14, снова обсуждаем Google I/O 2024 и проводим скриншот-тестирование для превью Compose, оцениваем Flutter 3.22, пишем 2D-игры для кнопочных телефонов нулевых и многое другое. Подключайтесь!
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/r/w1560/webt/nv/0p/zj/nv0pzj4kmhks3fct2q39nztks_q.png)
iOS
• SwiftUI на iOS 14: преодолевая баги и улучшая перформанс в 3 раза
• MVVM: архитектурный шаблон для структурирования представлений SwiftUI
• AVPlayer seek(to:… vs seek(…tolerance
• Apple обновляет Форумы для разработчиков
• Глубокие ссылки для локальных уведомлений в SwiftUI
• Новый App Store Transparency Report
• TOP 10 горячих клавиш для Xcodу
• Swift Plugins: ускоряем сборку проекта
• Объединяем Combine и Swift Concurrency
•
MVVM: An architectural coding pattern to structure SwiftUI Views
•
Quick guide on Combine essentials in Swift
•
How to modularize Monolith iOS App
•
Comparing CI/CD tools for iOS
•
Unleashing the Power of Web3 and Blockchain in iOS
•
Safely distribute new Machine Learning models to millions of iPhones over-the-air
•
Reducing iOS Test execution time with Selective Testing
•
Reducing the Size of Cash App for iOS
•
SwiftUI TabView Offset Reader — Scrollable Tabs
•
Meet mergeable libraries
•
Fix failures faster with Xcode test reports
•
Dive deeper into SwiftData
•
CocoaHeadsNL Meetup: Adidas Apps Architecture/Managing our large iOS App
•
3 Advanced Tips to Code Like a Pro in Swift (from an ex-Apple engineer 🍎)
•
Hacker Text Effect — SwiftUI
•
Build your next website in Swift
•
Unidoc — масштабируемый механизм документирования кода Swift
•
Foil — правильная обертка для UserDefaults
•
TimecodeKit — таймкоды SMPTE для Swift
Android
• Генеративный ИИ в Android и эффективность фоновой работы приложения — важное с Google I/O 2024
• Скриншот-тестирование для превью Compose
• Пишем plugin для Jetbrains IDE: отображение файлов вне проекта в Project Tool
• Как создать аудиоплеер. Часть 1. Что под капотом
• По обе стороны Android печати
• «Картинка в картинке» приходит на Google TV
• Google запускает новую функцию, чтобы вернуть пользователей к установленным приложениям
• Обсуждаем Google I/O 2024
• Взлом и защита Android-приложений
• Моментальный запуск: как VK Клипы работают с плейбэком видео на Android
•
Kotlin 2.0 Release
•
Kotlin 2.0 — Android project migration guide
•
Why Calling a Composable from a Regular Function Isn’t Possible
•
Design Social Media app like TikTok for Android
•
Essential Android Design Patterns: MVVM, MVP, and More
•
Need of ViewCompositionStrategy in Jetpack Compose
•
What’s new in Kotlin 2.0.0
•
Mastering Jetpack Compose Performance
•
Something Worth Sharing — How to use Composables on Social Media
•
Adaptive Compose Layouts
•
The Complexities of Clean Architecture Use Cases
•
Sustaining best performance with Android adaptability technology
•
Advanced graphics features in mobile games with Vulkan
•
3 things to improve your Android App experience: Edge to Edge, Predictive Back, and Glance
•
Make it faster — Android Developers Backstage
•
How to Use the Google’s New Screenshot Testing Framework for Compose
•
KotlinConf’24 — Keynote
•
Ketch — загрузчик файлов на основе WorkManager
•
ComposeLife — игра «Жизнь» на Jetpack Compose
Кроссплатформа
• Flutter 3.22 — наше мнение
• Победители Global Gamers Challenge
• Яндекс выпустил DivKit. Я – Nui
• Что Flutter 3.22 нам готовит?
• Сравнение архитектурных паттернов GetX и BLoC
• Упрощение тестирования с Approval Tests в Dart
•
Qt 6.7.1 Released
•
On-device Vector Database for Dart/Flutter
•
Essential Libraries for Compose Multiplatform
•
5 extra packages to use with Flutter 3.22 in 2024
•
How to Setup a Room DB for Kotlin Multiplatform Compose
Разработка
• Геймдев, про который мы забыли: как работали 2D-игры на кнопочных телефонах нулевых
• Создание продуктов — это безжалостный гринд
• Утечки памяти в мобильных приложениях: руководство для QA-инженеров
• Какие возможности клавиатур подглядеть у Tinder, YouTube и Revolut
• Мое решение 3-х проблем MVx
• Как мы спасаем жизни с помощью геймификации
• Пермишены (permissions) для тестировщика: зачем нужно, что такое и как с этим работать
• Новая жизнь или начало экзистенциального кризиса?
• Как я делаю build больших Android/iOS проектов со 128 GB памяти на старом Mac
• Fortran и COBOL снова вошли в Индекс TIOBE
• Как собеседовать мобильных инженеров? Системный дизайн спешит на помощь!
• Проводим и проходим Mobile System Design-интервью
• Стоит ли сегодня идти в айти?
• Как сделать приложение на базе ChatGPT
•
Writing commit messages
•
How Amazon built a high-performant, durable, & consistent in-memory database
•
Test-Driven Development (TDD) is Not the Solution
•
Hidden vs. Disabled In UX
•
Things You Should Never Do As A Software Engineer
•
How I failed at Test-Driven Development and what it took to get it right
Аналитика, маркетинг и монетизация
• Максимальную стоимость покупки в Google Play подняли до $1000
• Praktika использует ИИ-аватаров для более естественного изучения языков
• Multicast Games: как удержаться на высоте в геймдеве (и как на это влияет мобильная аналитика)
• Raya, приложение знакомств для знаменитостей, зарабатывает $100 млн
• Эмуляторы ненадолго захватили App Store и быстро сошли на нет
• Web-To-Web User Acquisition Guide 2024
AI, Устройства, IoT
• Большие языковые модели гораздо линейнее, чем мы думали
• Как устроен рекомендательный сервис, который выдерживает 700 тысяч запросов в секунду. Доклад Яндекса
• Резервный мониторинг послушного дома
• Daylight DC1 — попытка создать спокойный компьютер
• Copilot получает Extensions
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/nv/0p/zj/nv0pzj4kmhks3fct2q39nztks_q.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• SwiftUI на iOS 14: преодолевая баги и улучшая перформанс в 3 раза
• MVVM: архитектурный шаблон для структурирования представлений SwiftUI
• AVPlayer seek(to:… vs seek(…tolerance
• Apple обновляет Форумы для разработчиков
• Глубокие ссылки для локальных уведомлений в SwiftUI
• Новый App Store Transparency Report
• TOP 10 горячих клавиш для Xcodу
• Swift Plugins: ускоряем сборку проекта
• Объединяем Combine и Swift Concurrency
•
![](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/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/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/e1a/3cf/2a8/e1a3cf2a8b65a0da69bbdd5c0ad040fe.png)
• Генеративный ИИ в Android и эффективность фоновой работы приложения — важное с Google I/O 2024
• Скриншот-тестирование для превью Compose
• Пишем plugin для Jetbrains IDE: отображение файлов вне проекта в Project Tool
• Как создать аудиоплеер. Часть 1. Что под капотом
• По обе стороны Android печати
• «Картинка в картинке» приходит на Google TV
• Google запускает новую функцию, чтобы вернуть пользователей к установленным приложениям
• Обсуждаем Google I/O 2024
• Взлом и защита Android-приложений
• Моментальный запуск: как VK Клипы работают с плейбэком видео на Android
•
![](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/webt/ma/lx/8h/malx8hbgozt6lee8rmxmg96_s6a.png)
• Flutter 3.22 — наше мнение
• Победители Global Gamers Challenge
• Яндекс выпустил DivKit. Я – Nui
• Что Flutter 3.22 нам готовит?
• Сравнение архитектурных паттернов GetX и BLoC
• Упрощение тестирования с Approval Tests в Dart
•
![](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/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Геймдев, про который мы забыли: как работали 2D-игры на кнопочных телефонах нулевых
• Создание продуктов — это безжалостный гринд
• Утечки памяти в мобильных приложениях: руководство для QA-инженеров
• Какие возможности клавиатур подглядеть у Tinder, YouTube и Revolut
• Мое решение 3-х проблем MVx
• Как мы спасаем жизни с помощью геймификации
• Пермишены (permissions) для тестировщика: зачем нужно, что такое и как с этим работать
• Новая жизнь или начало экзистенциального кризиса?
• Как я делаю build больших Android/iOS проектов со 128 GB памяти на старом Mac
• Fortran и COBOL снова вошли в Индекс TIOBE
• Как собеседовать мобильных инженеров? Системный дизайн спешит на помощь!
• Проводим и проходим Mobile System Design-интервью
• Стоит ли сегодня идти в айти?
• Как сделать приложение на базе ChatGPT
•
![](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)
• Максимальную стоимость покупки в Google Play подняли до $1000
• Praktika использует ИИ-аватаров для более естественного изучения языков
• Multicast Games: как удержаться на высоте в геймдеве (и как на это влияет мобильная аналитика)
• Raya, приложение знакомств для знаменитостей, зарабатывает $100 млн
• Эмуляторы ненадолго захватили App Store и быстро сошли на нет
• Web-To-Web User Acquisition Guide 2024
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Большие языковые модели гораздо линейнее, чем мы думали
• Как устроен рекомендательный сервис, который выдерживает 700 тысяч запросов в секунду. Доклад Яндекса
• Резервный мониторинг послушного дома
• Daylight DC1 — попытка создать спокойный компьютер
• Copilot получает Extensions
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.