В этом выпуске миграция на Observation и Doom на SwiftUI, современный Compose и прощание с друзьями, принципы хорошего дизайна, красоты кода, эффективного продвижения и многого другого!
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
iOS
• Перф-тесты VS аномалии. Вечная битва за производительность приложений на iOS
• Миграция Ice Cubes на фреймворк SwiftUI Observation
• Jailbreak checker — как обезопасить свое iOS-приложение
• @ViewBuilder Что? Зачем? Когда?
• Руководство по Использованию Многопоточности в Swift
• Паттеры проектирования — Мост
• Пишем свой рендеринг графики на SwiftUI и запускаем на нем Doom
• Поваренная книга SwiftUI: использование предварительного просмотра в Xcode со SwiftUI
• A new tool for testing macros in Swift
• Crack Your iOS Interview: Top Questions You Must Know in 2023 Before You Go!
• Understanding Access Levels in Swift with Examples
• Benefits of using #pragma mark in Swift
• Discovering All SwiftUI TextField Keyboard Types
• 3 Cool new features of Swift 5.9
• How to Handle Content Unavailable Gracefully with iOS 17?
• Bottom Sheet View Controller with Dynamic Content Height in iOS
• The sad state of @AppStorage and the Observable framework
• Store Codable types in AppStorage
• Efficient Dependency Management in iOS: Introducing AppContainer for MVP+DI architecture
• WeatherKit Tutorial: Getting Started
• Understanding Publishers in SwiftUI and Combine
• Thread safety in Swift with actors
• Creating a Carousel View in SwiftUI: A Step-by-Step Guide
• Multipart Request with URLSession and async/await in Swift
• Closures vs. Delegates in Swift iOS
• How to use the new inspector SwiftUI view modifier
• How to create an App Clip for your app
• Dependency Injection in Swift
• Crafting Gourmate: The Food Journaling App
• SwiftUI Animated Carousel Slider With Paging Control
• Build a SwiftUI Video Calling: How to Ring and Notify Users About a Call
• How to translate and localize an iOS app with string catalogs in Xcode 15
• CocoaHeadsNL Meetup
• SwiftUI Custom Alert View
• SFSymbol Animations in iOS 17
• Breaking Down Swift Data Migrations
• DeviceKit: замена UIDevice
• iOSSecuritySuite: безопасность и защита от взлома iOS-приложений
Android
• Реализуем современный UI на Jetpack Compose
• «Подарил удочки и попрощался с друзьями на год»: как я стал Android-разработчиком, отказавшись даже от прогулок
• Собеседование на Mobile Developer: Алексей Панов (Контур)
• От плохого кода к хорошему один шаг: юнит тесты, ООП и интерфейсы
• Studio Bot в Android Studio заработал в 170 странах мира
• Написание символьного процессора с помощью Kotlin Symbol Processing (Часть 1) + (Часть 2)
• Тюнинг производительности Kotlin: 20 советов
• UI Eventing on Android
• ANR internals: touch dispatching through the view hierarchy
• ArchUnit vs. Konsist. Why Did We Need Another Kotlin “Linter”?
• A bird’s eye view of the ioki Android app architecture
• Kotlin Flow: Simple yet Powerful Implementation
• Why has my background Worker stopped? Exploring Android WorkManger’s StopReason
• Mastering RecyclerView Optimizations in Android
• Lighten MVI architecture: Delegate responsibilities to new components
• Creating the Creational Design Patterns in Kotlin
• Implementing In-App Reviews Using Google Play Review API
• Data Persistence With Room
• Media on Swiggy’s Mobile Apps
• Navigation in Jetpack compose. Full guide Beginner to Advanced.
• How to Implement Swipe-to-Action using AnchoredDraggable in Jetpack Compose
• Let’s Talk about Kotlin K2
• First Alpha release of Androidx Bluetooth
• Java 21 Features With Example
• Generics in Kotlin
• Compose Modifier.Node and where to find it
• Firebase in Android Studio — Android Developers Backstage
• Now in Android: 91 — Jetpack Glance, Android 14 QPR, Google Play policy and console updates, & more!
• How to Create a Lazy Column With Categories in Jetpack Compose
• ComposeCard: красивый экран оплаты на Jetpack Compose
• ComposeScrollbars: продвинутые скроллбары для Compose
Кроссплатформа
• Why Kotlin Multiplatform could change everything in the mobile dev world
• The Power of the late keyword in Dart
• Behind every widget, there are an element and almost always a render object
• Mavericks Style Architecture on Kotlin Compose Multiplatform: A Tutorial
• Trainee Program for Aspiring Flutter Developers
• Kotlin for Web Development: Beyond Android Apps
• Integrating Flutter {all 6 platforms} and Python: A Comprehensive Guide
• The hidden cost of async operations in Flutter/Dart
• 5+ Github Actions to Automate Your React Native Workflow
• Making Multiplatform Better
• Creating a Cutting-Edge Movie Streaming App with Flutter & Python
• Flutter Weather App: погодное приложение в стиле Apple Weather
Разработка
• Особенности SRE и Observability в мобильных приложениях
• Принципы хорошего дизайна интерфейсов. И причем здесь программисты?
• Сделали по красоте: победители «Конкурса красоты кода»
• Ozon Tech Community QA Meetup
• Как использовать метод струн для улучшения любого пользовательского интерфейса
• GitHub Copilot Chat открыли для индивидуальных разработчиков
• Kotlin снова вошел в Топ-20 TIOBE Index
• Unlocking the Potential of Mobile DevOps: Transforming App Development and Delivery
• Best Practices for Collecting and Querying Data from Multiple Sources
• My approach to coding interviews: Optimize for iteration
• What Happens When You Reach The Age of 35 as a Programmer
• Tracing: structured logging, but better in every way
• Every Programmer Should Know #1: Idempotency
• How to be the favorite engineer among your product manager and designer
• The ONLY Right Way to Document Your Code
• ElectricSQL: Local-first платформа синхронизации для Postgres
• OpenRA: игровой движок для 2D стратегий
Аналитика, маркетинг и монетизация
• Эффективное продвижение в in-app, альтернативных магазинах и через Android APK. Кейс «Национальная Лотерея» и Rocket10
• Как увеличить мощность A/B-теста, если мало данных и время поджимает
• Podlodka #336: ищем пользовательский сегмент
• Модерация приложений и игр в магазине RuStore
• Carrots&Cake: приложение родительского контроля меняет обучение на игры
• Sizzle — не просто решение домашних задач, а объяснение их с помощью ИИ
• Google провел редизайн приложения Fitbit
• Исследование “Мобильный потребитель 2023”
AI, Устройства, IoT
• Диалоги с кофеваркой, про Яндекс Алису и умный дом Home Assistant
• От логики и риторики до теории множеств и матанализа. Полезные материалы по Data Science и машинному обучению
• Слезаем с иглы Siemens: промышленная вентиляция бассейна и спортивного комплекса
• IoT и его криптонит
• $100 млн в Серии B: Writer — генеративная платформа для предприятий
• Исследователи Microsoft AI выставили терабайты данных на всеобщий доступ
• Если бы вы покупали акции, вместо iPhone, у вас сейчас было бы $147,000
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
iOS
• Перф-тесты VS аномалии. Вечная битва за производительность приложений на iOS
• Миграция Ice Cubes на фреймворк SwiftUI Observation
• Jailbreak checker — как обезопасить свое iOS-приложение
• @ViewBuilder Что? Зачем? Когда?
• Руководство по Использованию Многопоточности в Swift
• Паттеры проектирования — Мост
• Пишем свой рендеринг графики на SwiftUI и запускаем на нем Doom
• Поваренная книга SwiftUI: использование предварительного просмотра в Xcode со SwiftUI
• A new tool for testing macros in Swift
• Crack Your iOS Interview: Top Questions You Must Know in 2023 Before You Go!
• Understanding Access Levels in Swift with Examples
• Benefits of using #pragma mark in Swift
• Discovering All SwiftUI TextField Keyboard Types
• 3 Cool new features of Swift 5.9
• How to Handle Content Unavailable Gracefully with iOS 17?
• Bottom Sheet View Controller with Dynamic Content Height in iOS
• The sad state of @AppStorage and the Observable framework
• Store Codable types in AppStorage
• Efficient Dependency Management in iOS: Introducing AppContainer for MVP+DI architecture
• WeatherKit Tutorial: Getting Started
• Understanding Publishers in SwiftUI and Combine
• Thread safety in Swift with actors
• Creating a Carousel View in SwiftUI: A Step-by-Step Guide
• Multipart Request with URLSession and async/await in Swift
• Closures vs. Delegates in Swift iOS
• How to use the new inspector SwiftUI view modifier
• How to create an App Clip for your app
• Dependency Injection in Swift
• Crafting Gourmate: The Food Journaling App
• SwiftUI Animated Carousel Slider With Paging Control
• Build a SwiftUI Video Calling: How to Ring and Notify Users About a Call
• How to translate and localize an iOS app with string catalogs in Xcode 15
• CocoaHeadsNL Meetup
• SwiftUI Custom Alert View
• SFSymbol Animations in iOS 17
• Breaking Down Swift Data Migrations
• DeviceKit: замена UIDevice
• iOSSecuritySuite: безопасность и защита от взлома iOS-приложений
Android
• Реализуем современный UI на Jetpack Compose
• «Подарил удочки и попрощался с друзьями на год»: как я стал Android-разработчиком, отказавшись даже от прогулок
• Собеседование на Mobile Developer: Алексей Панов (Контур)
• От плохого кода к хорошему один шаг: юнит тесты, ООП и интерфейсы
• Studio Bot в Android Studio заработал в 170 странах мира
• Написание символьного процессора с помощью Kotlin Symbol Processing (Часть 1) + (Часть 2)
• Тюнинг производительности Kotlin: 20 советов
• UI Eventing on Android
• ANR internals: touch dispatching through the view hierarchy
• ArchUnit vs. Konsist. Why Did We Need Another Kotlin “Linter”?
• A bird’s eye view of the ioki Android app architecture
• Kotlin Flow: Simple yet Powerful Implementation
• Why has my background Worker stopped? Exploring Android WorkManger’s StopReason
• Mastering RecyclerView Optimizations in Android
• Lighten MVI architecture: Delegate responsibilities to new components
• Creating the Creational Design Patterns in Kotlin
• Implementing In-App Reviews Using Google Play Review API
• Data Persistence With Room
• Media on Swiggy’s Mobile Apps
• Navigation in Jetpack compose. Full guide Beginner to Advanced.
• How to Implement Swipe-to-Action using AnchoredDraggable in Jetpack Compose
• Let’s Talk about Kotlin K2
• First Alpha release of Androidx Bluetooth
• Java 21 Features With Example
• Generics in Kotlin
• Compose Modifier.Node and where to find it
• Firebase in Android Studio — Android Developers Backstage
• Now in Android: 91 — Jetpack Glance, Android 14 QPR, Google Play policy and console updates, & more!
• How to Create a Lazy Column With Categories in Jetpack Compose
• ComposeCard: красивый экран оплаты на Jetpack Compose
• ComposeScrollbars: продвинутые скроллбары для Compose
Кроссплатформа
• Why Kotlin Multiplatform could change everything in the mobile dev world
• The Power of the late keyword in Dart
• Behind every widget, there are an element and almost always a render object
• Mavericks Style Architecture on Kotlin Compose Multiplatform: A Tutorial
• Trainee Program for Aspiring Flutter Developers
• Kotlin for Web Development: Beyond Android Apps
• Integrating Flutter {all 6 platforms} and Python: A Comprehensive Guide
• The hidden cost of async operations in Flutter/Dart
• 5+ Github Actions to Automate Your React Native Workflow
• Making Multiplatform Better
• Creating a Cutting-Edge Movie Streaming App with Flutter & Python
• Flutter Weather App: погодное приложение в стиле Apple Weather
Разработка
• Особенности SRE и Observability в мобильных приложениях
• Принципы хорошего дизайна интерфейсов. И причем здесь программисты?
• Сделали по красоте: победители «Конкурса красоты кода»
• Ozon Tech Community QA Meetup
• Как использовать метод струн для улучшения любого пользовательского интерфейса
• GitHub Copilot Chat открыли для индивидуальных разработчиков
• Kotlin снова вошел в Топ-20 TIOBE Index
• Unlocking the Potential of Mobile DevOps: Transforming App Development and Delivery
• Best Practices for Collecting and Querying Data from Multiple Sources
• My approach to coding interviews: Optimize for iteration
• What Happens When You Reach The Age of 35 as a Programmer
• Tracing: structured logging, but better in every way
• Every Programmer Should Know #1: Idempotency
• How to be the favorite engineer among your product manager and designer
• The ONLY Right Way to Document Your Code
• ElectricSQL: Local-first платформа синхронизации для Postgres
• OpenRA: игровой движок для 2D стратегий
Аналитика, маркетинг и монетизация
• Эффективное продвижение в in-app, альтернативных магазинах и через Android APK. Кейс «Национальная Лотерея» и Rocket10
• Как увеличить мощность A/B-теста, если мало данных и время поджимает
• Podlodka #336: ищем пользовательский сегмент
• Модерация приложений и игр в магазине RuStore
• Carrots&Cake: приложение родительского контроля меняет обучение на игры
• Sizzle — не просто решение домашних задач, а объяснение их с помощью ИИ
• Google провел редизайн приложения Fitbit
• Исследование “Мобильный потребитель 2023”
AI, Устройства, IoT
• Диалоги с кофеваркой, про Яндекс Алису и умный дом Home Assistant
• От логики и риторики до теории множеств и матанализа. Полезные материалы по Data Science и машинному обучению
• Слезаем с иглы Siemens: промышленная вентиляция бассейна и спортивного комплекса
• IoT и его криптонит
• $100 млн в Серии B: Writer — генеративная платформа для предприятий
• Исследователи Microsoft AI выставили терабайты данных на всеобщий доступ
• Если бы вы покупали акции, вместо iPhone, у вас сейчас было бы $147,000
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.