В нашем новом дайджесте исследуем вопросы SOLID и архитектуры, разбираем задачи с собеседований и строим мосты, говорим на разрабском, создаем системы, закладываем баги, учимся у Dolingo и многое другое!
В нашем Telegram-канале Mobile Insights, еще больше материалов для мобильных разработчиков, а в IT Insights — об интересном коде и технологиях. Подключайтесь!
![](https://habrastorage.org/webt/xq/bo/qb/xqboqbveqiuwjhui6idnvch4jh0.png)
iOS
• SOLID в Swift. Простое объяснение с примерами для начинающих
• .xcstrings в Xcode 15
• Создание интерактивного виджета с помощью App Intents
• Использование XCFramework в крупном iOS-проекте, или Как ускорить сборку в 2 раза
• SwiftUI для большого B2C-продукта
• По слухам, Apple сократила заказ Vision Pro
• Следующие AirPods смогут проверять слух и температуру
•
iOS 17 VisualEffect & ScrollTransition APIs — Circular Carousel Slider
•
iOS Dev Job Interview — Must Know Topics
•
Swift Variadic Parameters
•
Swift Observation from Scratch
•
SwiftUI: Trailing label TextField
•
Embracing CloudKit
•
SwiftUI Data Flow 2023
•
Create an Interactive Widget Using App Intents
•
Async Animations in SwiftUI
•
DI in SwiftUI
•
Animate SF Symbols with symbolEffect
•
Cleaner Views: Clean Code in SwiftUI
•
10 More Deadly SwiftUI Mistakes and How to Avoid Them
•
Slow architecture in Swift
•
iOS 17 @Observable and the Observation Framework
•
App Intents Spotlight integration using Shortcuts
•
CollectionOfOne in Swift
•
Demystifying Opaque Types in Swift
•
A Deep Dive Into Observation: A New Way to Boost SwiftUI Performance
•
Data-Oriented-Design — A Swift Introduction
•
Mastering Swift Foundation Formatter API. Custom Format Styles
•
SwiftUI apps at scale
•
Swift Observation from Scratch
•
Difference Between Implicit and Explicit Animations in SwiftUI
•
The Ultimate Guide to Building SwiftData Applications
•
Billboard: красивая и безопасная реклама
•
iOS Learning Materials: обучающие материалы по iOS-разработке
Android
• Как создавать архитектуру Android-приложений: глубокое погружение в принципы
• Настраиваем CI/CD для тестовой инфраструктуры Android
• Разбор небольшого приложения с анекдотами
• Разбор тестового задания на позицию Android Developer
• Я.Субботник по Java-разработке
• А это можно запустить в фоне?
• Мой офис. Как открываются документы на смартфоне
• Modern MVI и MVVM+ со всех сторон в 2023
• Lobzik: полуавтоматическая модуляризация Android-проекта
•
Foreground Services — Android Basics 2023
•
Broadcasts & Broadcast Receivers — Android Basics 2023
•
What’s new in Kotlin 1.9.0
•
Migrate RecyclerView to Lazy list
•
Two-Way Communication Between Fragments in a Multi-Module Android Project while maintaining loose coupling
•
Animated action menu
•
Build Interactive Live Streaming Android App with Video SDK using Java
•
Exploring SharedFlow in Kotlin: Understanding tryEmit() and the Importance of Buffers
•
Paging in Android Jetpack compose: from caching data with Room to displaying in Lazycolumn
•
Reduce Boilerplate When Running Kotlin Tests
•
Build a Simple Sort and Filter Screen in Your Android App
•
Efficient Ways of Using Location Services in Kotlin Android Apps
•
Creating and publishing your own Android library in Kotlin
•
The beauty of Kotlin type system
•
TextInputLayout Censoring with Password-like Method
•
Experimenting with Android Studio Bot
•
Unlocking the power of Jetpack Compose, Fragments, Stateflow, and ViewModels: A Comprehensive Guide
•
A flexible, modern Android app architecture: complete step-by-step
•
Native UI and multiplatform Compose with Redwood
•
How to build a Clean SSEClient Flow
•
Implementing Single Source of Truth in Android
•
Migrating from Android API level 30 to 31/32 or App Crashing After Updating Target SDK
•
Okio: I/O библиотека для Android, Java и Kotlin Multiplatform
•
Amethyst: клиент Nostr для Android
•
Paraphrase: типобезопасные форматеры для строк
Кроссплатформа
• Метод setState() во Flutter может работать не так, как вы это представляете
• Строим мосты: подключение зависимостей с Cocoapods в Kotlin Multiplatform Mobile
• Колесо сансары в поиске решения бага «белый экран» в SPA приложении на React
•
How to build a collision-based game using Flutter and Flame
•
Shorebird: CodePush & Over-the-Air Updates for Flutter Apps
•
Explore Animated Loader In Flutter
•
Profiling React Native Apps With iOS and Android Tools
•
Introducing LangChain.dart
•
Implementing CI/CD for Jetbrains Compose Multiplatform Android and iOS Apps using GitHub Actions
•
Optimising Page Load Times in Flipkart Mobile App
•
The Complete Guide to Deploy Flutter Builds Using App Center
•
4 Flutter Open Source Projects From Which You Can Learn A Lot! (2023)
•
Error Handling In My Flutter App
•
How to Cluster Markers with FlutterMap
•
How to build a collision-based game using Flutter and Flame
•
From Hacking to Shipping: Kotlin Multiplatform Mobile at Hootsuite
Разработка
• Скажи что-нибудь на разрабском, Figma
• Чтобы стать великим разработчиком, нужна система
• Какие баги мы заложили в мобильный банк на PHDays 12: разбор конкурса $NATCH
• Определить и найти. Разработка алгоритма поиска изменений с Мap-ами и хешами
• Делаем волшебство в России: история о создании APM для «ВкусВилл»
• Podlodka #324: 3D-графика. Почему игры тормозят?
• Какую работу, компанию или продукт выбирают продакты
• Зарплаты мобильных разработчиков по данным Хабр Карьера
• Самые высокооплачиваемые вакансии июня в области разработки приложений
• Бесплатный курс по основам Continuous Delivery
• Вероятно Twitter заDDOSил сам себя
•
Moneyball for Software Teams – An Imperfect Heuristic for Quantifying Dev Performance
•
The Story of Samsung’s OneUI
•
Fight Unplanned Work, the Silent Killer of Projects
•
We Just Hired a “Messy Coder”. Here Are My Fears
•
Stay Technical While Leading Your Team
•
The hardest part of building software is not coding, it’s requirements
•
A Case: How To Design A Medical App
•
5 Mac accessories for developers
•
Accelerating Success: Decoding the Weekly Sprint Velocity of the International Mobile Team
Аналитика, маркетинг и монетизация
• Как Duolingo подталкивает пользователей к premium — 5 уроков крупнейшего образовательного приложения
• Threads запустился в App Store и Google Play
• Spotify окончательно отказался от покупок через App Store
• Клуб миллионеров в App Store — 503 приложения зарабатывает $1 млн или больше
• Как отличить хорошего аналитика от плохого?
AI, Устройства, IoT
• Kaggle — практическое изучение Big Data. Что это за платформа, и как она работает
• Generative AI. Как программистам держать нос по ветру
• Device Twins и подвеска автомобиля: найдите 10 совпадений + Digital Twins и Device Twins: в чем разница и что общего?
• ChatGPT использовали для рассказов эротических историй
• OpenAI объявляет о всеобщей доступности API GPT-4
• Бесплатный курс по Natural Language Processing (NLP) от The Hugging Face
• $2 млн: RoboDeck — робот для обслуживания веранд и палуб
•
Building Real-time Machine Learning Foundations at Lyft
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
В нашем Telegram-канале Mobile Insights, еще больше материалов для мобильных разработчиков, а в IT Insights — об интересном коде и технологиях. Подключайтесь!
![](https://habrastorage.org/webt/xq/bo/qb/xqboqbveqiuwjhui6idnvch4jh0.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• SOLID в Swift. Простое объяснение с примерами для начинающих
• .xcstrings в Xcode 15
• Создание интерактивного виджета с помощью App Intents
• Использование XCFramework в крупном iOS-проекте, или Как ускорить сборку в 2 раза
• SwiftUI для большого B2C-продукта
• По слухам, Apple сократила заказ Vision Pro
• Следующие AirPods смогут проверять слух и температуру
•
![](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/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/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/e1a/3cf/2a8/e1a3cf2a8b65a0da69bbdd5c0ad040fe.png)
• Как создавать архитектуру Android-приложений: глубокое погружение в принципы
• Настраиваем CI/CD для тестовой инфраструктуры Android
• Разбор небольшого приложения с анекдотами
• Разбор тестового задания на позицию Android Developer
• Я.Субботник по Java-разработке
• А это можно запустить в фоне?
• Мой офис. Как открываются документы на смартфоне
• Modern MVI и MVVM+ со всех сторон в 2023
• Lobzik: полуавтоматическая модуляризация 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/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/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)
• Метод setState() во Flutter может работать не так, как вы это представляете
• Строим мосты: подключение зависимостей с Cocoapods в Kotlin Multiplatform Mobile
• Колесо сансары в поиске решения бага «белый экран» в SPA приложении на React
•
![](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/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Скажи что-нибудь на разрабском, Figma
• Чтобы стать великим разработчиком, нужна система
• Какие баги мы заложили в мобильный банк на PHDays 12: разбор конкурса $NATCH
• Определить и найти. Разработка алгоритма поиска изменений с Мap-ами и хешами
• Делаем волшебство в России: история о создании APM для «ВкусВилл»
• Podlodka #324: 3D-графика. Почему игры тормозят?
• Какую работу, компанию или продукт выбирают продакты
• Зарплаты мобильных разработчиков по данным Хабр Карьера
• Самые высокооплачиваемые вакансии июня в области разработки приложений
• Бесплатный курс по основам Continuous Delivery
• Вероятно Twitter заDDOSил сам себя
•
![](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/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• Как Duolingo подталкивает пользователей к premium — 5 уроков крупнейшего образовательного приложения
• Threads запустился в App Store и Google Play
• Spotify окончательно отказался от покупок через App Store
• Клуб миллионеров в App Store — 503 приложения зарабатывает $1 млн или больше
• Как отличить хорошего аналитика от плохого?
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Kaggle — практическое изучение Big Data. Что это за платформа, и как она работает
• Generative AI. Как программистам держать нос по ветру
• Device Twins и подвеска автомобиля: найдите 10 совпадений + Digital Twins и Device Twins: в чем разница и что общего?
• ChatGPT использовали для рассказов эротических историй
• OpenAI объявляет о всеобщей доступности API GPT-4
• Бесплатный курс по Natural Language Processing (NLP) от The Hugging Face
• $2 млн: RoboDeck — робот для обслуживания веранд и палуб
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.