🤖🏞️ Автоматизируем тестирование скриншотов для Compose через reflection
Тестирование скриншотов — это ценный метод проверки UI и предотвращения регрессий при обновлении существующих экранов или компонентов. Однако, как и у любого вида тестирования, у него есть недостаток, заключающийся в том, что он требует значительных временных затрат на написание и поддержку тестов.
Showkase
Одним из способов автоматизации тестирования скриншотов является использование Showkase, библиотеки Airbnb, созданной для создания браузера компонентов, который дополнительно позволяет автоматически тестировать все методы, помеченные @Preview, с помощью Paparazzi. Этот способ требует указания Showkase в качестве зависимости для каждого модуля, в котором есть любые превью, которые нужно покрыть тестами. Поскольку Showkase основан на генерации кода, это увеличит время сборки для всех этих модулей. Таким образом, использование его только для скриншот-тестов может оказаться не лучшим решением, поскольку это не его основная функция.
Reflection
Другой альтернативой является использование рефлексии для поиска всех превьюшек во время выполнения и динамического создания тестов. Для тестов будет использоваться библиотека Paparazzi, главным образом из-за того, что для запуска тестов не требуется эмулятор, что делает их более быстрыми и надежными.
Предлагаемое решение может работать с другими библиотеками тестирования скриншотов. Если вам интересны альтернативы — вот вам еще вариант.
Далее вас ждут реализация примера и немного кода.
#туториал
Тестирование скриншотов — это ценный метод проверки UI и предотвращения регрессий при обновлении существующих экранов или компонентов. Однако, как и у любого вида тестирования, у него есть недостаток, заключающийся в том, что он требует значительных временных затрат на написание и поддержку тестов.
Showkase
Одним из способов автоматизации тестирования скриншотов является использование Showkase, библиотеки Airbnb, созданной для создания браузера компонентов, который дополнительно позволяет автоматически тестировать все методы, помеченные @Preview, с помощью Paparazzi. Этот способ требует указания Showkase в качестве зависимости для каждого модуля, в котором есть любые превью, которые нужно покрыть тестами. Поскольку Showkase основан на генерации кода, это увеличит время сборки для всех этих модулей. Таким образом, использование его только для скриншот-тестов может оказаться не лучшим решением, поскольку это не его основная функция.
Reflection
Другой альтернативой является использование рефлексии для поиска всех превьюшек во время выполнения и динамического создания тестов. Для тестов будет использоваться библиотека Paparazzi, главным образом из-за того, что для запуска тестов не требуется эмулятор, что делает их более быстрыми и надежными.
Предлагаемое решение может работать с другими библиотеками тестирования скриншотов. Если вам интересны альтернативы — вот вам еще вариант.
Далее вас ждут реализация примера и немного кода.
#туториал
🥰11😁9❤8👍8👏8
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👍6
🧑🎓 Best Practices для Compose Navigation в мультимодульном проекте
В подопытном проекте есть Drawer navigation с экранами Articles, Settings и About. В многоэкранном проекте у каждого экрана должен быть свой отдельный модуль. В примере автор создал три отдельных модуля для каждого экрана и использовал их в модуле приложения для реализации базовой навигации.
Стартовый проект
Есть стартовый проект по ссылке Github, откуда можно загрузить код и получить проект из папки starter. Репозиторий Github также содержит final folder, который является окончательным проектом Navigation Compose.
Структура проекта
Чтобы получить общее представление о структуре модуля starter project: у него есть отдельный модуль для каждого экрана, и все эти модули добавляются как зависимости в app module.
Далее в статье вы найдете занятные куски кода проекта для глубокого понимания, что там происходит.
#туториал
В подопытном проекте есть Drawer navigation с экранами Articles, Settings и About. В многоэкранном проекте у каждого экрана должен быть свой отдельный модуль. В примере автор создал три отдельных модуля для каждого экрана и использовал их в модуле приложения для реализации базовой навигации.
Стартовый проект
Есть стартовый проект по ссылке Github, откуда можно загрузить код и получить проект из папки starter. Репозиторий Github также содержит final folder, который является окончательным проектом Navigation Compose.
Структура проекта
Чтобы получить общее представление о структуре модуля starter project: у него есть отдельный модуль для каждого экрана, и все эти модули добавляются как зависимости в app module.
Далее в статье вы найдете занятные куски кода проекта для глубокого понимания, что там происходит.
#туториал
👍3👾2❤1
🤔 #дайджест полезностей для мобильного разработчика
✳️ Миграция конфигурации сборки с Groovy на Kotlin — материал написан с акцентом на проекты Android на этапе перехода на Kotlin DSL
✳️ Unseen Dangers — скрытые угрозы безопасности мобильных приложений в библиотеках Android
✳️ Автоматизация сборок Android с помощью GitHub Actions — процесс настройки рабочего воркфлоу для создания отладочной версии приложения и релизной сборки
✳️ Добавляем кастомные Google Fonts в приложение — полный перечень действий для добавления шрифтов с использованием Jetpack Compose
✳️ Разбираемся с Ignite — что такое Ignite, почему его стоит выбирать и где применять
✳️ Миграция конфигурации сборки с Groovy на Kotlin — материал написан с акцентом на проекты Android на этапе перехода на Kotlin DSL
✳️ Unseen Dangers — скрытые угрозы безопасности мобильных приложений в библиотеках Android
✳️ Автоматизация сборок Android с помощью GitHub Actions — процесс настройки рабочего воркфлоу для создания отладочной версии приложения и релизной сборки
✳️ Добавляем кастомные Google Fonts в приложение — полный перечень действий для добавления шрифтов с использованием Jetpack Compose
✳️ Разбираемся с Ignite — что такое Ignite, почему его стоит выбирать и где применять
👍11🔥11🎉9👏8❤6
Нужно вывести каждое число в отдельной строке с указанием ее порядкового номера. Какой метод без var или val допускает итерацию со значением и с его позицией?
Anonymous Quiz
66%
.forEachIndexed()
17%
.forEach()
6%
.forIndexes()
11%
.withIndex()
🥱6❤5
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
🐘PHP
Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека шарписта
Библиотека мобильного разработчика
Библиотека хакера
Библиотека devops’a
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
Вакансии по DevOps & SRE
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook
🔸Instagram
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
🐘PHP
Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека шарписта
Библиотека мобильного разработчика
Библиотека хакера
Библиотека devops’a
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
Вакансии по DevOps & SRE
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
❤6👍1
🏃🏃♂️ Как ускорить сборку проекта и не остановить разработку
Видос о том, как спикер применил в iOS-проектах предкомпилированные зависимости в виде XCFramework с использованием CocoaPods, fastlane, GitLab CI и ускорил холодную сборку до 2 раз.
Содержание:
6:59 XCFramework
11:46 Публикация XCFramework с CocoaPods
13:14 Builder
14:07 Deploy_xcframework
15:21 Alamofire:podspec
16:45 Transform_podspec
17:59 Интеграция
19:46 Семантическое версионирование
21:09 Обратная совместимость
26:46 Ограничения и советы
32:41 Практика
35:41 Готовый проект
#видео
Видос о том, как спикер применил в iOS-проектах предкомпилированные зависимости в виде XCFramework с использованием CocoaPods, fastlane, GitLab CI и ускорил холодную сборку до 2 раз.
Содержание:
6:59 XCFramework
11:46 Публикация XCFramework с CocoaPods
13:14 Builder
14:07 Deploy_xcframework
15:21 Alamofire:podspec
16:45 Transform_podspec
17:59 Интеграция
19:46 Семантическое версионирование
21:09 Обратная совместимость
26:46 Ограничения и советы
32:41 Практика
35:41 Готовый проект
#видео
❤7🥰2
🍭🍭 Улучшения в отладке Swift 5.9
Swift 5.9 ввел ряд новых функций отладки в компилятор и отладчик LLDB.
Вот три изменения, которые могут помочь в ваших повседневных рабочих процессах отладки.
🍕 Более быстрый контроль переменных с помощью p и po
LLDB предоставляет сокращенный псевдоним команды p для проверки переменных и po для вызова свойства debugDescription объектов.
🍕 Поддержка параметров generic в выражениях
LLDB теперь поддерживает обращение к параметрам generic при вычислении выражения. Например:
func use(_ t: T) {
print(t) // break here
}
use(5)
use("Hello!")
При запуске po T.self, когда он перестанет использоваться, выведет Int при входе через первый вызов и String во втором.
🍕 Fine-grained информация для скоупа
В Swift 5.9 компилятор теперь использует более точную информацию ASTScope для генерации иерархии лексического скоупа при дебаге, что приводит к некоторым изменениям поведения в отладчике.
#новость
Swift 5.9 ввел ряд новых функций отладки в компилятор и отладчик LLDB.
Вот три изменения, которые могут помочь в ваших повседневных рабочих процессах отладки.
🍕 Более быстрый контроль переменных с помощью p и po
LLDB предоставляет сокращенный псевдоним команды p для проверки переменных и po для вызова свойства debugDescription объектов.
🍕 Поддержка параметров generic в выражениях
LLDB теперь поддерживает обращение к параметрам generic при вычислении выражения. Например:
func use(_ t: T) {
print(t) // break here
}
use(5)
use("Hello!")
При запуске po T.self, когда он перестанет использоваться, выведет Int при входе через первый вызов и String во втором.
🍕 Fine-grained информация для скоупа
В Swift 5.9 компилятор теперь использует более точную информацию ASTScope для генерации иерархии лексического скоупа при дебаге, что приводит к некоторым изменениям поведения в отладчике.
#новость
👍5❤3
Интерфейсы Kotlin и абстрактные классы очень похожи. Что такого может делать абстрактный класс, чего не могут интерфейсы?
Anonymous Quiz
13%
Только абстрактные классы могут наследоваться от нескольких суперклассов
43%
Только абстрактные классы могут хранить состояние
32%
Только абстрактные классы могут иметь абстрактные методы
12%
Только абстрактные классы наследуются подклассами
🎉10👍4❤3🔥1
🤔 #дайджест полезностей для мобильного разработчика
✳️ Kotlin и Virtual Threads — Kotlin на JDK 21 backend стал поддерживать виртуальные потоки
✳️ Flutter SDK с поддержкой платформы ОС Аврора — т. к. Flutter SDK для ОС Аврора не состоит в upstream, установка происходит отличным от основного метода установки
✳️ Async / Await Coroutines — как с помощью KMP-NativeCoroutines использовать собственные решения Swift (Async await, Combine или RxSwift) для асинхронного кода Kotlin
✳️ Gradle Release Notes — Java 21 теперь поддерживается для компиляции, тестирования и запуска таких проектов, а еще несколько полезных фиксов
✳️ Измеряем sequence — видос о том, насколько корректно правило CouldBeSequence, и в каких случаях использование sequence дает реальный выигрыш
✳️ Kotlin и Virtual Threads — Kotlin на JDK 21 backend стал поддерживать виртуальные потоки
✳️ Flutter SDK с поддержкой платформы ОС Аврора — т. к. Flutter SDK для ОС Аврора не состоит в upstream, установка происходит отличным от основного метода установки
✳️ Async / Await Coroutines — как с помощью KMP-NativeCoroutines использовать собственные решения Swift (Async await, Combine или RxSwift) для асинхронного кода Kotlin
✳️ Gradle Release Notes — Java 21 теперь поддерживается для компиляции, тестирования и запуска таких проектов, а еще несколько полезных фиксов
✳️ Измеряем sequence — видос о том, насколько корректно правило CouldBeSequence, и в каких случаях использование sequence дает реальный выигрыш
🥰22❤14🔥11👏8👍4
👩💻 Женщины в ИТ: проблемы и преимущества сложной профессии
Айтишницы поделились профессиональным опытом и рассказали о стереотипах и сложностях, с которыми им пришлось столкнуться на карьерном пути.
Читать статью
Айтишницы поделились профессиональным опытом и рассказали о стереотипах и сложностях, с которыми им пришлось столкнуться на карьерном пути.
Читать статью
🥱10❤9🥰2
🍏📚 ТОП-7 книг по Swift и iOS-разработке в 2023 году
Популярные книги по изучению Swift на русском и английском языках, опубликованные за последние несколько лет.
Читать статью
#книги
Популярные книги по изучению Swift на русском и английском языках, опубликованные за последние несколько лет.
Читать статью
#книги
👍6❤4😁2