В этом дайджесте для мобильных разработчиков листаем страницы и повышаем качество кода, защищаем и исследуем код, исследуем новый релиз Flutter, делаем дизайн-систему, автотесты, определяем “производительность” рекламных сетей.
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
iOS
• 10 быстрых советов по повышению качества iOS-кода: часть 1 + часть 2
• Добавляем подсказки в приложение с помощью TipKit
• Листаем цифровые страницы: UIPageViewController
• Рефакторинг Swift
• Apple добавит поддержку RCS в следующем году
• Отображение панели выбора фотографий в SwiftUI
• iOS 18 должна стать самой «амбициозной и неотразимой»
• Поваренная книга SwiftUI: обрезка представлений
• Progress toward the Swift 6 language mode
• On-Crash Backtraces in Swift
• SwiftUI: Displaying a Photo Picker
• Localisation in Xcode 15
• SwiftUI at Airbnb: A Case Study
• Beyond the Code: Exploring the Innovations of Swift 6
• The idea of a Fastlane replacement
• Glovo’s Large-Scale App Development: An In-Depth Look
• Mastering App Store Submissions with Fastlane Deliver
• The complete guide to iOS & macOS development in Neovim
• Handle TabView data in a type-safe way with Enums
• Preparing your App for Voice Over: Accessibility Value
• Why mobile apps need a good abstraction?
• Unit Test Expected Failures in Swift
• SwiftUI: How to trigger animations from outside the View scope?
• Inspecting Xcode’s build system graph at ease
• Mastering ViewThatFits
• How to update widgets for StandBy mode
• SwiftData: A Comprehensive Guide to Data Persistence in iOS with CoreData
• Animatable Dual Axis Graph
• Introducing Inferno: Metal shaders for SwiftUI
• Building Complex Scroll Animations With New iOS 17 APIs
• Data Structures in Swift
• How to Refactor Your Code with Late Let and Defer
• Introducing Inferno: Metal shaders for SwiftUI
• Adding Snapchat-Like Filters to a Video Calling App using SwiftUI
• Build DALL·E 3 AI WhatsApp Sticker Generator SwiftUI App
• Building Complex Scroll Animations With New iOS 17 API’s
• SwiftData Dynamic Sorts and Filters
• MaterialTabBar: материальный TabBar на SwiftUI
• Swift Protobuf: Protocol Buffer для Swift
Android
• Защита кода приложения Android. Когда хотели как лучше, а вышло не очень
• Kaspresso для самых маленьких
• Используем Ktlint в вашем Android-проекте
• Настройка Selenoid для запуска UI-тестов на Android
• Сравнение производительности Compose и View
• Разрушители легенд: Как на самом деле магазины проверяют приложения на уязвимости
• Как подружить JUnit 5 и Robolectric?
• Разделение презентационного слоя фичи на модули в Android приложении
• Сквозь дебри разработки, или как я пытался написать приложение
• Приложение для мобильных бригад: «толстый клиент» и полмиллиона строк кода
• Бруклинский мост. Зачем генерируем C++ на Kotlin
• Погружение в Smali. Как выглядят Java и Kotlin со стороны
• Быстрый старт в сборке метрик по билдам в Android-проекте
• Android Storage: обзор инструментария
• Squaring the Circle on Google TV
• Navigation Drawers for Android TV using Jetpack Compose
• Reactive Programming in Kotlin — Flow
• The many faces of Kermit
• Apply Ktlint To Your Android Project
• Adding Konsist and Ktlint to a GitHub Actions Continuous Integration
• Navigating Pitfalls — When to Use derivedStateOf with remember(key) in Jetpack Compose
• Android: Jetpack Glance with Hilt
• Android WorkManager: Popular Interview Questions and Answers
• Compare Compose and View performance
• The secret to Android’s improved memory on 1B+ Devices: The latest Android Runtime update
• Understanding Kotlin’s Special Types: Any, Unit, and Nothing
• AIDL: The Android Developer’s Bridge Between Processes
• BasicTextField2: A TextField of Dreams
• Ace your live coding interview: Android
• 5 quick animations to make your Compose app stand out
• Kotlin Sequence vs Collection: Which to choose?
• Bringing New Input Support to Desktop AVD
• Are you sure you know how Kotlin Flow works?
• Component-based Approach. Fighting Complexity in Android Applications
• The latest updates to power your growth on Google Play
• New APIs for adaptive layouts in Jetpack Compose
• Understanding Eventbus with kotlin Flow
• Now in Android: 95 — Google Play requirements, Animations in Compose, Passkeys in Android, and more!
• How to Build an Animated Splash Screen on Android — The Full Guide
• Top 3 Coroutine Cancellation Traps That Lead to Errors In Your Android App
• Practical magic with animations in Jetpack Compose
• Twitter UI Clone: интерфейс Твиттер на Jetpack Compose
• Orbital: анимации Jetpack Compose
Кроссплатформа
• Простой, но масштабируемый State Management для Flutter
• Как мы перешли на кроссплатформенность в середине проекта и успели в срок
• Новый линт в Dart 3.2
• Flutter 3.16: что нового
• Анимация загрузки картинок во Flutter, или как сделать shimmer своими руками
• Embracing Stable Kotlin Multiplatform (KMP) with Koin
• Flutter: Seamless Header Navigation from AppBar
• 8 Steps to Follow When Building Your Next Flutter App
• Flutter localization: step-by-step
• Building Responsive UIs in Flutter: A Short Guide
• What’s new in Flutter 3.16
• Introducing the Flutter Casual Games Toolkit
• LocalSend: кроссплатформенная альтернатива AirDrop
Разработка
• Дизайн-система Gravity UI: как легко построить свой интерфейс
• Что не так с «Авророй» — российской мобильной OC
• Как сделать автотесты гибкими и лаконичными
• Должен ли QA уметь писать код
• GameDev и ОС Аврора. Портирование игры
• Что нового в интерфейсе ОС Аврора 5: управление и паттерны взаимодействия
• Avito Tech Managers meetup #1
• Я прошел собеседования в Google… Как?
• Octoverse 2023: ежегодный отчет от GitHub
• Windows 1.0 исполнилось 40 лет
• Building In-Video Search
• Smoothing Out The Bumps: My Journey of Setting Up CI/CD for Android and iOS Apps
• Framing: The 1 most important communication concept every software engineer must know
• How one line of code caused a $60 million loss
• How I escape what 99% of programmers can’t
• Writing code for MS-DOS with Borland Pascal 7
• My favorite coding question to give candidates (and why)
Аналитика, маркетинг и монетизация
• Мобильные суперприложения выгодны корпорациям, но это кошмар для простых людей
• RuStore стал первым инклюзивным российским магазином приложений
• SplitMetrics купила App Radar
• Microsoft представила Loop, своего конкурента Notion
• $11.5 млн Серии А: Sunnyside — разумное питье с ИИ
• Опубликован AppsFlyer Performance Index 16
• Почему бенчмарки бесполезны
• Nothing Phone выпустит эксклюзивное приложение для работы с iMessage
• Объявлены финалисты App Store Award: лучшие приложения и игры 2023
• Digital Turbine инвестировала в магазин приложений Aptoide
• Исследуем доходы и установки Callsheet
AI, Устройства, IoT
• Вкатываемся в Machine Learning с нуля за ноль рублей: что, где, в какой последовательности изучить
• Станция Миди и голосовое управление Zigbee-устройствами без интернета. История разработки
• Парк юрского периода глазами нейросети: как развернуть Diffusers для генерации изображений за 10 минут
• Дисплей для Ариты или тайна четырёх перемычек
• Управление сетевыми устройствами: Orange Pi, OpenWRT и Python
• $16 млн в посевном раунде: Codegen — автоматизация задач разработки с помощью ИИ
• An Android Developer’s Introduction to Machine Learning
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
iOS
• 10 быстрых советов по повышению качества iOS-кода: часть 1 + часть 2
• Добавляем подсказки в приложение с помощью TipKit
• Листаем цифровые страницы: UIPageViewController
• Рефакторинг Swift
• Apple добавит поддержку RCS в следующем году
• Отображение панели выбора фотографий в SwiftUI
• iOS 18 должна стать самой «амбициозной и неотразимой»
• Поваренная книга SwiftUI: обрезка представлений
• Progress toward the Swift 6 language mode
• On-Crash Backtraces in Swift
• SwiftUI: Displaying a Photo Picker
• Localisation in Xcode 15
• SwiftUI at Airbnb: A Case Study
• Beyond the Code: Exploring the Innovations of Swift 6
• The idea of a Fastlane replacement
• Glovo’s Large-Scale App Development: An In-Depth Look
• Mastering App Store Submissions with Fastlane Deliver
• The complete guide to iOS & macOS development in Neovim
• Handle TabView data in a type-safe way with Enums
• Preparing your App for Voice Over: Accessibility Value
• Why mobile apps need a good abstraction?
• Unit Test Expected Failures in Swift
• SwiftUI: How to trigger animations from outside the View scope?
• Inspecting Xcode’s build system graph at ease
• Mastering ViewThatFits
• How to update widgets for StandBy mode
• SwiftData: A Comprehensive Guide to Data Persistence in iOS with CoreData
• Animatable Dual Axis Graph
• Introducing Inferno: Metal shaders for SwiftUI
• Building Complex Scroll Animations With New iOS 17 APIs
• Data Structures in Swift
• How to Refactor Your Code with Late Let and Defer
• Introducing Inferno: Metal shaders for SwiftUI
• Adding Snapchat-Like Filters to a Video Calling App using SwiftUI
• Build DALL·E 3 AI WhatsApp Sticker Generator SwiftUI App
• Building Complex Scroll Animations With New iOS 17 API’s
• SwiftData Dynamic Sorts and Filters
• MaterialTabBar: материальный TabBar на SwiftUI
• Swift Protobuf: Protocol Buffer для Swift
Android
• Защита кода приложения Android. Когда хотели как лучше, а вышло не очень
• Kaspresso для самых маленьких
• Используем Ktlint в вашем Android-проекте
• Настройка Selenoid для запуска UI-тестов на Android
• Сравнение производительности Compose и View
• Разрушители легенд: Как на самом деле магазины проверяют приложения на уязвимости
• Как подружить JUnit 5 и Robolectric?
• Разделение презентационного слоя фичи на модули в Android приложении
• Сквозь дебри разработки, или как я пытался написать приложение
• Приложение для мобильных бригад: «толстый клиент» и полмиллиона строк кода
• Бруклинский мост. Зачем генерируем C++ на Kotlin
• Погружение в Smali. Как выглядят Java и Kotlin со стороны
• Быстрый старт в сборке метрик по билдам в Android-проекте
• Android Storage: обзор инструментария
• Squaring the Circle on Google TV
• Navigation Drawers for Android TV using Jetpack Compose
• Reactive Programming in Kotlin — Flow
• The many faces of Kermit
• Apply Ktlint To Your Android Project
• Adding Konsist and Ktlint to a GitHub Actions Continuous Integration
• Navigating Pitfalls — When to Use derivedStateOf with remember(key) in Jetpack Compose
• Android: Jetpack Glance with Hilt
• Android WorkManager: Popular Interview Questions and Answers
• Compare Compose and View performance
• The secret to Android’s improved memory on 1B+ Devices: The latest Android Runtime update
• Understanding Kotlin’s Special Types: Any, Unit, and Nothing
• AIDL: The Android Developer’s Bridge Between Processes
• BasicTextField2: A TextField of Dreams
• Ace your live coding interview: Android
• 5 quick animations to make your Compose app stand out
• Kotlin Sequence vs Collection: Which to choose?
• Bringing New Input Support to Desktop AVD
• Are you sure you know how Kotlin Flow works?
• Component-based Approach. Fighting Complexity in Android Applications
• The latest updates to power your growth on Google Play
• New APIs for adaptive layouts in Jetpack Compose
• Understanding Eventbus with kotlin Flow
• Now in Android: 95 — Google Play requirements, Animations in Compose, Passkeys in Android, and more!
• How to Build an Animated Splash Screen on Android — The Full Guide
• Top 3 Coroutine Cancellation Traps That Lead to Errors In Your Android App
• Practical magic with animations in Jetpack Compose
• Twitter UI Clone: интерфейс Твиттер на Jetpack Compose
• Orbital: анимации Jetpack Compose
Кроссплатформа
• Простой, но масштабируемый State Management для Flutter
• Как мы перешли на кроссплатформенность в середине проекта и успели в срок
• Новый линт в Dart 3.2
• Flutter 3.16: что нового
• Анимация загрузки картинок во Flutter, или как сделать shimmer своими руками
• Embracing Stable Kotlin Multiplatform (KMP) with Koin
• Flutter: Seamless Header Navigation from AppBar
• 8 Steps to Follow When Building Your Next Flutter App
• Flutter localization: step-by-step
• Building Responsive UIs in Flutter: A Short Guide
• What’s new in Flutter 3.16
• Introducing the Flutter Casual Games Toolkit
• LocalSend: кроссплатформенная альтернатива AirDrop
Разработка
• Дизайн-система Gravity UI: как легко построить свой интерфейс
• Что не так с «Авророй» — российской мобильной OC
• Как сделать автотесты гибкими и лаконичными
• Должен ли QA уметь писать код
• GameDev и ОС Аврора. Портирование игры
• Что нового в интерфейсе ОС Аврора 5: управление и паттерны взаимодействия
• Avito Tech Managers meetup #1
• Я прошел собеседования в Google… Как?
• Octoverse 2023: ежегодный отчет от GitHub
• Windows 1.0 исполнилось 40 лет
• Building In-Video Search
• Smoothing Out The Bumps: My Journey of Setting Up CI/CD for Android and iOS Apps
• Framing: The 1 most important communication concept every software engineer must know
• How one line of code caused a $60 million loss
• How I escape what 99% of programmers can’t
• Writing code for MS-DOS with Borland Pascal 7
• My favorite coding question to give candidates (and why)
Аналитика, маркетинг и монетизация
• Мобильные суперприложения выгодны корпорациям, но это кошмар для простых людей
• RuStore стал первым инклюзивным российским магазином приложений
• SplitMetrics купила App Radar
• Microsoft представила Loop, своего конкурента Notion
• $11.5 млн Серии А: Sunnyside — разумное питье с ИИ
• Опубликован AppsFlyer Performance Index 16
• Почему бенчмарки бесполезны
• Nothing Phone выпустит эксклюзивное приложение для работы с iMessage
• Объявлены финалисты App Store Award: лучшие приложения и игры 2023
• Digital Turbine инвестировала в магазин приложений Aptoide
• Исследуем доходы и установки Callsheet
AI, Устройства, IoT
• Вкатываемся в Machine Learning с нуля за ноль рублей: что, где, в какой последовательности изучить
• Станция Миди и голосовое управление Zigbee-устройствами без интернета. История разработки
• Парк юрского периода глазами нейросети: как развернуть Diffusers для генерации изображений за 10 минут
• Дисплей для Ариты или тайна четырёх перемычек
• Управление сетевыми устройствами: Orange Pi, OpenWRT и Python
• $16 млн в посевном раунде: Codegen — автоматизация задач разработки с помощью ИИ
• An Android Developer’s Introduction to Machine Learning
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.