В нашем новом еженедельном дайджесте WWDC 2024 и DVD-заставка на SwiftUI, более старый Android и инструментальные цепочки Gradle, анализ производительности React Native, инклюзивность и цифровая доступность, временное решение на 30 лет и многое другое. Подключайтесь!
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/sl/-j/um/sl-jum-sgplq4fbrxait3pnfaro.png)
iOS
• Privacy Manifest: что нужно о нём знать для внедрения в проект
• Вопросы с собеседований: Жизненный цикл UIViewController
• Поваренная книга SwiftUI: тексты и шрифты — часть 2
• Apple запустила на YouTube канал для разработчиков
• WWDC 2024 пройдет с 10 по 14 июня
• Делаем DVD-заставку на SwiftUI
•
Introducing the Benchmark Package: Complementing Unit Tests with Performance Checks
•
Guide to Naming SwiftUI Components
•
Mobile System Design (iOS): Swiggy/Zomato App
•
Dependency Injection for Modern Swift Applications
•
How to use Swift’s logging API
•
Top 10 SwiftUI Features Every App Developer Should Know
•
Swift 6 New Features
•
Key press events detection in SwiftUI
•
Safe array subscription in Swift
•
Exploring SwiftUI: Orientation Property Wrapper
•
Iterating over websocket messages with async / await in Swift
•
Swift Closures Explained: From Beginner to Advanced
•
SwiftUI Modifier Mastery: Enhancing Views and Layout Control
•
Using ViewModel with Protocols in SwiftUI
•
Date decoding strategies in Swift
•
Swift Actors — in depth
•
Framework Creation And Code Visibility Control Using Binary
•
Pinch to Zoom — SwiftUI
•
Rebuild Spotify in SwiftUI
•
Swift has more formatters than you know
•
XCTest Tutorial: How to add automated UI tests for Better iOS App Quality
•
Horizontal Wheel Picker
•
Stacked Cards Effect using SwiftUI
•
Create Realistic Particle Effects for visionOS
•
Benchmark: производительность Swift с поддержкой CI
•
SQLite.swift: обертка для SQLite3
•
Adwaita for Swift: GNOME приложения на SwiftUI
•
Ignite: конструктор статических сайтов для Swift-разработчиков
Android
• Исходников нет, но мы не сдадимся: как и зачем я портировал более старый Android, чем стоял «с завода»?
• Инструментальные цепочки Gradle редко бывают хорошей идеей
• Context receivers — новые extension functions
• Работа с UI-автотестами под Android: от запрета мерджа к особенностям запуска
• Экспортируем иконки из Figma в проект одним кликом: история одной автоматизации
• Android 15 выйдет только летом, но «потрогать» ОС можно уже сейчас. Что интересного в тестовой версии?
• Кодогенерация токенов дизайн-системы для Android по Figma API
• К чему с годами приводит работа с Dependency Injection и Service Locator
• Line height в Android TextView: где не сходится с Figma, как мешает pixel-perfect, и как это решить
• Реализация Lazy Dependency Holder (Продвинутая ленивая инициализация зависимостей) для больших команд
• Android-разработчица. Как сделать первые шаги?
• Что нужно учить в 2024
•
Retaining beyond ViewModels
•
Create Instagram-like Long Press and Draggable Carousel Indicators in Jetpack Compose
•
Random Musings on the Android 15 Developer Preview 2
•
What is FRIDA? Why Every Android Developer should it?
•
Handling UI Events in Jetpack Compose: A Clean Approach
•
Performance Impact Analysis of Gradle 8.7 in Android Projects
•
Build a Real-Time Zoom Clone with Jetpack Compose
•
A preview of Animating LazyList items in Jetpack Compose
•
Drawing a Football Ground with Jetpack Compose
•
Starting Lineups on Football Pitch with Jetpack Compose
•
How to build a custom design system with Jetpack compose
•
Exploring Kotlin Coroutines Dispatchers: A Look at Dispatchers.Main.immediate
•
Important Coroutine Interview Questions for Experienced Android Developers
•
Introduction to ML Kit Document Scanner for Android
•
Optimizing Lazy List in Jetpack Compose: Best Practices
•
Scooping Out Vanilla Ice Cream
•
Time for Playtime — Android Developers Backstage
•
How to Implement a Pull-to-Refresh LazyColumn with Material3 in Android
•
If You’re Making These 5 Use Case Mistakes, You Haven’t Understood Clean Architecture
•
Material You Review
•
SimpMusic: музыкальный плеер на основе YouTube Music
•
Better Open With: диалог открытия файлов для Android
•
AboutLibraries: сведения о зависимостях и лицензиях
Кроссплатформа
• Анализ производительности React Native приложений: как выявить проблемы и улучшить перформанс
• Flutter Dev Podcast #45: Собеседования на позицию Flutter-разработчика
•
How to Use and Create Streams from Scratch in Dart and Flutter
•
Intro to Metaprogramming in Dart
•
Optimizing Configuration time for Android apps that use React Native
•
Optimizing Flutter Performance: Techniques to Enhance Your App’s Speed and Efficiency
•
Flutter’s InheritedWidgets: Getting Started
•
Common Mistakes in Flutter and How to Fix Them
•
Display images with Custom Paint using Supabase Storage
•
Flutter Responsive UI Design
Разработка
• Продуктовый подход к pet-проекту или как я разработал музыкальное веб-приложение
• Адаптация мобильного приложения для пользователей скринридеров. Опыт Яндекс Лавки
• 6 лет из жизни инди-разработчика
• Инклюзивность и цифровая доступность в дизайне: почему это важно для всех
• Эволюция главного экрана: хаос, исследования и редизайн
• Сложная архитектура простых приложений
• Оценочные шкалы в UX-исследованиях
• Пишем рекомендательную систему музыки на Java
• Задача из Моего Собеседования в Amazon
• Ада Лавлейс и программирование
• Осознанный подход к метрикам
• Playtime Engineering хочет упростить создание музыки для детей
• 10 упражнений от боли в спине, которые помогут программистам
• Самые высокооплачиваемые вакансии марта в сфере разработки приложений
• Временное решение просуществовало в Windows уже 30 лет
• Как руководить командой Senior-инженеров
•
Create Visual Stories Without Drawing
•
Industrial Product Design Trends for 2024
•
How Uber increased developer productivity and what you can learn from that
•
Design better alerts
•
10 Essential Exercises for Programmers to Prevent Back Pain
•
What I learned from the book Software Architecture: The Hard Parts
•
10 Core Product Design Principles
•
I’m A Developer Not A Compiler
•
10 Elegant and Handy User Interface Design Projects
•
Consistent Data Encryption in Android, iOS, and Flutter Apps with AES
Аналитика, маркетинг и монетизация
• LinkedIn тестирует ленту с короткими видео
• Spotify тестирует видеокурсы для обучения всему — от создания музыки до Excel
• Евросоюз расследует несоблюдение Apple закона о Цифровых рынках
• Gamification in Product Design (UI/UX)
• The AppsFlyer Performance Index: 2024 Country Edition
AI, Устройства, IoT
• Умная квартира айтишника: хотел всё на Wi-Fi, но передумал
• Самый лучший в мире курс по Машинному обучению — Алгоритмы Машинного обучения с нуля
• Будка охраны или космический корабль
• Что делать, если твой заказчик — весы, или Как заговорить на одном языке с бытовой техникой
•
AI Flutter Code Generator with Gemini API
? Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/sl/-j/um/sl-jum-sgplq4fbrxait3pnfaro.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• Privacy Manifest: что нужно о нём знать для внедрения в проект
• Вопросы с собеседований: Жизненный цикл UIViewController
• Поваренная книга SwiftUI: тексты и шрифты — часть 2
• Apple запустила на YouTube канал для разработчиков
• WWDC 2024 пройдет с 10 по 14 июня
• Делаем DVD-заставку на SwiftUI
•
![](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/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/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)
• Исходников нет, но мы не сдадимся: как и зачем я портировал более старый Android, чем стоял «с завода»?
• Инструментальные цепочки Gradle редко бывают хорошей идеей
• Context receivers — новые extension functions
• Работа с UI-автотестами под Android: от запрета мерджа к особенностям запуска
• Экспортируем иконки из Figma в проект одним кликом: история одной автоматизации
• Android 15 выйдет только летом, но «потрогать» ОС можно уже сейчас. Что интересного в тестовой версии?
• Кодогенерация токенов дизайн-системы для Android по Figma API
• К чему с годами приводит работа с Dependency Injection и Service Locator
• Line height в Android TextView: где не сходится с Figma, как мешает pixel-perfect, и как это решить
• Реализация Lazy Dependency Holder (Продвинутая ленивая инициализация зависимостей) для больших команд
• Android-разработчица. Как сделать первые шаги?
• Что нужно учить в 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/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/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.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)
• Анализ производительности React Native приложений: как выявить проблемы и улучшить перформанс
• Flutter Dev Podcast #45: Собеседования на позицию 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/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
![](https://habrastorage.org/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Продуктовый подход к pet-проекту или как я разработал музыкальное веб-приложение
• Адаптация мобильного приложения для пользователей скринридеров. Опыт Яндекс Лавки
• 6 лет из жизни инди-разработчика
• Инклюзивность и цифровая доступность в дизайне: почему это важно для всех
• Эволюция главного экрана: хаос, исследования и редизайн
• Сложная архитектура простых приложений
• Оценочные шкалы в UX-исследованиях
• Пишем рекомендательную систему музыки на Java
• Задача из Моего Собеседования в Amazon
• Ада Лавлейс и программирование
• Осознанный подход к метрикам
• Playtime Engineering хочет упростить создание музыки для детей
• 10 упражнений от боли в спине, которые помогут программистам
• Самые высокооплачиваемые вакансии марта в сфере разработки приложений
• Временное решение просуществовало в Windows уже 30 лет
• Как руководить командой Senior-инженеров
•
![](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)
• LinkedIn тестирует ленту с короткими видео
• Spotify тестирует видеокурсы для обучения всему — от создания музыки до Excel
• Евросоюз расследует несоблюдение Apple закона о Цифровых рынках
• Gamification in Product Design (UI/UX)
• The AppsFlyer Performance Index: 2024 Country Edition
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Умная квартира айтишника: хотел всё на Wi-Fi, но передумал
• Самый лучший в мире курс по Машинному обучению — Алгоритмы Машинного обучения с нуля
• Будка охраны или космический корабль
• Что делать, если твой заказчик — весы, или Как заговорить на одном языке с бытовой техникой
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
? Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.