Типобезопасная передача результатов между экранами в Compose с Jetpack Navigation
В этой небольшой статье я расскажу, как мы в проекте решили обеспечить типобезопасность при передаче результатов между экранами с применением библиотеки Compose Navigation. Мы рассмотрим механизм, который помогает избежать типичных ошибок и делает код более поддерживаемым.
Статья: https://habr.com/ru/companies/wildberries/articles/905238/
Платформа: Android
В этой небольшой статье я расскажу, как мы в проекте решили обеспечить типобезопасность при передаче результатов между экранами с применением библиотеки Compose Navigation. Мы рассмотрим механизм, который помогает избежать типичных ошибок и делает код более поддерживаемым.
Статья: https://habr.com/ru/companies/wildberries/articles/905238/
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
Сила KeyPath в SwiftUI: элегантный способ доступа к свойствам
В SwiftUI
Основы
•
•
•
Пример использования:
Преимущества в SwiftUI:
• Гибкость: Можно создавать универсальные представления, которые отображают различные свойства разных моделей данных.
• Сокращение кода: Уменьшается количество повторяющегося кода при работе с похожими структурами данных.
• Безопасность типов: Ошибки доступа к свойствам выявляются на этапе компиляции.
Использование
Статья: https://levelup.gitconnected.com/the-power-of-keypath-in-swiftui-aff57dc5afdd
Платформа: iOS
В SwiftUI
KeyPath позволяет обращаться к свойствам объектов динамически и безопасно. Это особенно полезно при создании универсальных компонентов и сокращении повторяющегося кода.Основы
KeyPath:•
KeyPath предоставляет доступ только для чтения к свойству•
WritableKeyPath позволяет читать и записывать значение свойства•
ReferenceWritableKeyPath используется для ссылочных типов (классов) и также поддерживает чтение и записьПример использования:
struct Person {
var name: String
var age: Int
}
let person = Person(name: "Alice", age: 30)
let nameKeyPath = \Person.name
print(person[keyPath: nameKeyPath]) // Выведет "Alice"Преимущества в SwiftUI:
• Гибкость: Можно создавать универсальные представления, которые отображают различные свойства разных моделей данных.
• Сокращение кода: Уменьшается количество повторяющегося кода при работе с похожими структурами данных.
• Безопасность типов: Ошибки доступа к свойствам выявляются на этапе компиляции.
Использование
KeyPath в SwiftUI делает код более чистым, модульным и легким для сопровождения.Статья: https://levelup.gitconnected.com/the-power-of-keypath-in-swiftui-aff57dc5afdd
Платформа: iOS
🤨1
Jetpack Compose 1.8 уже здесь - и он меняет правила игры
Jetpack Compose 1.8 представляет собой значительный шаг вперёд в развитии современного UI-инструментария для Android. Обновление включает в себя множество улучшений, направленных на повышение стабильности, удобства разработки и расширение функциональности.
• Одним из ключевых достижений является значительное сокращение количества экспериментальных API: с 170 в версии 1.7 до 70 в 1.8. Это свидетельствует о стремлении к стабилизации и зрелости фреймворка, что особенно важно для разработчиков, ориентированных на долгосрочную поддержку приложений.
• В области анимаций введён
• Для отслеживания видимости компонентов теперь доступен модификатор
• Поддержка HTML в Text-компонентах была расширена: теперь можно напрямую отображать такие теги, как
• Улучшена работа с текстом благодаря внедрению атрибута
• Функциональность автозаполнения была усовершенствована: достаточно указать тип содержимого через
В целом, Jetpack Compose 1.8 предлагает разработчикам более стабильную, гибкую и мощную платформу для создания современных Android-приложений.
Статья: https://medium.com/@eshagajjar7573/jetpack-compose-1-8-is-here-and-its-a-game-changer-9bf4ac02a562
Платформа: Android
👏: 307
Jetpack Compose 1.8 представляет собой значительный шаг вперёд в развитии современного UI-инструментария для Android. Обновление включает в себя множество улучшений, направленных на повышение стабильности, удобства разработки и расширение функциональности.
• Одним из ключевых достижений является значительное сокращение количества экспериментальных API: с 170 в версии 1.7 до 70 в 1.8. Это свидетельствует о стремлении к стабилизации и зрелости фреймворка, что особенно важно для разработчиков, ориентированных на долгосрочную поддержку приложений.
• В области анимаций введён
LookAheadScope, позволяющий автоматически анимировать изменения размеров и позиций компонентов без необходимости вручную прописывать анимации. Это упрощает создание плавных и отзывчивых интерфейсов.• Для отслеживания видимости компонентов теперь доступен модификатор
onLayoutRectChanged, который предоставляет информацию о расположении элемента на экране, облегчая реализацию логики, зависящей от видимости.• Поддержка HTML в Text-компонентах была расширена: теперь можно напрямую отображать такие теги, как
<ul> и <li>, без необходимости использования сторонних решений.• Улучшена работа с текстом благодаря внедрению атрибута
autoSize, который позволяет автоматически подстраивать размер текста под доступное пространство, включая возможность пошагового изменения размера.• Функциональность автозаполнения была усовершенствована: достаточно указать тип содержимого через
semantics, и система обеспечит соответствующее поведение, даже когда приложение находится в фоновом режиме.В целом, Jetpack Compose 1.8 предлагает разработчикам более стабильную, гибкую и мощную платформу для создания современных Android-приложений.
Статья: https://medium.com/@eshagajjar7573/jetpack-compose-1-8-is-here-and-its-a-game-changer-9bf4ac02a562
Платформа: Android
👏: 307
👍1
SwiftOpenAI - пакет Swift с открытым исходным кодом, предназначенный для удобного взаимодействия с публичным API OpenAI. Кроме того, SwiftOpenAI поддерживает различных провайдеров, совместимых с OpenAI, включая Anthropic, Gemini, Ollama, DeepSeek и пр.
SwiftOpenAI на GitHub: https://github.com/jamesrochabrun/SwiftOpenAI
Платформа: iOS
⭐️: 500
SwiftOpenAI на GitHub: https://github.com/jamesrochabrun/SwiftOpenAI
Платформа: iOS
⭐️: 500
👍1🔥1
Мантры программирования — это не догмы, а выражения
Это значит, что мы можем цитировать Кнута, говорящего, что преждевременная оптимизация — корень всех зол, и при этом считать, что производительность — это важная характеристика.
Мы можем понимать и применять разделение ответственности, но при этом видеть ценность локальности поведения.
Есть время для YAGNI, и есть время для воздержания от YAGNI.
Ни одно из этих положений не содержит логических противоречий. Пословицы заключают в себе небольшую толику мудрости в краткой фразе, но вам еще нужно научиться правильно применять эту мудрость.
Статья: https://apptractor.ru/info/articles/mantry-programmirovaniya-eto-ne-dogmy-a-vyrazheniya.html
Платформа: разработка
Это значит, что мы можем цитировать Кнута, говорящего, что преждевременная оптимизация — корень всех зол, и при этом считать, что производительность — это важная характеристика.
Мы можем понимать и применять разделение ответственности, но при этом видеть ценность локальности поведения.
Есть время для YAGNI, и есть время для воздержания от YAGNI.
Ни одно из этих положений не содержит логических противоречий. Пословицы заключают в себе небольшую толику мудрости в краткой фразе, но вам еще нужно научиться правильно применять эту мудрость.
Статья: https://apptractor.ru/info/articles/mantry-programmirovaniya-eto-ne-dogmy-a-vyrazheniya.html
Платформа: разработка
The Composable Architecture: мои 3 года использования
TCA — это сторонний фреймворк, не поддерживаемый Apple, и он зависит всего от двух гениальных парней, на которых вы, по сути, ставите всё — всю свою кодовую базу. Это фреймворк, основанный на функциональном программировании, который противоречит объектно-ориентированному наследию и влиянию SwiftUI. Возможно, вы будете более продуктивны в работе с новыми разработчиками и добавлении функций с другой архитектурой и все же сможете достичь желаемой дисциплины с помощью MVVM или Чистой архитектуры.
Статья: https://apptractor.ru/info/articles/the-composable-architecture-moi-3-goda-ispolzovaniya.html
Платформа: iOS
TCA — это сторонний фреймворк, не поддерживаемый Apple, и он зависит всего от двух гениальных парней, на которых вы, по сути, ставите всё — всю свою кодовую базу. Это фреймворк, основанный на функциональном программировании, который противоречит объектно-ориентированному наследию и влиянию SwiftUI. Возможно, вы будете более продуктивны в работе с новыми разработчиками и добавлении функций с другой архитектурой и все же сможете достичь желаемой дисциплины с помощью MVVM или Чистой архитектуры.
Статья: https://apptractor.ru/info/articles/the-composable-architecture-moi-3-goda-ispolzovaniya.html
Платформа: iOS
Прячем код по-настоящему: тёмные уголки обфускации R8 и ProGuard
Обфускация — важная часть защиты Android-приложений. Однако даже если вы используете R8 или ProGuard - это не гарантия высокой устойчивости к тому что вас код не взломают. Стандартная настройка обфускации довольно простая и нацелена на уменьшение размера сборки, а не повышение защиты от взлома. В этой статье разберу как происходит обфускация в стандартной конфигурации, как можно её сделать сложнее для разбора, а по итогу и уникальной для каждой сборки.
Статья: https://habr.com/ru/articles/909638/
Платформа: Android
Обфускация — важная часть защиты Android-приложений. Однако даже если вы используете R8 или ProGuard - это не гарантия высокой устойчивости к тому что вас код не взломают. Стандартная настройка обфускации довольно простая и нацелена на уменьшение размера сборки, а не повышение защиты от взлома. В этой статье разберу как происходит обфускация в стандартной конфигурации, как можно её сделать сложнее для разбора, а по итогу и уникальной для каждой сборки.
Статья: https://habr.com/ru/articles/909638/
Платформа: Android
•
(iOS Ru) Учим Metal и image processing лишь бы не верстать на iOS•
(iOS Ru) Race Condition: проблема гонки потоков — что это и как избежать?•
(iOS Ru) Под капотом iOS-крешей•
(iOS En) Resizable ScrollView Header | Scroll To Hide Header - SwiftUI•
(iOS En) SwiftUI Theme Switcher in 3 Minutes – Light & Dark Mode Made Easy•
(iOS En) Building emoji reactions in 5 minutes with SwiftUI •
(iOS En) Customized Paywall using Native SwiftUI StoreKit APIs•
(iOS En) Apple Engineer Shows How To Build a SwiftUI Sleep Tracker•
(iOS En) 3 Ways to Initialize @State in SwiftUI •
(And Ru) Тестирование Compose по-новому: простота, надежность, гибкость•
(And En) The Android Show: I/O Edition•
(And En) Now in Android: 116 – Google I/O, Gemini, and Jetpack Compose 1.8•
(And En) What's new in Android Studio Meerkat Feature Drop•
(And En) Android Testing Strategies•
(And En) Tools and patterns for scalable Android app testing•
(And En) 5 Anti-Patterns With Coroutines & Flows You MUST Avoid!•
(And En) How Kotlin is Powering TV Broadcasts Worldwide•
(And En) Android & Kotlin Development Masterclass – Full Course•
(And En) Build your App from Scratch without Material 3 Color System•
(Crs Ru) Kotlin Multiplatform vs Compose Multiplatform: отличия, способы создания и как запустить на iOS•
(Crs Ru) Готов ли Compose iOS к продакшену?•
(Crs En) Kotlin Multiplatform: Have your code and eat it too•
(Dev Ru) Разработчик HarmonyOS Next про ArkTS и HarmonyOS•
(Dev Ru) Язык программирования Groovy: JVM языки, Java, Kotlin, Gradle, DSL•
(Tcn Ru) Как работают нейроинтерфейсы: киборги, Neuralink, brain-computer interface•
(Dev En) Design Messenger - Mobile System Design Mock Interview•
(Dev En) C++ Course: Build an Audio PluginПрошлогодние видео:
•
(iOS Ru) TextField с автодополнением•
(iOS Ru) SwiftUI-навигация: просто, нативно и декларативно•
(iOS Ru) Удивительный мир внутри .ipa•
(iOS Ru) Core Motion framework в финансовых приложениях•
(And Ru) Путешествие к центру Композиции•
(And Ru) Scout: новый фреймворк для ускоренного и безболезненного управления зависимостями•
(And Ru) Компиляторные плагины: модификация и анализ Сompose•
(And Ru) Как я code coverage внедрял да Gradle plugin для baseline писал•
(Dev Ru) Грабим Дома на Собеседовании в Google (+ другие вопросы с собеседований)Please open Telegram to view this post
VIEW IN TELEGRAM
WikWok - это красивое и функциональное приложение, которое превращает чтение Википедии в увлекательную ленту статей в стиле TikTok. Доступно на iOS, Android, Macos, Windows, Linux и в веб.
WikWok на GitHub: https://github.com/terrakok/WikWok
Платформа: Android
⭐️: 568
WikWok на GitHub: https://github.com/terrakok/WikWok
Платформа: Android
⭐️: 568
❤1
MagicMirror - умное зеркало своими руками
Подробная инструкция по созданию собственного MagicMirror — умного зеркала, которое отображает время, погоду, новости и другую полезную информацию прямо на поверхности зеркала.
🔧 Что входит в проект:
• Raspberry Pi в качестве основного контроллера
• Монитор за полупрозрачным зеркалом
• Корпус с элементами, напечатанными на 3D-принтере
• Настройка программного обеспечения MagicMirror² и добавление модулей для отображения различной информации.
Этот проект требует базовых навыков в электронике и программировании, а также некоторого времени на сборку и настройку. Однако результат стоит затраченных усилий: вы получите стильный и функциональный элемент интерьера, который можно адаптировать под свои нужды.
Если вы ищете интересный DIY-проект на выходные, создание MagicMirror может стать отличным выбором.
Статья: https://nerdiy.de/en/howto-magicmirror-build-your-own-magicmirror/
Платформа: интернет вещей
Подробная инструкция по созданию собственного MagicMirror — умного зеркала, которое отображает время, погоду, новости и другую полезную информацию прямо на поверхности зеркала.
🔧 Что входит в проект:
• Raspberry Pi в качестве основного контроллера
• Монитор за полупрозрачным зеркалом
• Корпус с элементами, напечатанными на 3D-принтере
• Настройка программного обеспечения MagicMirror² и добавление модулей для отображения различной информации.
Этот проект требует базовых навыков в электронике и программировании, а также некоторого времени на сборку и настройку. Однако результат стоит затраченных усилий: вы получите стильный и функциональный элемент интерьера, который можно адаптировать под свои нужды.
Если вы ищете интересный DIY-проект на выходные, создание MagicMirror может стать отличным выбором.
Статья: https://nerdiy.de/en/howto-magicmirror-build-your-own-magicmirror/
Платформа: интернет вещей
👍2❤1
10 трюков Jetpack Compose, о которых вы, вероятно, не знаете
Jetpack Compose произвел революцию в разработке пользовательских интерфейсов для Android благодаря своему декларативному и интуитивно понятному подходу. Но даже для опытных разработчиков многие мощные функции и скрытые жемчужины остаются незамеченными. В этой статье мы рассмотрим 10 недооцененных или малоизвестных трюков с пользовательским интерфейсом в Jetpack Compose, которые помогут вам создавать более эффективные, красивые и удобные в обслуживании пользовательские интерфейсы.
1. Анимируйте видимости с помощью переходов Enter/Exit
2. Используйте модификатора Layout для создания кастомных макетов
3. Разделяйте элементы в LazyColumn
4. Используйте drawBehind для расширения фонового рисунка за пределы границ
5. Закрепляйте заголовки в LazyColumn с помощью stickyHeader
6. Используйте rememberUpdatedState, чтобы избежать устаревших лямбд
7. Не забывайте о pointerInput для кастомных жестов
8. Прокручивайте любой компонент с помощью Modifier.scrollable
9. Используйте CompositionLocal для тематического поведения
10. Используйте Modifier.graphicsLayer для создания эффектов
Статья: https://apptractor.ru/develop/10-tryukov-jetpack-compose.html
Платформа: Android
Jetpack Compose произвел революцию в разработке пользовательских интерфейсов для Android благодаря своему декларативному и интуитивно понятному подходу. Но даже для опытных разработчиков многие мощные функции и скрытые жемчужины остаются незамеченными. В этой статье мы рассмотрим 10 недооцененных или малоизвестных трюков с пользовательским интерфейсом в Jetpack Compose, которые помогут вам создавать более эффективные, красивые и удобные в обслуживании пользовательские интерфейсы.
1. Анимируйте видимости с помощью переходов Enter/Exit
2. Используйте модификатора Layout для создания кастомных макетов
3. Разделяйте элементы в LazyColumn
4. Используйте drawBehind для расширения фонового рисунка за пределы границ
5. Закрепляйте заголовки в LazyColumn с помощью stickyHeader
6. Используйте rememberUpdatedState, чтобы избежать устаревших лямбд
7. Не забывайте о pointerInput для кастомных жестов
8. Прокручивайте любой компонент с помощью Modifier.scrollable
9. Используйте CompositionLocal для тематического поведения
10. Используйте Modifier.graphicsLayer для создания эффектов
Статья: https://apptractor.ru/develop/10-tryukov-jetpack-compose.html
Платформа: Android
❤2👍1
ErrorKit - сообщения об ошибках Swift, удобные для человека
Несмотря на элегантный дизайн Swift, системные сообщения об ошибках часто бывают загадочными и бесполезными. Вместо того чтобы просто жаловаться, я создал ErrorKit, инструмент, который отображает эти сообщения в виде понятных человеку описаний. Но обработка всей экосистемы Apple - слишком большая задача для одного человека, это должна быть работа сообщества.
В этом посте я расскажу о том, как я создал основу для улучшения описаний ошибок, и приглашаю вас присоединиться ко мне в создании всеобъемлющего словаря удобных сообщений об ошибках для разработчиков Swift.
Статья: https://apptractor.ru/info/articles/errorkit.html
Платформа: iOS
Несмотря на элегантный дизайн Swift, системные сообщения об ошибках часто бывают загадочными и бесполезными. Вместо того чтобы просто жаловаться, я создал ErrorKit, инструмент, который отображает эти сообщения в виде понятных человеку описаний. Но обработка всей экосистемы Apple - слишком большая задача для одного человека, это должна быть работа сообщества.
В этом посте я расскажу о том, как я создал основу для улучшения описаний ошибок, и приглашаю вас присоединиться ко мне в создании всеобъемлющего словаря удобных сообщений об ошибках для разработчиков Swift.
Статья: https://apptractor.ru/info/articles/errorkit.html
Платформа: iOS
👍3
Xtool - кроссплатформенная среда разработки, замена Xcode. Создавайте и развертывайте приложения для iOS с SwiftPM на Linux, Windows и macOS.
В нем есть:
• Сборка пакета SwiftPM в приложение для iOS
• Подпись и установка приложений для iOS
• Взаимодействие с Apple Developer Services программным способом
Xtool на GitHub: https://github.com/xtool-org/xtool
Платформа: iOS
⭐️: 2.4K
В нем есть:
• Сборка пакета SwiftPM в приложение для iOS
• Подпись и установка приложений для iOS
• Взаимодействие с Apple Developer Services программным способом
Xtool на GitHub: https://github.com/xtool-org/xtool
Платформа: iOS
⭐️: 2.4K
👍1
Новый плагин KMP для IntelliJ IDEA и Android Studio
JetBrains выпустил бета-версию нового плагина KMP для IntelliJ IDEA и Android Studio. Этот плагин упрощает все этапы работы с KMP, от настройки проекта до кроссплатформенной разработки и предварительного просмотра пользовательского интерфейса Compose.
Что нового:
• Встроенный расширенный визард для новых проектов — поддерживает все целевые комбинации Android, iOS, десктоп, веб и сервер
• Предварительные проверки — когда вы открываете проект, плагин автоматически запускает проверку окружения
• Готовность к запуску — после индексации плагин автоматически генерирует конфигурации запуска для всех платформ, доступных в вашем проекте, — Android, iOS, web, desktop и server
• Поддержка языков — для проектов с Kotlin и Swift плагин обеспечивает межъязыковую навигацию, подсветку синтаксиса, быстрое документирование и отладку в вашей IDE
• Поддержка Compose Multiplatform — Compose Multiplatform для iOS недавно получил статус Stable, что позволяет уверенно создавать красивые общие пользовательские интерфейсы для использования в производственных условиях на iOS, Android и настольных компьютерах
• Горячая перезагрузка Compose — быстрая итерация является ключевым моментом при создании пользовательских интерфейсов, с помощью Compose Hot Reload вы можете мгновенно увидеть изменения в пользовательском интерфейсе, не перезапуская приложение и не теряя его состояние
Новость: https://apptractor.ru/info/news/novyy-plagin-kmp-dlya-intellij-idea-i-android-studio.html
Платформа: кроссплатформа
JetBrains выпустил бета-версию нового плагина KMP для IntelliJ IDEA и Android Studio. Этот плагин упрощает все этапы работы с KMP, от настройки проекта до кроссплатформенной разработки и предварительного просмотра пользовательского интерфейса Compose.
Что нового:
• Встроенный расширенный визард для новых проектов — поддерживает все целевые комбинации Android, iOS, десктоп, веб и сервер
• Предварительные проверки — когда вы открываете проект, плагин автоматически запускает проверку окружения
• Готовность к запуску — после индексации плагин автоматически генерирует конфигурации запуска для всех платформ, доступных в вашем проекте, — Android, iOS, web, desktop и server
• Поддержка языков — для проектов с Kotlin и Swift плагин обеспечивает межъязыковую навигацию, подсветку синтаксиса, быстрое документирование и отладку в вашей IDE
• Поддержка Compose Multiplatform — Compose Multiplatform для iOS недавно получил статус Stable, что позволяет уверенно создавать красивые общие пользовательские интерфейсы для использования в производственных условиях на iOS, Android и настольных компьютерах
• Горячая перезагрузка Compose — быстрая итерация является ключевым моментом при создании пользовательских интерфейсов, с помощью Compose Hot Reload вы можете мгновенно увидеть изменения в пользовательском интерфейсе, не перезапуская приложение и не теряя его состояние
Новость: https://apptractor.ru/info/news/novyy-plagin-kmp-dlya-intellij-idea-i-android-studio.html
Платформа: кроссплатформа
KStorage — единый подход к key-value хранилищам на Kotlin Multiplatform
Key-Value хранилища — это очень удобно... пока вам не захочется большего.
SharedPreferences на Android, DataStore, NSUserDefaults на iOS, Multiplatform Settings, локальные файлы или вообще SQL - под все эти варианты нужно писать специфичный код.
Каждое из этих апи нуждается в создании дополнительных оберток, репозиториев, для повышения абстракции и упрощения замены конкретных библиотек.
KStorage — ультимативная обёртка, которая решает эту проблему. Библиотека позволяет создавать обёртки для Key-Value хранилищ, таких как DataStore. Также можно создавать Key-Value хранилище, где ключ — это название файла, а значение — это его сериализуемое значение.
Более того, вы даже можете спокойно сделать обёртку над SQL-запросом. Например, для создания пользователя, обновления или удаления.
Статья: https://habr.com/ru/articles/910392/
Платформа: Android/кроссплатформа
Key-Value хранилища — это очень удобно... пока вам не захочется большего.
SharedPreferences на Android, DataStore, NSUserDefaults на iOS, Multiplatform Settings, локальные файлы или вообще SQL - под все эти варианты нужно писать специфичный код.
Каждое из этих апи нуждается в создании дополнительных оберток, репозиториев, для повышения абстракции и упрощения замены конкретных библиотек.
KStorage — ультимативная обёртка, которая решает эту проблему. Библиотека позволяет создавать обёртки для Key-Value хранилищ, таких как DataStore. Также можно создавать Key-Value хранилище, где ключ — это название файла, а значение — это его сериализуемое значение.
Более того, вы даже можете спокойно сделать обёртку над SQL-запросом. Например, для создания пользователя, обновления или удаления.
Статья: https://habr.com/ru/articles/910392/
Платформа: Android/кроссплатформа
Хабр
KStorage — единый подход к key-value хранилищам на Kotlin Multiplatform
Key-Value хранилища — это очень удобно... пока вам не захочется большего. SharedPreferences на Android, DataStore, NSUserDefaults на iOS, Multiplatform Settings, локальные файлы или вообще SQL - под...
🤡1
Когда отладчик Swift лжет: скрытая стоимость компиляторных оптимизаций
Итак, я создаю приложение SwiftUI, а в нем параллельно вызываю две конечные точки бэкенда с помощью async let. Оба возвращают массивы пользователей, и я хочу объединить их результаты в операторе switch. Достаточно просто, верно?
Оказалось, что да, но при этом немного запутанно.
Во время отладки я заметил нечто странное: один из моих массивов (
Так в чем же дело? Неужели Swift съел мой массив? Это ошибка в моем API-клиенте? Или что-то более глубокое?
Статья: https://apptractor.ru/info/articles/kogda-otladchik-swift-lzhet.html
Платформа: iOS
Итак, я создаю приложение SwiftUI, а в нем параллельно вызываю две конечные точки бэкенда с помощью async let. Оба возвращают массивы пользователей, и я хочу объединить их результаты в операторе switch. Достаточно просто, верно?
Оказалось, что да, но при этом немного запутанно.
Во время отладки я заметил нечто странное: один из моих массивов (
users2) оказался загадочно пуст прямо перед оператором возврата, хотя я только что перебирал его и видел все правильные данные!Так в чем же дело? Неужели Swift съел мой массив? Это ошибка в моем API-клиенте? Или что-то более глубокое?
Статья: https://apptractor.ru/info/articles/kogda-otladchik-swift-lzhet.html
Платформа: iOS
🔥1
ZenTone - библиотека для Android, которая генерирует звуковые сигналы определенной частоты и громкости.
ZenTone на GitHub: https://github.com/nisrulz/zentone
Платформа: Android
⭐️: 123
ZenTone на GitHub: https://github.com/nisrulz/zentone
Платформа: Android
⭐️: 123
Видим невидимое: контроль качества Android-библиотек через объектив AppTracer Lite SDK
Мы усиленно работаем над качеством нашего SDK, и одним из важных аспектов стал контроль работы SDK на устройствах пользователей. Было решено собирать краши и перформанс-метрики. Для этого отлично подходит новый инструмент AppTracer Lite SDK, разработанный в VK. Сейчас он доступен только внутри VK.
В статье я расскажу о самом инструменте, о том, для чего его можно использовать, и поделюсь подводными камнями, с которыми я столкнулся при разработке. Подход, описанный тут, универсален, при рассказе я буду говорить вещи, применимые к любой библиотеке.
Статья: https://habr.com/ru/companies/vk/articles/911120/
Платформа: Android
Мы усиленно работаем над качеством нашего SDK, и одним из важных аспектов стал контроль работы SDK на устройствах пользователей. Было решено собирать краши и перформанс-метрики. Для этого отлично подходит новый инструмент AppTracer Lite SDK, разработанный в VK. Сейчас он доступен только внутри VK.
В статье я расскажу о самом инструменте, о том, для чего его можно использовать, и поделюсь подводными камнями, с которыми я столкнулся при разработке. Подход, описанный тут, универсален, при рассказе я буду говорить вещи, применимые к любой библиотеке.
Статья: https://habr.com/ru/companies/vk/articles/911120/
Платформа: Android
❤1
Мечтают ли андроиды о Robolectric? Разбираем фреймворк по косточкам
Robolectric — это мощный инструмент для UI‑тестирования Android‑кода без эмулятора. Когда я использовал Robolectric в работе, испытал удивление от того, как работает библиотека.
Помимо возможности в юнит‑тестах работать с Android‑компонентами, Robolectric позволяет работать с View и получать из неё Bitmap, что решает не только задачу проверки взаимодействия с View, но и позволяет проверить отображение экрана. И хотя в Android‑комьюнити у Robolectric неоднозначная репутация из‑за трудностей совместимости с другими библиотеками, его почти бесценные возможности пробудили любопытство копнуть глубже и осмыслить этот инструмент.
Статья: https://habr.com/ru/companies/alfa/articles/910226/
Платформа: Android
Robolectric — это мощный инструмент для UI‑тестирования Android‑кода без эмулятора. Когда я использовал Robolectric в работе, испытал удивление от того, как работает библиотека.
Помимо возможности в юнит‑тестах работать с Android‑компонентами, Robolectric позволяет работать с View и получать из неё Bitmap, что решает не только задачу проверки взаимодействия с View, но и позволяет проверить отображение экрана. И хотя в Android‑комьюнити у Robolectric неоднозначная репутация из‑за трудностей совместимости с другими библиотеками, его почти бесценные возможности пробудили любопытство копнуть глубже и осмыслить этот инструмент.
Статья: https://habr.com/ru/companies/alfa/articles/910226/
Платформа: Android
Комбинируем жесты и анимации в SwiftUI
В статье демонстрируют, как объединение жестов и анимаций в SwiftUI может повысить интерактивность и отзывчивость пользовательского интерфейса. Они начинают с простого примера, где изображение перемещается в соответствии с положением пальца пользователя, используя модификатор
Статья: https://www.createwithswift.com/combining-gestures-and-animations-with-swiftui/
Платформа: iOS
В статье демонстрируют, как объединение жестов и анимаций в SwiftUI может повысить интерактивность и отзывчивость пользовательского интерфейса. Они начинают с простого примера, где изображение перемещается в соответствии с положением пальца пользователя, используя модификатор
position и DragGesture. Затем они усложняют пример, добавляя анимацию возврата объекта в исходное положение с помощью withAnimation(.spring()), что делает взаимодействие более естественным и плавным. Этот подход подчеркивает важность визуальной обратной связи и демонстрирует, как SwiftUI позволяет легко создавать динамичные и интуитивно понятные интерфейсы.Статья: https://www.createwithswift.com/combining-gestures-and-animations-with-swiftui/
Платформа: iOS
Forwarded from Mobile Development by AppTractor
Google анонсирует Jetpack Navigation 3
Долгие годы разработчики жаловались на Jetpack Navigation (2) и теперь компания выпускает абсолютно новую библиотеку навигации, которая должна устранить все предыдущие проблемы.
Основные принципы:
• Вы владеете стеком: Вы, разработчик, а не библиотека, владеете и контролируете бэкстек.
• Не мешает: Nav3 спроектирована как открытая и расширяемая библиотека, предоставляя вам строительные блоки и полезные настройки по умолчанию.
• Выбираете свои строительные блоки: Вместо того чтобы встраивать все поведение в библиотеку, Nav3 предлагает небольшие компоненты, которые вы можете комбинировать для создания более сложной функциональности.
Ключевые особенности
• Анимации
• Адаптивные макеты
• Разграничение состояний
• Модульность
Есть пример кода и типовые решения.
В настоящее время Nav3 находится в стадии альфа-версии, что означает, что API может быть изменен на основе отзывов.
Долгие годы разработчики жаловались на Jetpack Navigation (2) и теперь компания выпускает абсолютно новую библиотеку навигации, которая должна устранить все предыдущие проблемы.
Основные принципы:
• Вы владеете стеком: Вы, разработчик, а не библиотека, владеете и контролируете бэкстек.
• Не мешает: Nav3 спроектирована как открытая и расширяемая библиотека, предоставляя вам строительные блоки и полезные настройки по умолчанию.
• Выбираете свои строительные блоки: Вместо того чтобы встраивать все поведение в библиотеку, Nav3 предлагает небольшие компоненты, которые вы можете комбинировать для создания более сложной функциональности.
Ключевые особенности
• Анимации
• Адаптивные макеты
• Разграничение состояний
• Модульность
Есть пример кода и типовые решения.
В настоящее время Nav3 находится в стадии альфа-версии, что означает, что API может быть изменен на основе отзывов.