Мобильная разработка за неделю #540 (27 мая — 2 июня)

В новом дайджесте разбираем основы iOS-разработки в Revolut и оцениваем финалистов Apple Design Award 2024, обновляем адаптивные макеты на примерах с I/O и продолжаем ставить на Flutter, тираним пользовательские интерфейсы, катим MobAIle-разработку, делаем кондиционер умным и многое другое. Подключайтесь!

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

ahrjiwdakwgxmzry6hrwza9dttu.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Как сделать мобильные приложения, которые приносят $3,000 в день
• Основы iOS-разработки в Revolut
• Разбираемся с типографикой в visionOS
• Стэнфордский курс CS193P «Разработка iOS приложений в SwiftUI» Весна 2023: русскоязычный конспект с адаптацией к iOS 17
• SwiftUI уроки (часть 13)
• Pедактор цен для iOS подписок
• Поваренная книга SwiftUI: изображения и иконки — Часть 2
• Как писать игры на Swift для Playdate
• Мок-собеседование iOS-разработчика. SwiftUI (+ все собеседования)
• Макросы Swift: проще, чище, быстрее
• Мы решили все проблемы работы в модульном проекте. Хотите так же?
• Siri получит обширные знания для запуска отдельных функций приложений
• Финалисты Apple Design Award 2024
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow Do You Know Whether or Not SwiftUI Previews and Preview Content Are Excluded From App Store Builds?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTricking iOS Into Animating App Icons
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThis is what peak UIKit looks like
• 377ae0333d0f4b7b97307c9eea5ee21a.gifYour Complete Guide to Push Notifications in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to build segmented circular progress views in SwiftUI with Swift Charts
• 377ae0333d0f4b7b97307c9eea5ee21a.gifApple rich text fundamentals
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to create custom @Environment values in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSlowly migrating from Objective-C to Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gif@preconcurrency usage in Swift explained
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSave Data in Your Swift App with PropertyListEncoder
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSelective Unit Testing on iOS: Achieve %80 Faster Feedback
• 377ae0333d0f4b7b97307c9eea5ee21a.gifObservation Framework for SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifA Guide to High-Performance Networking
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFlip Clock Text Effect — SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngExpandable Search Bar using SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHacker Text Effect using SwiftUI
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSpotlight your app with App Shortcuts
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngUpdate Live Activities with push notifications
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngDiscover Calendar and EventKit
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCreate a great ShazamKit experience
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to cache the result of API calls (using NSCache)
• 96716bcb926741e79bb1c284a88083ca.pngSword — инъекция зависимостей во время компиляции
• 96716bcb926741e79bb1c284a88083ca.pngDeskPad — виртуальный монитор для шаринга экрана

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Обновления в адаптивных макетах Compose с I/O
• Разработка новостного приложения. Часть 7. Загрузка в Google Play
• Разработка новостного приложения. Часть 6. Что я сделал не так
• Оптимизация Compose: проблемы, опыт, тактика, стратегия
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGoogle Bets on Kotlin Multiplatform: Koin Leads for Android & KMP
• 377ae0333d0f4b7b97307c9eea5ee21a.gifInjecting Composables with Dagger without losing it
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCaching Strategies in Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlinConf 2024 announcements
• 377ae0333d0f4b7b97307c9eea5ee21a.gifChange App Theme — Personalizing Accessibility
• 377ae0333d0f4b7b97307c9eea5ee21a.gifA Developer«s Roadmap to Predictive Back (Views)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifApp Architecture: JUnit Tests
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCompose UI Test and Preview Hacks!
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Mobile Monorepo
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAnnoying problems with Android projects
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe on-device Vector Database for Android and Java
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSecuring the Future: Navigating the Deprecation of Encrypted Shared Preferences
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMy Story of Getting Scammed and Losing My Google Play Console Account
• 377ae0333d0f4b7b97307c9eea5ee21a.gif7 Android Studio Usage Tips
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCrafting Custom 3D Dialog Animation in Jetpack Compose
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngNow in Android: 105 — I/O »24, Android 15, KMP, Compose, AndroidX, and more
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngList + Detail Screens Just Got SO MUCH Easier — NavigableListDetailPaneScaffold
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngBuilding an Android Video Calling App With the Stream SDK
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMastering Feature Flags: Best Practices with Firebase Remote Config
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThe Essence of Coroutines
• 96716bcb926741e79bb1c284a88083ca.pngBlueprint — размеры Composable
• 96716bcb926741e79bb1c284a88083ca.pngCompose Guard — плагин Gradle для обнаружения регрессий в Jetpack Compose

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

• Почему я продолжаю ставить на Flutter
• Firebase Analytics в KMP: Android, iOS, Desktop (MacOS, Windows)
• 5 лет с Flutter: эволюция кроссплатформенности
• Flutter-диета. Как сбросить вес, выпиливая модули
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMigrating UI-oriented Android library to Compose Multiplatform
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe rollercoaster of releasing an Android, iOS, and macOS app with Kotlin Multiplatform
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow BigPay Increased Flutter Developer Velocity
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThese New Flutter/Dart Features Make My Life Easier
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFrom SQLDelight to Room in Kotlin Multiplatform Projects
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding multiplatform games with Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBringing Together: Jetpack Compose and Native iOS Components
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCan a backend engineer learn Flutter with AI?

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

• Непроизвольная тирания пользовательских интерфейсов
• Куда катится MobAIle-разработка
• Как понять, что пора выпускать новое приложение вместо старого? Разбираем со стороны бизнеса
• Редизайн сервиса «Обмен валюты» в мобильном приложении ОТП Банка
• Профиль защиты ЦБ РФ и мобильные приложения: разбираемся, как соответствовать
• Mobius 2024 offline. День первый
• Прокачиваем Code Review: как выжать максимум?
• Пишем нативно под Аврора ОС как под iOS: Clean-архитектура, Coordinator и UDF
• Маргарита Лукина про Frontend, высшее образование, софт-скиллы и женщин в IT
• Observability, Profiling и Benchmarking как основа High Performance
• Три закона сложности программного обеспечения (или почему инженеры-программисты всегда грустные)
• В каком возрасте программисты создают новые языки?
• ChatGPT на вопросы по программированию дает 52% неправильных ответов
• Codestral — первая генеративная модель Mistral для кода
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWriting a Unix clone in about a month
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMobileLlama3: Run Llama3 locally on mobile
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBig Data is Dead
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIndexing all of Wikipedia, on a laptop
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAI-Friendly Programming Languages: the Kotlin Story
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDon«t DRY Your Code Prematurely
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLinear Algebra Course — Mathematics for Machine Learning and Generative AI
• 96716bcb926741e79bb1c284a88083ca.pngOpenpanel — альтернатива Mixpanel с открытым исходным кодом

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

• Как оценить валидность A/B тестов. SRM и другие критерии
• Приложение Autobiographer использует ИИ, чтобы помочь вам рассказать историю своей жизни
• Supercell выпустила свою шестую игру — Squad Busters
• Мини-игры Playables стали доступны всем пользователям YouTube
• Алгоритмы, модели и пицца: как с помощью programmatic-рекламы эффективно привлекать и возвращать пользователей. Кейс «Додо Пиццы» и Bidease
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngWhy Duolingo«s Engagement Strategy Won«t Work For Every App — Asya Paloni, Welltory

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

• Делаем кондиционер умным с помощью Elixir и Nerves
• Обзор новых Open Source LLM. Или как локально запустить аналог ChatGPT
• Стеллажная система на 480 ярусов: как автоматизировать выращивание растений и не сойти с ума
• Запускаем .NET на RISC-V и разрабатываем IoT приложение для Sipeed Lichee RV
• Kincony KC868-A256:, а ты готов к настоящему хоккею?
• Новый контроллер, облако, выключатели, DALI-шлюз и датчики присутствия от Wiren Board
• Как мы обуздали ПОТОК данных со сварочных аппаратов
• Проект хаба для «умного дома» с BLE-устройствами
• Avito Product meetup: ML-продукты
• Fitbit выпустил Ace LTE — умные часы/трекер для детей
• ИИ-репетиторы незаметно меняют подход к обучению детей

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

© Habrahabr.ru