В новом дайджесте разбираем основы iOS-разработки в Revolut и оцениваем финалистов Apple Design Award 2024, обновляем адаптивные макеты на примерах с I/O и продолжаем ставить на Flutter, тираним пользовательские интерфейсы, катим MobAIle-разработку, делаем кондиционер умным и многое другое. Подключайтесь!
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/ah/rj/iw/ahrjiwdakwgxmzry6hrwza9dttu.png)
iOS
• Как сделать мобильные приложения, которые приносят $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
•
How Do You Know Whether or Not SwiftUI Previews and Preview Content Are Excluded From App Store Builds?
•
Tricking iOS Into Animating App Icons
•
This is what peak UIKit looks like
•
Your Complete Guide to Push Notifications in SwiftUI
•
How to build segmented circular progress views in SwiftUI with Swift Charts
•
Apple rich text fundamentals
•
How to create custom @Environment values in SwiftUI
•
Slowly migrating from Objective-C to Swift
•
@preconcurrency usage in Swift explained
•
Save Data in Your Swift App with PropertyListEncoder
•
Selective Unit Testing on iOS: Achieve %80 Faster Feedback
•
Observation Framework for SwiftUI
•
A Guide to High-Performance Networking
•
Flip Clock Text Effect — SwiftUI
•
Expandable Search Bar using SwiftUI
•
Hacker Text Effect using SwiftUI
•
Spotlight your app with App Shortcuts
•
Update Live Activities with push notifications
•
Discover Calendar and EventKit
•
Create a great ShazamKit experience
•
How to cache the result of API calls (using NSCache)
•
Sword — инъекция зависимостей во время компиляции
•
DeskPad — виртуальный монитор для шаринга экрана
Android
• Обновления в адаптивных макетах Compose с I/O
• Разработка новостного приложения. Часть 7. Загрузка в Google Play
• Разработка новостного приложения. Часть 6. Что я сделал не так
• Оптимизация Compose: проблемы, опыт, тактика, стратегия
•
Google Bets on Kotlin Multiplatform: Koin Leads for Android & KMP
•
Injecting Composables with Dagger without losing it
•
Caching Strategies in Android
•
KotlinConf 2024 announcements
•
Change App Theme — Personalizing Accessibility
•
A Developer’s Roadmap to Predictive Back (Views)
•
App Architecture: JUnit Tests
•
Compose UI Test and Preview Hacks!
•
Kotlin Mobile Monorepo
•
Annoying problems with Android projects
•
The on-device Vector Database for Android and Java
•
Securing the Future: Navigating the Deprecation of Encrypted Shared Preferences
•
My Story of Getting Scammed and Losing My Google Play Console Account
•
7 Android Studio Usage Tips
•
Crafting Custom 3D Dialog Animation in Jetpack Compose
•
Now in Android: 105 — I/O ‘24, Android 15, KMP, Compose, AndroidX, and more
•
List + Detail Screens Just Got SO MUCH Easier — NavigableListDetailPaneScaffold
•
Building an Android Video Calling App With the Stream SDK
•
Mastering Feature Flags: Best Practices with Firebase Remote Config
•
The Essence of Coroutines
•
Blueprint — размеры Composable
•
Compose Guard — плагин Gradle для обнаружения регрессий в Jetpack Compose
Кроссплатформа
• Почему я продолжаю ставить на Flutter
• Firebase Analytics в KMP: Android, iOS, Desktop (MacOS, Windows)
• 5 лет с Flutter: эволюция кроссплатформенности
• Flutter-диета. Как сбросить вес, выпиливая модули
•
Migrating UI-oriented Android library to Compose Multiplatform
•
The rollercoaster of releasing an Android, iOS, and macOS app with Kotlin Multiplatform
•
How BigPay Increased Flutter Developer Velocity
•
These New Flutter/Dart Features Make My Life Easier
•
From SQLDelight to Room in Kotlin Multiplatform Projects
•
Building multiplatform games with Flutter
•
Bringing Together: Jetpack Compose and Native iOS Components
•
Can a backend engineer learn Flutter with AI?
Разработка
• Непроизвольная тирания пользовательских интерфейсов
• Куда катится MobAIle-разработка
• Как понять, что пора выпускать новое приложение вместо старого? Разбираем со стороны бизнеса
• Редизайн сервиса «Обмен валюты» в мобильном приложении ОТП Банка
• Профиль защиты ЦБ РФ и мобильные приложения: разбираемся, как соответствовать
• Mobius 2024 offline. День первый
• Прокачиваем Code Review: как выжать максимум?
• Пишем нативно под Аврора ОС как под iOS: Clean-архитектура, Coordinator и UDF
• Маргарита Лукина про Frontend, высшее образование, софт-скиллы и женщин в IT
• Observability, Profiling и Benchmarking как основа High Performance
• Три закона сложности программного обеспечения (или почему инженеры-программисты всегда грустные)
• В каком возрасте программисты создают новые языки?
• ChatGPT на вопросы по программированию дает 52% неправильных ответов
• Codestral — первая генеративная модель Mistral для кода
•
Writing a Unix clone in about a month
•
MobileLlama3: Run Llama3 locally on mobile
•
Big Data is Dead
•
Indexing all of Wikipedia, on a laptop
•
AI-Friendly Programming Languages: the Kotlin Story
•
Don’t DRY Your Code Prematurely
•
Linear Algebra Course – Mathematics for Machine Learning and Generative AI
•
Openpanel — альтернатива Mixpanel с открытым исходным кодом
Аналитика, маркетинг и монетизация
• Как оценить валидность A/B тестов. SRM и другие критерии
• Приложение Autobiographer использует ИИ, чтобы помочь вам рассказать историю своей жизни
• Supercell выпустила свою шестую игру — Squad Busters
• Мини-игры Playables стали доступны всем пользователям YouTube
• Алгоритмы, модели и пицца: как с помощью programmatic-рекламы эффективно привлекать и возвращать пользователей. Кейс «Додо Пиццы» и Bidease
•
Why Duolingo’s Engagement Strategy Won’t Work For Every App — Asya Paloni, Welltory
AI, Устройства, 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 — умные часы/трекер для детей
• ИИ-репетиторы незаметно меняют подход к обучению детей
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/ah/rj/iw/ahrjiwdakwgxmzry6hrwza9dttu.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• Как сделать мобильные приложения, которые приносят $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
•
![](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/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/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/getpro/habr/post_images/e1a/3cf/2a8/e1a3cf2a8b65a0da69bbdd5c0ad040fe.png)
• Обновления в адаптивных макетах Compose с I/O
• Разработка новостного приложения. Часть 7. Загрузка в Google Play
• Разработка новостного приложения. Часть 6. Что я сделал не так
• Оптимизация Compose: проблемы, опыт, тактика, стратегия
•
![](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/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
• Firebase Analytics в KMP: Android, iOS, Desktop (MacOS, Windows)
• 5 лет с Flutter: эволюция кроссплатформенности
• 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/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)
• Непроизвольная тирания пользовательских интерфейсов
• Куда катится MobAIle-разработка
• Как понять, что пора выпускать новое приложение вместо старого? Разбираем со стороны бизнеса
• Редизайн сервиса «Обмен валюты» в мобильном приложении ОТП Банка
• Профиль защиты ЦБ РФ и мобильные приложения: разбираемся, как соответствовать
• Mobius 2024 offline. День первый
• Прокачиваем Code Review: как выжать максимум?
• Пишем нативно под Аврора ОС как под iOS: Clean-архитектура, Coordinator и UDF
• Маргарита Лукина про Frontend, высшее образование, софт-скиллы и женщин в IT
• Observability, Profiling и Benchmarking как основа High Performance
• Три закона сложности программного обеспечения (или почему инженеры-программисты всегда грустные)
• В каком возрасте программисты создают новые языки?
• ChatGPT на вопросы по программированию дает 52% неправильных ответов
• Codestral — первая генеративная модель Mistral для кода
•
![](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/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• Как оценить валидность A/B тестов. SRM и другие критерии
• Приложение Autobiographer использует ИИ, чтобы помочь вам рассказать историю своей жизни
• Supercell выпустила свою шестую игру — Squad Busters
• Мини-игры Playables стали доступны всем пользователям YouTube
• Алгоритмы, модели и пицца: как с помощью programmatic-рекламы эффективно привлекать и возвращать пользователей. Кейс «Додо Пиццы» и Bidease
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Делаем кондиционер умным с помощью 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 — умные часы/трекер для детей
• ИИ-репетиторы незаметно меняют подход к обучению детей
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.