В этом выпуске ключевые изменения в UIKit и восстановление удаленных сообщений в Telegram, самые весёлые TODO из Android-фреймворка и короткий путь с Senior-ами, инфляция званий, сравнение доходов App Store и Google Play, Yolo на пятирублёвой монете и многое другое. Подключайтесь!
![](https://habrastorage.org/webt/s2/_j/wv/s2_jwvova4icmvb_monqffx_xci.png)
Подписывайтесь на мой Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
iOS
• iOS 18 для разработчиков: Ключевые изменения в UIKit
• Objective-C не кусается: как перестать бояться Legacy и стать настоящим iOS-ниндзя
• Внедряем снепшот-тестирование, или пять стадий принятия неизбежного
• Области тьмы: разбираем неочевидные моменты при использовании памяти в Swift
• Как я преодолел отказ в модерации App Store: история приложения YoloPrice
• Азартная разработка iOS приложения игры 2048 с ChatGPT
• Изменение модели данных CoreData для iOS приложения с iCloud синхронизацией
• Макросы в Swift: Практическое руководство по использованию
• Apple обновляет TestFlight
• Apple открывает исследование безопасности Private Cloud Compute
• Выпуск Vision Pro могут прекратить к концу 2024 года
• Вышла бета-версия iOS 18.2 с Apple Intelligence
• Apple работает над новым App Store для игр
• Создание настраиваемого сегментированного контрола в SwiftUI
•
Modular Navigation in SwiftUI: A Comprehensive Guide
•
Improve your app’s UX with SwiftUI’s task view modifier
•
Migrating Combine to AsyncAlgorithms
•
Create ZIP files in Swift without third-party dependencies
•
How Do Binaries work together? What breaks ABI?
•
How to significantly improve incremental build time with xcodebuild
•
SwiftUI: Build Our Own Container
•
Vapor and Swift Testing: Running tests in parallel
•
Making Accessibility Accessible
•
How to use Cursor for iOS development
•
AnyView is everywhere in Xcode 16
•
Comprehensive Guide to Mastering KeyPath in Swift
•
Beginner’s Guide to Protocol Buffers and gRPC with Swift
•
SwiftUI or UIKit in 2024 & 2025
•
How to Create Interactive Table View in SwiftUI
•
Building a 2048 PowerPlay Game for Apple Watch with SwiftUI
•
How I Used Keynote to Create iOS App Screenshots and Preview Videos from the Same File
•
Creating view transitions in SwiftUI
•
My Journey as an iOS Developer Intern at Teads
•
Collapsible Headers in SwiftUI: It Took Three Attempts to Get It Just Right
•
CocoaHeadsNL Meetup
•
Google Engineer Teaches Us How to Set Up Firebase in Your iOS Project
•
App-Wide Overlays | SwiftUI
•
MockData, PreviewModifiers and PreviewTraits in SwiftUI
•
KeyboardKit Pro — кастомные клавиатуры для iOS и iPadOS
•
PIPKit — картинка в картинке на iOS
Android
• Восстанавливаем удалённые сообщения в Telegram
• Самые весёлые TODO из Android-фреймворка
• Пример: взлом покупок в Android-приложении и защита от этого
• Как в eXpress достигали мгновенного рендера отправки сообщения: оптимизация локальной базы данных
• Решение проблемы race condition в Kotlin корутинах
• Как потратить шесть лет и быть невидимкой в Play Market
• Забудьте про терминал! Как я избавлялся от рутинных ADB команды с помощью Shortcuts
• Анализ и оптимизация проблемы задержек и пропуска кадров в анимации загрузки
• Основы View и ViewGroup. Создаём интерфейсы в Android-приложениях
• Избавляемся от Context в бизнес логике — как ответить на собеседовании
• Анализ сведений о запуске и завершении приложений в Android 15
• Суд приостановил решение об открытии Google Play и Android
•
Implementing Overslide interaction in Jetpack Compose
•
Unplugged DI — DI.Y Basics
•
Making my concurrent algorithm 6000% better
•
Using Kotlin Reflection to Automate Compose Navigation
•
That Weird Compose Crash
•
Circular Reveal Animations in Jetpack Compose
•
Using popBackStack()? Then Your App Likely Has a Bug.
•
Reusable Styles in Compose
•
Advanced Kotlin: Exploring Lesser-Known Syntax and Features
•
Changes in Android 15 for developers
•
Get your App Performance Score
•
Kotlin Under the Hood: Exploring Constructors and Init Blocks
•
Implementing Overslide interaction in Jetpack Compose
•
Build Stunning Grids in Minutes with LazyVerticalGrid
•
Understanding JankStats: Optimizing Your Android App’s Performance
•
Rethinking Exception Handling with Kotlin’s Result Type
•
Studio Jewelry — Android Developers Backstage
•
How to Migrate Your App to Support the NEW Predictive Back Gestures On Android
•
How to Implement Image Compression On Android
•
Practical Tips and Tricks to Improve Your Compose Previews
•
Android Compose Accessibility Techniques — лучшие практики доступности
•
GroupTrack — семейный локатор
Кроссплатформа
• Как работать с разрешениями для чтения и записи файлов в Android 13+ на примере React Native
• Встречаем yx_scope: DI-фреймворк для работы со скоупами в открытом доступе
• Two-Tier Data Model архитектура: концепт и мысли
• Интеграция TFLite во Flutter: внедряем модели машинного обучения в мобильное приложение
•
Writing a personal website in Flutter Web
•
Developing accessible mobile apps with Flutter
•
Top 10 Flutter Design Patterns in 2024
•
Advanced Flutter Techniques Every Mobile Developer Should Know
•
Save Time by Copying Pre-Made Flutter Code Right into Your Project
•
Scatter And Surface Plots
•
React Native – New Architecture is here
•
Deep Linking Integration with Flutter
•
Lets-Plot — мультиплатформенное черчение
Разработка
• Подходы к сокращению регрессионного тестирования
• Задачи с собеседований: Leetcode — Сложите два числа
• Короткий путь с Senior-ами
• Честно и по делу: смотрим на F+ R570E с российской системой на борту
• Звания инженеров-программистов (почти) утратили свой смысл
• Крутить или не крутить?
• Как человеческий фактор может стать секретным оружием в руках QA
• Huawei окончательно отказывается от Android и запускает HarmonyOS NEXT
• Backend vs Frontend: сравниваем опыт разработчиков — что сложнее, перспективнее и кому больше платят
• Grafana: инструкция по применению
• Тесты с душком
• Как писать библиотеки: проектирование API, обратная совместимость
•
Introducing Mellum: JetBrains’ New LLM Built for Developers
•
Using AI Generated Code Will Make You a Bad Programmer
•
3 Lessons from the Smartest Developers I’ve Worked With
•
Attacking the Samsung Galaxy A* Boot Chain
•
A New Coding Paradigm: Declarative Domain Programming
Аналитика, маркетинг и монетизация
• Disney+ и Hulu отказываются от встроенных покупок Apple
• Где деньги: сравнение доходов App Store и Google Play
• Сравнение доходов App Store и Google Play в категории Образование в США
• Daze, креативное приложение для обмена сообщениями с ИИ для Поколения Z, набирает аудиторию еще до запуска
• Azar пытается вернуть случайные видеочаты Поколению Z
•
The future of mobile measurement playbook
AI, Устройства, IoT
• Запускаем Yolo на пятирублёвой монете или Luckfox Pico Mini
• Как мы обучили Mistral 7B русскому языку и адаптировали для объявлений Авито
• Кейс: создание программно-аппаратного комплекса управления антенной для радиоспорта по КВ
• Улучшаем умный дом на KNX: добавляем диспетчеризацию на Modbus
• Обзор Lenovo ThinkBook Plus Gen 5 Hybrid: больше безумных ноутбуков!
• ИИ Anthropic теперь может писать и выполнять код
• Raspberry Pi выпускает новые ИИ-дополнения
• HUGS упрощают развертывание открытых ИИ-моделей
• Новая модель искусственного интеллекта от Anthropic теперь может управлять компьютером
•
Learn Claude AI – Build Text Summarizers, Image Describers, and More with the Anthropic API
•
Gemma Developer Day Tokyo
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
![](https://habrastorage.org/webt/s2/_j/wv/s2_jwvova4icmvb_monqffx_xci.png)
Подписывайтесь на мой Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• iOS 18 для разработчиков: Ключевые изменения в UIKit
• Objective-C не кусается: как перестать бояться Legacy и стать настоящим iOS-ниндзя
• Внедряем снепшот-тестирование, или пять стадий принятия неизбежного
• Области тьмы: разбираем неочевидные моменты при использовании памяти в Swift
• Как я преодолел отказ в модерации App Store: история приложения YoloPrice
• Азартная разработка iOS приложения игры 2048 с ChatGPT
• Изменение модели данных CoreData для iOS приложения с iCloud синхронизацией
• Макросы в Swift: Практическое руководство по использованию
• Apple обновляет TestFlight
• Apple открывает исследование безопасности Private Cloud Compute
• Выпуск Vision Pro могут прекратить к концу 2024 года
• Вышла бета-версия iOS 18.2 с Apple Intelligence
• Apple работает над новым App Store для игр
• Создание настраиваемого сегментированного контрола в 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/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/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)
• Восстанавливаем удалённые сообщения в Telegram
• Самые весёлые TODO из Android-фреймворка
• Пример: взлом покупок в Android-приложении и защита от этого
• Как в eXpress достигали мгновенного рендера отправки сообщения: оптимизация локальной базы данных
• Решение проблемы race condition в Kotlin корутинах
• Как потратить шесть лет и быть невидимкой в Play Market
• Забудьте про терминал! Как я избавлялся от рутинных ADB команды с помощью Shortcuts
• Анализ и оптимизация проблемы задержек и пропуска кадров в анимации загрузки
• Основы View и ViewGroup. Создаём интерфейсы в Android-приложениях
• Избавляемся от Context в бизнес логике — как ответить на собеседовании
• Анализ сведений о запуске и завершении приложений в Android 15
• Суд приостановил решение об открытии Google Play и 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/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/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)
• Как работать с разрешениями для чтения и записи файлов в Android 13+ на примере React Native
• Встречаем yx_scope: DI-фреймворк для работы со скоупами в открытом доступе
• Two-Tier Data Model архитектура: концепт и мысли
• Интеграция TFLite во Flutter: внедряем модели машинного обучения в мобильное приложение
•
![](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/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Подходы к сокращению регрессионного тестирования
• Задачи с собеседований: Leetcode — Сложите два числа
• Короткий путь с Senior-ами
• Честно и по делу: смотрим на F+ R570E с российской системой на борту
• Звания инженеров-программистов (почти) утратили свой смысл
• Крутить или не крутить?
• Как человеческий фактор может стать секретным оружием в руках QA
• Huawei окончательно отказывается от Android и запускает HarmonyOS NEXT
• Backend vs Frontend: сравниваем опыт разработчиков — что сложнее, перспективнее и кому больше платят
• Grafana: инструкция по применению
• Тесты с душком
• Как писать библиотеки: проектирование 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/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• Disney+ и Hulu отказываются от встроенных покупок Apple
• Где деньги: сравнение доходов App Store и Google Play
• Сравнение доходов App Store и Google Play в категории Образование в США
• Daze, креативное приложение для обмена сообщениями с ИИ для Поколения Z, набирает аудиторию еще до запуска
• Azar пытается вернуть случайные видеочаты Поколению Z
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Запускаем Yolo на пятирублёвой монете или Luckfox Pico Mini
• Как мы обучили Mistral 7B русскому языку и адаптировали для объявлений Авито
• Кейс: создание программно-аппаратного комплекса управления антенной для радиоспорта по КВ
• Улучшаем умный дом на KNX: добавляем диспетчеризацию на Modbus
• Обзор Lenovo ThinkBook Plus Gen 5 Hybrid: больше безумных ноутбуков!
• ИИ Anthropic теперь может писать и выполнять код
• Raspberry Pi выпускает новые ИИ-дополнения
• HUGS упрощают развертывание открытых ИИ-моделей
• Новая модель искусственного интеллекта от Anthropic теперь может управлять компьютером
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.