В нашей новой подборке отслеживание изменений в SwiftUI и тысяча проблем App Clip, Kotlin под капотом и простая архитектура, OpenStreetMap в Flutter, 18 лет работы в Google, мышление Platform Engineer, приложением №1 в App Store, которое не обновлялись уже 7 лет и многое другое!
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

iOS
• Отладка представлений SwiftUI: что вызывает изменения?
• ChatGPT-4 в помощь: используем AI в доработке простого iOS-приложения
• App Clip и тысяча проблем
• Строки в Swift выглядят одинаково, но не являются таковыми?
• Swift-уроки: Actor
• Что можно и что нельзя делать с Async/Await
• Как получить международный оффер iOS-разработчику
• Вопросы с собеседований: что такое Семафор в Swift
• Выпуск Apple Vision Pro состоится «где-то в марте»
• Поваренная книга SwiftUI: настройка прозрачности
•
Distributing Work Between Actors
•
Swift strings look identical but aren’t
•
How to migrate to a new schema with SwiftData in iOS
•
Ensuring App UI Correctness Using Snapshot Tests
•
The alternative to SwiftUI’s Spacer
•
Animating numeric text in SwiftUI with the Content Transition modifier
•
Typealias in Swift: 3 use cases
•
Destroy dependency injection in Swift
•
Deploy CoreML Models on the Server with Vapor
•
enum Guru: Swift enum in depth
•
Using Observation framework outside of SwiftUI
•
Scoped animations in SwiftUI
•
SwiftUI SplitView Compact Column Control
•
Reference types and Retain cycles (Weak vs. Unowned)
•
Swift UITableView Prefetching: A Guide to Smoother Scrolling
•
Our developer account was removed by Apple, and they haven’t paid out $108,878
•
Conquering the Climbing Stairs Challenge with Swift: A Dynamic Programming Approach
•
From Concept to App Store: The Making of MuayThaiJournal
•
Replacing your logging framework with OSLog
•
Automatic Component Sizing — SwiftUI for iOS 17
•
Simple Drop Down Picker – SwiftUI
•
SwiftUI: New Observation Framework
•
SwiftUI Tooltips with TipKit (Popover & Inline Tips)
•
8 Tips to Design a Great Paywall
•
SwiftData Lightweight Migrations
•
Swipe Actions For ScrollView — No Gestures! — iOS 17 Scroll APIs
•
How to Make a Color Picker with ScrollView, Scroll Position and Visual Effects
•
Kingfisher: загрузка и кеширование изображений
•
AcknowList: список лицензий
Android
• Kotlin под капотом: нюансы использования аннотаций
• Пишем Kotlin DSL для графов навигации в домашних условиях
• Новые API для адаптивных макетов в Jetpack Compose
• API vs ABI: разницу видят не только лишь все
• Простая архитектура с использованием MVVM и делегатов в Android. Оптимальное решение для малых проектов
• Статический анализатор Ktlint для Kotlin в Android
• Как устроен Android в умных колонках Яндекса
• Топ-10 вопросов для Senior Android: собеседование с разбором ответов и материалами
• Где остановится Kotlin: язык поставил новый рекорд в индексе TIOBE
•
Making my concurrent algorithm 6000% better
•
Jetpack Compose + Material Components for Android TV: Cards
•
Not all UI tests are the same
•
Exercises in futility: One-time events in Android
•
Java Memory Leaks: Detection and Prevention
•
Making TDD a Habit in Android Development
•
How to Add Content Descriptions in Compose
•
Migration from Kapt to KSP
•
ViewModel: Events as State are an Antipattern
•
Top 10 Android Memory Leak Causes
•
Mastering Camera2 API in Kotlin: A Comprehensive Guide with Examples
•
Mastering Kotlin’s Invoke Operator: Simplifying Code and Enhancing Readability
•
Law of Demeter with examples in Kotlin
•
In-App Update in Android 2023
•
Build Video Calling for Your Android WhatsApp Clone With Jetpack Compose
•
How to Create an Animated Splash Screen for Android: A Step-by-Step Guide
•
droidcon London 2023 Videos
•
How to Migrate an Android Project to Kotlin Multiplatform (KMP)
•
Firebase Demo Day Recap, Flutter 3.16, and more dev news!
•
A Team of 20 to Publish an App?! — THIS New Google Play Policy Change is CRAZY
•
Custom Savers
•
Circuit – Android App Architecture Masterclass with Zac and Josh from Slack
•
Reorderable: таскание элементов в (Lazy)Column и (Lazy)Row
•
Exposed: SQL-фреймворк для Kotlin
•
Capturable: получение Bitmap из Composable
Кроссплатформа
• Как мы отказались от styled-components в React Native приложениях
• OpenStreetMap в Flutter-проекте: что такое flutter_map, как его внедрить и чем дополнить
• Как добавить Flutter в нативное приложение iOS и протестировать его на Codemagic: Часть 2 + Часть 1
• Flutter 3.16: обзор обновления фреймворка с комментариями разработчиков Surf
•
Forbes Mobile App Shifts To Kotlin Multiplatform
•
The new lint in Dart 3.2
•
Major steps this year on the journey to multiplatform development
•
Top 12 Flutter Open source projects
•
Flutter Interview Questions and Answers: Top 30 for Pros!
•
Flutter Networking Tutorial: Getting Started
•
Memory Management in Flutter: Best Practices and Pitfalls
•
Utilizing JS Library for Flutter Web
•
Native UI Components in React
•
Our journey from React Native to Expo for mobile app development at Alan
•
The State of Kotlin Multiplatform
•
Getting Started With KMP: Build Apps for iOS and Android With Shared Logic and Native UIs
•
Build Apps for iOS, Android, and Desktop With Compose Multiplatform
•
Flutter Responsive UI: Crafting Dynamic Layouts for Every Device
Разработка
• Размышления о 18 годах работы в Google
• Как Spotify отслеживает размеры приложений
• Система аутентификации: сделай сам vs возьми готовое
• Мыслим как Platform Engineer
• Не нужно блокировать кнопки
• Лев Толстой о мобильной разработке: Искусство написания приложений
• Непрерывное тестирование: разработка выигрышной стратегии тестирования
• Tracer — альтернатива Crashlytics: другой взгляд на аналитику ошибок в приложениях
• Как качать миллионы фотографий в сутки, выдержать кратный рост и не умереть?
• Насколько реален российский айфон: разговор с Максимом Горшениным.
• Podlodka #347: развитие продукта от 0 до 1
• Исследование The State of Developer Ecosystem 2023 от JetBrains
• Magic Research: соло-разработчик заработал более $150,000, сделав всего 2 сообщения на Reddit
• GameMaker отменил подписку для инди-разработчиков
• Прежде чем пытаться что-то сделать, убедитесь, что вы можете сделать то, что ничего не делает
• Умный код — это, вероятно, худший код, который вы можете написать
•
Goodbye, Clean Code
•
How DoorDash Standardized and Improved Microservices Caching
•
The Architecture Of Serverless Data Systems
•
It’s OK if your code is just good enough
Аналитика, маркетинг и монетизация
• Что такое метрика ага-момента и как ее найти
• Проектирование экономики F2P игр на основе продуктовых метрик
• Компания Sunbird закрыла свое приложение для обмена сообщениями с iMessage
• Секретная сделка Google позволила Spotify полностью обойти плату за пользование Google Play
• Аудитория RuStore достигла 22.5 миллиона пользователей в месяц
• Rooms, интерактивный 3D-конструктор и просто «уютная игра», появился в App Store
• В App Store приложением №1 стали раскраски, которые не обновлялись уже 7 лет
• Good games don’t die – Can legacy titles save the mobile game industry?
• Mastering SKAN 4: The essentials for iOS success
AI, Устройства, IoT
• Чем заменить Raspberry PI в промышленности?
• KC868-AM: мини мы или ESP32 IO Expansion Board
• Опубликован курс «Генеративный ИИ для начинающих» от Microsoft
•
Machine Learning with Python and Scikit-Learn – Full Course
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.


• Отладка представлений SwiftUI: что вызывает изменения?
• ChatGPT-4 в помощь: используем AI в доработке простого iOS-приложения
• App Clip и тысяча проблем
• Строки в Swift выглядят одинаково, но не являются таковыми?
• Swift-уроки: Actor
• Что можно и что нельзя делать с Async/Await
• Как получить международный оффер iOS-разработчику
• Вопросы с собеседований: что такое Семафор в Swift
• Выпуск Apple Vision Pro состоится «где-то в марте»
• Поваренная книга SwiftUI: настройка прозрачности
•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•


• Kotlin под капотом: нюансы использования аннотаций
• Пишем Kotlin DSL для графов навигации в домашних условиях
• Новые API для адаптивных макетов в Jetpack Compose
• API vs ABI: разницу видят не только лишь все
• Простая архитектура с использованием MVVM и делегатов в Android. Оптимальное решение для малых проектов
• Статический анализатор Ktlint для Kotlin в Android
• Как устроен Android в умных колонках Яндекса
• Топ-10 вопросов для Senior Android: собеседование с разбором ответов и материалами
• Где остановится Kotlin: язык поставил новый рекорд в индексе TIOBE
•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•

•


• Как мы отказались от styled-components в React Native приложениях
• OpenStreetMap в Flutter-проекте: что такое flutter_map, как его внедрить и чем дополнить
• Как добавить Flutter в нативное приложение iOS и протестировать его на Codemagic: Часть 2 + Часть 1
• Flutter 3.16: обзор обновления фреймворка с комментариями разработчиков Surf
•

•

•

•

•

•

•

•

•

•

•

•

•

•


• Размышления о 18 годах работы в Google
• Как Spotify отслеживает размеры приложений
• Система аутентификации: сделай сам vs возьми готовое
• Мыслим как Platform Engineer
• Не нужно блокировать кнопки
• Лев Толстой о мобильной разработке: Искусство написания приложений
• Непрерывное тестирование: разработка выигрышной стратегии тестирования
• Tracer — альтернатива Crashlytics: другой взгляд на аналитику ошибок в приложениях
• Как качать миллионы фотографий в сутки, выдержать кратный рост и не умереть?
• Насколько реален российский айфон: разговор с Максимом Горшениным.
• Podlodka #347: развитие продукта от 0 до 1
• Исследование The State of Developer Ecosystem 2023 от JetBrains
• Magic Research: соло-разработчик заработал более $150,000, сделав всего 2 сообщения на Reddit
• GameMaker отменил подписку для инди-разработчиков
• Прежде чем пытаться что-то сделать, убедитесь, что вы можете сделать то, что ничего не делает
• Умный код — это, вероятно, худший код, который вы можете написать
•

•

•

•


• Что такое метрика ага-момента и как ее найти
• Проектирование экономики F2P игр на основе продуктовых метрик
• Компания Sunbird закрыла свое приложение для обмена сообщениями с iMessage
• Секретная сделка Google позволила Spotify полностью обойти плату за пользование Google Play
• Аудитория RuStore достигла 22.5 миллиона пользователей в месяц
• Rooms, интерактивный 3D-конструктор и просто «уютная игра», появился в App Store
• В App Store приложением №1 стали раскраски, которые не обновлялись уже 7 лет
• Good games don’t die – Can legacy titles save the mobile game industry?
• Mastering SKAN 4: The essentials for iOS success

• Чем заменить Raspberry PI в промышленности?
• KC868-AM: мини мы или ESP32 IO Expansion Board
• Опубликован курс «Генеративный ИИ для начинающих» от Microsoft
•

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