Темы



Мобильная разработка за неделю #546 (8 — 14 июля)

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

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

2dnvoekpnycoza5hsdjeqyptl7m.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Расширяем возможности мобильного приложения на WebView. Опыт Ozon Банк
• Постепенный перенос проектов и пакетов на Swift 6
• Пишем виджет в Control Center (iOS 18)
• Изучаем новые структуры данных для iOS разработчика
• Куб для ваших сторис*
• Что нового в Swift 6?
• По оценкам IDC, в 2024 году Apple продаст менее 500 тысяч устройств Vision Pro
• Как работает AdAttributionKit
• Поваренная книга SwiftUI: кнопки — Часть 1
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Animatable and AnimatablePair in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI can be a bit… eager
• 377ae0333d0f4b7b97307c9eea5ee21a.gifZoom transitions
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBackpressure in Combine
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding a custom application UI with SwiftUI & iOS 18 API
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding the inverted scroll of a messaging app
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMobile Deployment Pipelines for $0
• 377ae0333d0f4b7b97307c9eea5ee21a.gif5 Strategies for Managing Image Resources Effectively in iOS
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAutomating pre-production iOS app builds
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRunning a package from Xcode Build phase
• 377ae0333d0f4b7b97307c9eea5ee21a.gifXCUITest (iOS) Automation with POM Techniques
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWrite Clean and Maintainable XCUITests with Screen Chaining
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAI features in Xcode 16: is it good?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCheck if your app has a newer version on the App Store using Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStreamlining Menu Browsing with OCR Text Recognition
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUtilizing Apple«s oslog for Enhanced Logging in Xcode
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngZoom Transitions — SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAI Features in Xcode 16: is it Good or Bad?
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLaying out views with ContainerRelativeFrame in SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAnimated Scroll Wheel Picker — SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngRemoving More Button from Tab bar — SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCreate Interactive In-App Polls With SwiftUI
• 96716bcb926741e79bb1c284a88083ca.pngStreamUI — генерация видео в SwiftUI
• 96716bcb926741e79bb1c284a88083ca.pngDSFDropFilesView — NSView для drag-and-drop файлов

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Развенчиваем 6 мифов про современную Android-разработку
• Kotlin Coroutines под капотом
• Strong Skipping Mode — новый способ оптимизации стабильности в Jetpack Compose
• Создавай и упрощай: оптимизируем Android-приложение с видеоконтентом
• Видео с прозрачностью на Jetpack Compose — запросто
• Как обойти множественное наследование в Kotlin и Java. Агрегация и композиция
• 377ae0333d0f4b7b97307c9eea5ee21a.gifArchitecture related decisions in Android — Error handling and Monads
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin«s @Keep Annotation: Keeping Your Code Safe and Sound
• 377ae0333d0f4b7b97307c9eea5ee21a.gifLet«s clarify some misconceptions around android development these days
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDeclarative Gradle
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTop 5 Android Studio Plugins
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWhich Map Transformation Should I Use?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Builder Inference Explained
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRxJava to Kotlin Coroutines: The Ultimate Migration Guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Configure Android Build System?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Code Reuse: Composing like you«re Inheriting
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid MVVM Architecture for A Production Ready App
• 377ae0333d0f4b7b97307c9eea5ee21a.gifLeveraging BFF and Dynamic UI in Android Applications with Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSafe your API Keys via Secrets Gradle plugin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTicket UI Using compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifImproving Perceived Performance with Delayed Visibility
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFrom Zero to Billions: Building a High-Performance Kotlin App in Two Months
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThe Top 5 Practices That Make My Android Architecture More Scalable
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngGenerating Kotlin SDKs with Smithy
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngKotlin/Native BigDecimal: A drop-in replacement for java.math.BigDecimal
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngK2: How to Make a Better Compiler but Keep Kotlin the Same
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngIt«s Compose O«Clock, Draw on My Watch!
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCrashlytics for your Android apps
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngKotlin Code Reuse: Composing like you«re Inheriting
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngExploring Material3 Adaptive Layout
• 96716bcb926741e79bb1c284a88083ca.pngValkyrie — генерация Compose ImageVector из SVG/XML
• 96716bcb926741e79bb1c284a88083ca.pngFig — Google Таблицы в качестве удаленного конфига

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

• Первый взгляд на переход с Xamarin Native на Flutter
• Как мы переходили с Xamarin на Flutter
• Rive-анимация для Flutter-приложений: почему мы любим ее больше Lottie, когда ее применять и какие фишки использовать
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Date and Time Management in iOS with Kotlinx DateTime: A Step-by-Step Guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuild Android and iOS apps with SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGoogle Pay Integration in Flutter App
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCodemagic setup with flavors. Flutter CI/CD
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHTTP Requests in Kotlin Multiplatform With Ktor — KMP for Beginners
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCompose Multiplatform performance on iOS
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCode push for Flutter
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngRewriting freezed with Macros
• 96716bcb926741e79bb1c284a88083ca.pngFlowMVI — архитектурный фреймворк Kotlin Multiplatform на основе корутинов
• 96716bcb926741e79bb1c284a88083ca.pngColors AI — генератор цветовых схем с ИИ на Flutter

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

• Новый опрос Developer Nation
• Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году?
• Важные вещи в программировании 2024
• Моё тестовое в Билайн на позицию стажёра
• РКН по ошибке снес безобидное приложение в AppStore, на волне последних чисток
• 5 советов по разработке игр от соло-разработчика
• System Design-интервью для практиков
• 10 тупых вопросов на собеседовании (и как на них отвечать) + все собеседования
• Локальная разработка в Авито
• Rust и Kotlin растут в TIOBE Index
• ChatGPT хорошо программирует в задачах, существовавших до 2021 года, но испытывает трудности с новыми
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding and scaling Notion«s data lake
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMobileLLM — Language Models for On-Device Use Cases
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to set priorities?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWeird things I learned while writing an x86 emulator
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAI on Mac Made Easy: How to run LLMs locally with OLLAMA in Swift/SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLearn TypeScript — Full Course for Beginners

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

• Sekai получил лицензию на «Наруто» для разработки приложений для фанатов аниме
• 76% приложений и сайтов с подпиской использует темные паттерны
• Приложение для арт-терапии Scribble Journey позволяет выразить эмоции с помощью зарисовок
• Самые скачиваемые и зарабатывающие приложения в России в июне 2024
• Apple «временно» одобрила Epic Games Store, но потребовала изменений
• Pokemon Go: история революции в дополненной реальности
• Lamoda Tech Analytics Party: материалы встречи
• Wayther — приложение с прогнозом погоды, разработанное специально для автопутешествий
• Карты Google на iOS начали показывать спидометр (через 5 лет после Android)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to improve funnel conversion
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow apps can innovate

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

• Обзор нейросетей для создания иллюстраций и артов
• Как жить в загородной бане, пока строится умный дом
• Как выбрать контроллер для DIY (сводная таблица по 30++ моделям с комментариями)
• Сравниваем новые чипы Qualcomm с процессорами Apple, Intel и AMD

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

© Habrahabr.ru