Как и обещали, возвращаемся после отпуска с новым дайджестом! В нем классные UI и много графиков, главная концепция Jetpack Compose и паттерны Dart проектирования, новый язык программирования Google, ловушки монетизации и многое другое!
Подключайтесь к нашему Telegram-каналу Mobile Insights, где подборки статей и новостей выходят каждый день.
![](https://habrastorage.org/r/w780q1/webt/cn/-a/ka/cn-aka-1so0kuqzsxjrqbnzc1aw.jpeg)
iOS
• OAuth в iOS
• Ошибка.log(): как логируются ошибки в мобильном приложении Авито
• С помощью API iOS 16 компания Apple закладывает основу для разработки смешанной реальности
• Навигация в Swift UI: что изменилось с появлением iOS 16
• Конфиденциальность iOS: Instagram* и Facebook* могут отслеживать всю вашу активность в браузере внутри приложения
• Создаем классный UI: iOS Shape Morphing
• SwiftUI. Есть ли жизнь без NavigationView или пару слов о координаторе
• Apple вернула процент заряда батареи
•
Security Application Static Analysis applied to iOS and Gitlab CI
•
How do 3D transforms of iOS views work under the hood?
•
Experimenting with Live Activities
•
Eager Grids with SwiftUI
•
Use Deep Links to Speed Up Your UI Tests
•
VIPER For SwiftUI? Please. No.
•
How we manage 200 Mac Minis for iOS CI at Agoda
•
iOS hardware accelerated 2D terrain visualisation in OzRunways
•
50+ SwiftUI Open Source Projects With Guided Tutorials
•
How Not to Go Crazy Writing iOS Asynchronous Code Using Various Frameworks
•
Create a Custom WeekView in SwiftUI
•
Creating a 3D Tic-Tac-Toe in SceneKit Under SwiftUI
•
Swift — Tricky Interview Question
•
How to get started with Voice Over on iOS
•
Hot Reloading a SceneDelegate in Swift
•
What’s New in MapKit for iOS 16?
•
I Roasted My First iOS Apps’ Source Code and Refactored It
•
What iOS Developers Should Be Prepared For When Integrating In-App Advertising in 2022
•
An Introduction to Coordinator pattern in SwiftUI
•
Mastering grid layout in SwiftUI
•
Background Modes Tutorial: Getting Started
•
Stopping NSZombie Invasion
•
The View Debugger in Xcode
•
Removing the iOS home indicator in SwiftUI
•
SwiftUI: Packaging Views
•
How to Generate Lightning in Swift
•
Starscream: веб-сокеты для Swift
•
Calculator: калькулятор Apple на SwiftUI
Android
• Что-то пошло не так…
• Много графиков в WebView на Android: TradingView
• Как работает видеостриминг на Android: Кинопоиск
• Ошибка в stacktrace из продакшена
• Positional memoization: как работает одна из главных концепций Jetpack Compose
• Программа Strike Removal в Google Play обучит соблюдению политик
• Как работает WorkManager в Android
•
Видео droidcon Berlin 22
•
Composing margins and paddings
•
Singleton in Kotlin
•
Touch Interactions in Jetpack Compose
•
Working with Large Images in Android
•
Make your app large screen ready
•
Build in 3D for Android Using LibGDX in Kotlin
•
Android Jetpack Navigation in multi modular apps
•
How I became a Google Developer Expert (GDE) for Android with the help of the #RoadToGDE program
•
Kotlin Flow: Best Practices
•
Chain of validators with Kotlin
•
How to Use Kotlin Symbol Processors on Android
•
Mercedes Benz Android Developer Interview Experience
•
How to implement a modular UI on Android
•
Animated Splash Screen in Android with Compose
•
Dynamic Bottom Tabs for Jetpack Compose
•
Differences between lateinit and lazy
•
How to get rid of memory leaks? A practical approach using Leak Canary and Android Profiler
•
Migrating a 1M users app to Android 12 — Challenges & Solutions
•
Understanding re-composition in Jetpack Compose with a case study
•
Building Plugable Features on Android
•
Build a Real-Time Android WhatsApp Clone With Jetpack Compose
•
Is Jetpack Compose Ready for You?
•
Comparing Jetpack Compose performance with XML
•
OnBackPressed Deprecated So What to Use
•
How to Make Unit Tests for ViewModel Easier to Write and Maintain
•
Get familiar with Wear OS 3 (without a physical device)
•
Clean Dependency Management in Multi Module Android Projects
•
Kotlin Symbol Processing: плагины компилятора на Kotlin
•
Made with Compose: эксперименты с Jetpack Compose
Кроссплатформа
• Unity: Небольшой скрипт = все ориентации экрана
• Flutter Dev Podcast #37: Casual Games Toolkit
• Compose for iOS. Сколько осталось Flutter и React Native?
• Паттерны проектирования в Dart. Часть 3 + Часть 2
• Unity: Что представляет из себя Coroutine и зачем там IEnumerator
• CherryPick DI — di библиотека для dart/flutter проектов
• Анимация интерактивной карусели во Flutter
• Xamarin.Forms: Кастомные пины для xamarin.maps
•
The journey of Lunabee Studio with KMM
•
Flutter Skill Of MediaQuery and Performance Optimization
•
Flutter Performance Tips
•
MAUI vs Flutter — Multi-platform frameworks showdown
•
Flutter + Kotlin Multiplatform = Klutter
•
We Fast-Tracked Our App Development With Kotlin Multiplatform Mobile
•
Create 2D games quickly and easily with Flutter Flame
•
Build in 3D for iOS Using LibGDX and Kotlin
•
Top 10 Flutter Tips I Learned After 2+ Million Users
•
5 Flutter Tips for Insane Team Productivity
Разработка
• Google выпустил Carbon, новый язык программирования. Что теперь?
• Сложности переноса Papers, Please на мобильные
• Как начинающему разработчику найти работу
• Не пишите повторно используемый код
• Сложно, но можно — стажировка в Яндекс Go
• Avito TeamLead meetup
• Ozon Tech Product Meetup
• Cтроить карьеры в кибербезопасности и IT стали быстрее
• Swift и Objective-C растут в Индексе TIOBE
• $21.5 млн: Pinata — инфраструктура для NFT
• Microsoft открывает эмодзи из Windows 11
• 10 алгоритмов, которые должен изучить каждый разработчик
• GitHub запустил Projects
• Зарплаты разработчиков в первом полугодии 2022
• Свежий обзор налоговых льгот для IT в 2022 году
•
System Design Architecture: Stateful vs. Stateless
•
Why I ditched Supabase and moved my backend to Firebase
•
Reasons to join a startup now — as a new or aspiring product manager
•
How a custom keyboard can extend your app’s capabilities
•
How to stay Consistent in Coding?
•
Don’t Become A Tech Stack Prisoner
•
I Did an Experiment Enforcing a Minimum Code Quality, And There Are The Results
•
Top LeetCode Patterns for FAANG Coding Interviews
•
Actually, it’s pretty easy to make “10 to 20 iterations a week”
•
The end of high developer salaries
Аналитика, маркетинг и монетизация
• Ловушка монетизации
• От 50 тыс до 1,7 млн пользователей за два года
• Apple SKAdNetwork 4.0: к чему готовиться маркетологам в будущем?
• AppLovin предложил купить Unity
• Netflix увеличивает количество игр, но пока в них играет менее 1% подписчиков
• Сколько пользователей продлевает подписку: исследование RevenueCat
• Объявлены финалисты Google Play Indie Games Festival
• Apple расширяет показ рекламы в App Store
• Пользователи проводят в мобильных приложениях больше времени, чем когда-либо: анализ Adjust
• Особенности продвижения MedTech-приложений: кейс агентства Rocket10
• Как спорить про результаты A/B тестирования
AI, Устройства, IoT
• Data Science Pet Projects. FAQ
• Как работает Autoplay в онлайн-кинотеатре
• NORVI Agent 1: маленький, но [CENSORED]
• Podlodka #280: тестирование умных устройств
• GitHub Copilot: ИИ вытесняет джунов
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подключайтесь к нашему Telegram-каналу Mobile Insights, где подборки статей и новостей выходят каждый день.
![](https://habrastorage.org/webt/cn/-a/ka/cn-aka-1so0kuqzsxjrqbnzc1aw.jpeg)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• OAuth в iOS
• Ошибка.log(): как логируются ошибки в мобильном приложении Авито
• С помощью API iOS 16 компания Apple закладывает основу для разработки смешанной реальности
• Навигация в Swift UI: что изменилось с появлением iOS 16
• Конфиденциальность iOS: Instagram* и Facebook* могут отслеживать всю вашу активность в браузере внутри приложения
• Создаем классный UI: iOS Shape Morphing
• SwiftUI. Есть ли жизнь без NavigationView или пару слов о координаторе
• Apple вернула процент заряда батареи
•
![](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/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/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)
• Что-то пошло не так…
• Много графиков в WebView на Android: TradingView
• Как работает видеостриминг на Android: Кинопоиск
• Ошибка в stacktrace из продакшена
• Positional memoization: как работает одна из главных концепций Jetpack Compose
• Программа Strike Removal в Google Play обучит соблюдению политик
• Как работает WorkManager в Android
•
![](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/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/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/webt/ma/lx/8h/malx8hbgozt6lee8rmxmg96_s6a.png)
• Unity: Небольшой скрипт = все ориентации экрана
• Flutter Dev Podcast #37: Casual Games Toolkit
• Compose for iOS. Сколько осталось Flutter и React Native?
• Паттерны проектирования в Dart. Часть 3 + Часть 2
• Unity: Что представляет из себя Coroutine и зачем там IEnumerator
• CherryPick DI — di библиотека для dart/flutter проектов
• Анимация интерактивной карусели во Flutter
• Xamarin.Forms: Кастомные пины для xamarin.maps
•
![](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/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Google выпустил Carbon, новый язык программирования. Что теперь?
• Сложности переноса Papers, Please на мобильные
• Как начинающему разработчику найти работу
• Не пишите повторно используемый код
• Сложно, но можно — стажировка в Яндекс Go
• Avito TeamLead meetup
• Ozon Tech Product Meetup
• Cтроить карьеры в кибербезопасности и IT стали быстрее
• Swift и Objective-C растут в Индексе TIOBE
• $21.5 млн: Pinata — инфраструктура для NFT
• Microsoft открывает эмодзи из Windows 11
• 10 алгоритмов, которые должен изучить каждый разработчик
• GitHub запустил Projects
• Зарплаты разработчиков в первом полугодии 2022
• Свежий обзор налоговых льгот для IT в 2022 году
•
![](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/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• Ловушка монетизации
• От 50 тыс до 1,7 млн пользователей за два года
• Apple SKAdNetwork 4.0: к чему готовиться маркетологам в будущем?
• AppLovin предложил купить Unity
• Netflix увеличивает количество игр, но пока в них играет менее 1% подписчиков
• Сколько пользователей продлевает подписку: исследование RevenueCat
• Объявлены финалисты Google Play Indie Games Festival
• Apple расширяет показ рекламы в App Store
• Пользователи проводят в мобильных приложениях больше времени, чем когда-либо: анализ Adjust
• Особенности продвижения MedTech-приложений: кейс агентства Rocket10
• Как спорить про результаты A/B тестирования
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Data Science Pet Projects. FAQ
• Как работает Autoplay в онлайн-кинотеатре
• NORVI Agent 1: маленький, но [CENSORED]
• Podlodka #280: тестирование умных устройств
• GitHub Copilot: ИИ вытесняет джунов
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.