Мобильная разработка за неделю #535 (15 — 21 апреля)

В нашей новой еженедельной подборке чистая архитектура и MVVM в iOS, закан RxJava и критических оповещений на Android, опыт внедрения компонентной разработки, смартфон для джаваскриптера-олдфага, практическое руководство по запросу отзывов и многое другое. Подключайтесь!

Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

occkukuq13qh49v3egsfvsrt3ns.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• О, вы из Англии? Локализация Ozon Seller на iOS
• Как быстро сделать файл PrivacyInfo.xcprivacy для вашего iOS-приложения
• Reflection в iOS: как посмотреть содержимое любой сущности
• Clean architecture и MVVM в iOS разработке
• SwiftUI уроки (часть 9)
• Импортирование картинок и звуков в Swift Package
• А так ли нужна Swift Modern Concurrency?
• Мгновенный фидбэк: как оперативно получать отзывы о приложении в App Store
• AltStore PAL заработал на iOS в Европе
• Apple в ЕС запускает загрузку приложений через веб-сайты
• Apple объяснила удаление первого эмулятора Game Boy из App Store
• Поваренная книга SwiftUI: изображения и иконки — Часть 1
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCreating Shapes from SVG in a SwiftUI app
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCustom Toggle Styling in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSplitting Up a Monolith: From 1 to 25 Swift Packages
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift 6 upgrade Preparation
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFetching OSLog Messages in Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBar Chart creation using Swift Charts
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGetting started with Benchmark package
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDefining Custom Errors With Advanced Descriptions In Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to do pagination in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCommon Mistakes to Avoid When Using Enums in Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIs Dynamic Isolation Bad?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to use experimental Swift versions and features in Xcode?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCountryKit: the framework Apple forgot to build
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngYour guide to Metal ray tracing
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngIntegrate Screen-Sharing Into a SwiftUI App
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI Custom Transitions
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuilding Netflix UI Animations
• 96716bcb926741e79bb1c284a88083ca.pngGradiente — простые градиенты
• 96716bcb926741e79bb1c284a88083ca.pngFontBlaster — программная загрузка шрифтов

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• RxJava — всё?
• Реализация Критических оповещений на Android
• Kodein DI для Android. Целостность графа и тесты на DI
• Генерируем отчеты PDF на Android с использованием HTML и WebView в фоне
• Устройство Android Music SDK или как мы встроили музыку в суперапп-приложение
• Интеграция MediaPipe в Android-приложение видеоконференцсвязи
• Google объединяет команды Android и аппаратного обеспечения ради скорости и искусственного интеллекта
• Android 15 может получить возможность помещать приложения в карантин
• В Android 15 может появиться NFC-зарядка
• Вопросы с собеседований: жизненный цикл View в Android
• Введение в Trio: часть 3
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEnhancing Jetpack Compose with Koin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFocus as a state — new effective Android TV focus management system with Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifJetpack Compose Navigation, Ktor, and Koin DI Unlocking MAD Skills
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSpeed Up Your Gradle Builds with the New Gradle Critical Path Analyzer
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKtor for Android Networking: Moving Beyond Retrofit
• 377ae0333d0f4b7b97307c9eea5ee21a.gifLearning about Android runtime
• 377ae0333d0f4b7b97307c9eea5ee21a.gifExtending Coil
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPlotting Financial Data in Kotlin with Kandy
• 377ae0333d0f4b7b97307c9eea5ee21a.gifNested LazyColumn in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIntroduction to Foundational Tools in Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSome Best-Practices for State Management in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDemystifying JNI: Boost Performance and Access Native Features
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCustom Navigation Drawer component with Jetpack Compose
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngNow in Android: 103 — Android 15 Beta, Gemini in Android Studio, Google Drive improvements, & more
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMVVM vs. MVI — Understand the Difference Once and for All
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThe ONLY Thing to MASTER as an Android Developer (And Why 99% FAIL!)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBoosting Bazel adoption on Android with automation
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngInline Functions: inline, crossinline, and noinline
• 96716bcb926741e79bb1c284a88083ca.pngDroid-ify — клиент F-Droid с материальным дизайном
• 96716bcb926741e79bb1c284a88083ca.pngKotlin Faker — генератор фейковых данных
• 96716bcb926741e79bb1c284a88083ca.pngPokedex Compose — современная Android-разработка

malx8hbgozt6lee8rmxmg96_s6a.pngКроссплатформа

• Где заканчивается Flutter и начинается платформа?
• 5 уроков после 5 лет разработки на Flutter
• Один репозиторий, чтобы править всеми
• Опыт внедрения компонентной разработки
• Рекуррентные платежи, или как мы доработали функционал платных подписок во Flutter приложении
• Разбираем генеративный SDK от Google — google_generative_ai. Часть 1
• 377ae0333d0f4b7b97307c9eea5ee21a.gifProactively Securing React Native Applications: Best Practices and Strategies
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter Consent Messages with Google Admob
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEfficiency Unleashed: The Power of Automation in Our Flutter Adventure
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Find Memory Leaks in Flutter Apps?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStop using Flutter, it will die, sooner than you think
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAdvanced Theming Techniques in Flutter: Leveraging Extensions for Dynamic UIs
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAccessibility in Flutter on the Web

7081c634ec176ab6b953d9d19e82a09a.pngРазработка

• Смартфон для джаваскриптера-олдфага: стоит ли гику брать дешманские девайсы на KaiOS? Смотрим на Nobby 240 LTE
• Инженерная культура BigTech: работа мечты или испытание на прочность?
• Как устроена мобильная разработка в Кинопоиске
• Пробить стеклянный потолок и стать сеньором
• ВКонтакте запустил бесплатный курс по разработке мини-приложений
• VK открывает набор на оплачиваемую летнюю стажировку
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to write a code formatter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPower of Blameless Culture in Software Engineering
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThere is always something: Fighting distractions as a software developer
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHealthy Documentation
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding Something Real in your spare time
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUsing server-side Swift for machine learning processing
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBasic Things

509dc9bde69347ecbe0c21ff2973d7e7.jpgАналитика, маркетинг и монетизация

• Как повысить рейтинг приложения: практическое руководство по запросу отзывов
• Новое приложение Indaband позволяет создавать музыку вместе с людьми по всему миру
• Топ быстрорастущих приложений в России в апреле
• Airchat — социальная сеть, построенная вокруг голоса

8538129f5e7b404a720121cb9c3814db.jpgAI, Устройства, IoT

• Как сделать умный офис на 300+ сотрудников? Свет, санузлы и душевые, переговорки и не только

← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.

© Habrahabr.ru