В новом дайджесте закрытие CocoaPods и излишества чистой архитектуры, деструктуризация в Kotlin с примерами и знакомство с Flutter GPU, архитектура мобильного приложения в разрезе высоких нагрузок и построения экосистем, кто может стать программистом, сокращение количества вакансий для разработчиков и многое другое. Подключайтесь!
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/gg/fc/q-/ggfcq-xc8leaoufbqijsntu3xvq.png)
iOS
• Создание XCFramework из SPM пакета
• CocoaPods прекращает развитие и переходит в режим поддержки
• Как я бросила двустороннюю архитектуру и ушла к Redux со SwiftUI и SwiftData
• Основы фреймворка Combine для ML в Swift
• Поиск работы iOS разработчиком в текущих условиях 2024
• Apple открывает доступ к NFC в iOS 18.1
• Apple разрабатывает настольного робота
• Встраиваемый Swift: начинаем работу
• Реверс-инжиниринг iOS-приложения
•
Tracking geometry changes in SwiftUI
•
Cancellable withObservationTracking in Swift•
•
Swift Navigation: Powerful navigation tools for all Swift platforms
•
Key Lessons When Moving Towards a Modular Codebase
•
Exploring SwiftUI: Animating Mesh Gradient with Colors in iOS 18
•
Considerations for Using Codable and Enums in SwiftData Models
•
Extend Your App’s Controls Across the System
•
Exploring Local Storage in iOS: iStorageEnumV2.0
•
Recursive enums in Swift
•
The Tale of Method Sizzling: A Coding Adventure
•
Expandable Search Bar + Progressive Blur Effect
•
iOS 18 SwiftUI ScrollView DeepDive
•
SwiftUI: Test Push Notifications With iOS Simulators
•
PhraseKit — случайные, но читаемые фразы
•
Swift Fluent Icon — fluent иконки от Microsoft
•
Swift Semantic Search — семантический поиск в реальном времени на устройстве
Android
• Использование Чистой Архитектуры в Android излишество? — Обсуждение на Reddit
• Вредные советы, как приходить с вопросами к техлиду
• Деструктуризация в Kotlin с примерами
• Когда ваше приложение умирает – жизненный цикл activity в Android для QA
• Передача данных между фрагментом и BottomSheetDialogFragment с использованием Dagger и Navigation Component
• Оптимизация Gradle: избавляемся от Android-модулей
• ByteWeaver. Инструментирование байт-кода во имя великого блага
• Используем библиотеку Android Security Lints для Android
•
Advanced Kotlin Flow Cheat sheet (for Android Engineer)
•
Made by Google 2024
•
Android Release Automation — Our Journey to Fully Automated Weekly Releases
•
Composing Suspend Functions
•
Jetpack Compose Theme with Composition Local: Spacing, Shaping, and Status Colors
•
Efficient Render Passes — On Tile-Based Rendering Hardware
•
Prefer Composition over Inheritance
•
Android Process Lifecycle + Coroutines == ❤
•
Advanced Bottom Sheet With Flexible Configuration for Compose
•
How to Get Access to ALL External Media Files (Works on Android 15!)
•
How to Pass Custom NavTypes in Compose Type-Safe Navigation
•
Kotlin’s Elegant Deceptions Simple APIs, Unusual Tactics
•
Harmonizing Kotlin codebases with Konsist
•
Android, Compose, Multiplatform & Server — Inject them all with Koin
•
Elevating Android App Resilience: Incident Management Strategies
•
Jetpack Compose Endless Horizontal Pager Animation — демо горизонтального пейджера
•
Cat Activity — трансляция активности в IDE в Discord
Кроссплатформа
• Как мы создали приложение для ТСД на Flutter с интеграцией 1С и внедрили его на 200 фабриках в Китае
• Внедрять Kotlin Multiplatform легко. Масштабировать сложно.
• От Web к Native с React
• PWA vs Native: где приложения для iOS и Android больше никогда не пригодятся
• Знакомимся с Flutter GPU
• Оптимизация производительности Flutter приложений
• Что думают про Flutter техлиды: инсайты из опроса
• Полный гайд по тестированию на Flutter. Часть 9: Best practices написания Unit-тестов + Части 7-8: Ошибки, которые усложняют написание тестов
• Почему вам не нужен Kotlin Multiplatform
• Создание indoor-карты здания во Flutter
•
Rust GUI library via Flutter, done simple
•
Foreground Services in Flutter: Run tasks when your App is minimized
•
Flutter Magic: Changing App Icons Dynamically (Even on Stubborn Android!)
•
Ensuring Seamless User Experience: Implementing In-App Updates in Flutter
•
Diving into Advanced Compose Multiplatform Modifiers and Their Impact on Multiplatform Development
Разработка
• Как мы соединили обучение с рабочими задачами и не остались в пустой аудитории. Опыт подготовки команды к SwiftUI
• Архитектура мобильного приложения в разрезе высоких нагрузок и построения экосистем
• Кто реально может стать программистом?
• 30 вопросов команде и себе — техника и практика формулировка хороших вопросов
• VK Звонки: поднимаем планку качества WebRTC-звонков
• Как пользоваться DivKit
• Количество вакансий для разработчиков сокращается
• CodeRabbit получил $16 млн на ИИ для Code Review
• Cursor, конкурент GitHub Copilot, привлек Cерию A на $60 млн при оценке в $400 млн
•
How we deleted 4195 code files in 9 hours
•
Enterprise Mobile Apps Development Principles
•
Variability, Not Repetition, is the Key to Mastery
•
Following Industry Trends Can Be a Career Trap
•
How I Created 175 Fonts Using Rust
•
Practices of Reliable Software Design
•
Apple Design Award Winner Devin Davies Shares His Learning Strategies
•
Kotlin for Data Analysis: Exploring Dataframes and Visualizations in Notebooks
•
AWS Certified Developer Associate Certification Course
•
Design a Car mobile app for iOS 18 in Figma
Аналитика, маркетинг и монетизация
• Epic Games Store с Fortnite запустился на iOS
• Epic Games предоставила грант AltStore PAL и тот стал бесплатным
• Spotify начал показывать цену на сайте в iOS
• Deep Live Cam заменяет лицо в трансляции в реальном времени
• Apple Search Ads заблокировали для российских аккаунтов
• Patreon будет платить 30% комиссию Apple
AI, Устройства, IoT
• Я больше не верю публичным датасетам
• Открытый проект Wi-Fi Bluetooth микророутера
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/gg/fc/q-/ggfcq-xc8leaoufbqijsntu3xvq.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• Создание XCFramework из SPM пакета
• CocoaPods прекращает развитие и переходит в режим поддержки
• Как я бросила двустороннюю архитектуру и ушла к Redux со SwiftUI и SwiftData
• Основы фреймворка Combine для ML в Swift
• Поиск работы iOS разработчиком в текущих условиях 2024
• Apple открывает доступ к NFC в iOS 18.1
• Apple разрабатывает настольного робота
• Встраиваемый Swift: начинаем работу
• Реверс-инжиниринг iOS-приложения
•
![](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/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 излишество? — Обсуждение на Reddit
• Вредные советы, как приходить с вопросами к техлиду
• Деструктуризация в Kotlin с примерами
• Когда ваше приложение умирает – жизненный цикл activity в Android для QA
• Передача данных между фрагментом и BottomSheetDialogFragment с использованием Dagger и Navigation Component
• Оптимизация Gradle: избавляемся от Android-модулей
• ByteWeaver. Инструментирование байт-кода во имя великого блага
• Используем библиотеку Android Security Lints для 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/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 с интеграцией 1С и внедрили его на 200 фабриках в Китае
• Внедрять Kotlin Multiplatform легко. Масштабировать сложно.
• От Web к Native с React
• PWA vs Native: где приложения для iOS и Android больше никогда не пригодятся
• Знакомимся с Flutter GPU
• Оптимизация производительности Flutter приложений
• Что думают про Flutter техлиды: инсайты из опроса
• Полный гайд по тестированию на Flutter. Часть 9: Best practices написания Unit-тестов + Части 7-8: Ошибки, которые усложняют написание тестов
• Почему вам не нужен Kotlin Multiplatform
• Создание indoor-карты здания во 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/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
![](https://habrastorage.org/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Как мы соединили обучение с рабочими задачами и не остались в пустой аудитории. Опыт подготовки команды к SwiftUI
• Архитектура мобильного приложения в разрезе высоких нагрузок и построения экосистем
• Кто реально может стать программистом?
• 30 вопросов команде и себе — техника и практика формулировка хороших вопросов
• VK Звонки: поднимаем планку качества WebRTC-звонков
• Как пользоваться DivKit
• Количество вакансий для разработчиков сокращается
• CodeRabbit получил $16 млн на ИИ для Code Review
• Cursor, конкурент GitHub Copilot, привлек Cерию A на $60 млн при оценке в $400 млн
•
![](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/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• Epic Games Store с Fortnite запустился на iOS
• Epic Games предоставила грант AltStore PAL и тот стал бесплатным
• Spotify начал показывать цену на сайте в iOS
• Deep Live Cam заменяет лицо в трансляции в реальном времени
• Apple Search Ads заблокировали для российских аккаунтов
• Patreon будет платить 30% комиссию Apple
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Я больше не верю публичным датасетам
• Открытый проект Wi-Fi Bluetooth микророутера
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.