AppFiles - Mobile Development
Расширенные архитектурные правила в SwiftLint В статье автор сначала троллит идею использования SwiftLint для архитектурных проверок. Но потом внезапно... показывает, как это можно реально реализовать. Это не совсем production-ready подход, но зато классный…
А вот и он: https://apptractor.ru/info/articles/rasshirennye-arhitekturnye-pravila-v-swiftlint.html
Но это только первая часть с основами, практика будет, как пишут, во второй части.
Но это только первая часть с основами, практика будет, как пишут, во второй части.
👍1
Learn Kotlin Flow - проект для тех, кто хочет начать работать с Kotlin Flow. Автор собрал практические примеры того, как использовать потоки в реальных приложениях. Плюс у него есть блог, где он публикует статьи о работе с Flow.
Learn Kotlin Flow на GitHub: https://github.com/amitshekhariitbhu/Learn-Kotlin-Flow
Платформа: Android
⭐️: 478
Learn Kotlin Flow на GitHub: https://github.com/amitshekhariitbhu/Learn-Kotlin-Flow
Платформа: Android
⭐️: 478
❤1
Как работает Robolectric и почему это важно знать
Представьте, что можно тестировать android-код без эмулятора, запуская тесты за секунды вместо минут. Именно это обещает Robolectric — библиотека, которую либо любят, либо ненавидят, но точно не игнорируют.
За кажущейся простотой «просто добавь зависимость» скрывается удивительная магия модификации байткода, о которой не рассказывают в статьях. Предлагаю разобраться, как на самом деле работает магия Robolectric и почему эти знания пригодятся любому android-разработчику.
Статья: https://habr.com/ru/companies/tbank/articles/902180/
Платформа: Android/тестирование
Представьте, что можно тестировать android-код без эмулятора, запуская тесты за секунды вместо минут. Именно это обещает Robolectric — библиотека, которую либо любят, либо ненавидят, но точно не игнорируют.
За кажущейся простотой «просто добавь зависимость» скрывается удивительная магия модификации байткода, о которой не рассказывают в статьях. Предлагаю разобраться, как на самом деле работает магия Robolectric и почему эти знания пригодятся любому android-разработчику.
Статья: https://habr.com/ru/companies/tbank/articles/902180/
Платформа: Android/тестирование
❤1
Архитектурный линтинг для Swift: часть 2
Продолжение первой статьи - автор рассказывает про сделанный ими Harmonize, первый архитектурный линтер для Swift. Harmonize позволяет внедрить любое архитектурное или структурное правило линтинга всего в нескольких строках кода, не требуя крутого обучения или мастерского владения регулярными выражениями. В отличие от SwiftLint, правила линтинга просто пишутся в виде юнит-тестов, а не регулярных выражений, и каждое правило имеет полный доступ к вашей кодовой базе (и AST) с помощью удобного, идиоматического DSL. Точно так же, как вы написали бы тест для функции вашего приложения, теперь вы пишете тесты и делаете утверждения об архитектуре вашего кода.
Статья: https://apptractor.ru/info/articles/arhitekturnyy-linting-dlya-swift-chast-2.html
Платформа: iOS
Продолжение первой статьи - автор рассказывает про сделанный ими Harmonize, первый архитектурный линтер для Swift. Harmonize позволяет внедрить любое архитектурное или структурное правило линтинга всего в нескольких строках кода, не требуя крутого обучения или мастерского владения регулярными выражениями. В отличие от SwiftLint, правила линтинга просто пишутся в виде юнит-тестов, а не регулярных выражений, и каждое правило имеет полный доступ к вашей кодовой базе (и AST) с помощью удобного, идиоматического DSL. Точно так же, как вы написали бы тест для функции вашего приложения, теперь вы пишете тесты и делаете утверждения об архитектуре вашего кода.
Статья: https://apptractor.ru/info/articles/arhitekturnyy-linting-dlya-swift-chast-2.html
Платформа: iOS
👍2
Как правильно обрабатывать UI-события в Kotlin ViewModel
Если вы когда-либо пытались показать Toast, Snackbar или осуществить навигацию между экранами из ViewModel — вы знаете, насколько это может быть неудобно. Особенно с LiveData: события могут дублироваться при повороте экрана или при повторной подписке.
В статье описан чистый и удобный способ организации UI-событий с помощью sealed-классов и
Статья: https://vaibhav3011.medium.com/handling-ui-actions-the-right-way-in-kotlin-viewmodels-119a06bb43ef
Платформа: Android
👏: 145
Если вы когда-либо пытались показать Toast, Snackbar или осуществить навигацию между экранами из ViewModel — вы знаете, насколько это может быть неудобно. Особенно с LiveData: события могут дублироваться при повороте экрана или при повторной подписке.
В статье описан чистый и удобный способ организации UI-событий с помощью sealed-классов и
SharedFlow.Статья: https://vaibhav3011.medium.com/handling-ui-actions-the-right-way-in-kotlin-viewmodels-119a06bb43ef
Платформа: Android
👏: 145
👎1
История K2 Mode и как он работает
JetBrains представила K2 Mode — новое поколение поддержки Kotlin в IntelliJ IDEA. Это не просто улучшение, а почти полная переработка архитектуры плагина Kotlin, направленная на повышение стабильности, производительности и поддержку будущих возможностей языка.
K2 Mode — это новый механизм анализа кода Kotlin в IntelliJ IDEA, основанный на интеграции с компилятором K2. В отличие от предыдущей реализации (K1), K2 Mode использует общую семантическую модель как для компилятора, так и для IDE, что обеспечивает более точный и согласованный анализ кода. Это позволяет IDE быстрее и надежнее выполнять подсветку синтаксиса, автодополнение, рефакторинг и другие функции.
Ранее JetBrains приходилось поддерживать отдельные реализации анализа кода для компилятора и IDE, что приводило к дублированию усилий и потенциальным несоответствиям. С K2 Mode эта проблема решена: теперь IDE и компилятор "понимают" язык одинаково. Это особенно важно для поддержки новых возможностей Kotlin 2.0 и выше.
Статья: https://blog.jetbrains.com/idea/2025/04/the-story-behind-k2-mode-and-how-it-works/
Платформа: Android
JetBrains представила K2 Mode — новое поколение поддержки Kotlin в IntelliJ IDEA. Это не просто улучшение, а почти полная переработка архитектуры плагина Kotlin, направленная на повышение стабильности, производительности и поддержку будущих возможностей языка.
K2 Mode — это новый механизм анализа кода Kotlin в IntelliJ IDEA, основанный на интеграции с компилятором K2. В отличие от предыдущей реализации (K1), K2 Mode использует общую семантическую модель как для компилятора, так и для IDE, что обеспечивает более точный и согласованный анализ кода. Это позволяет IDE быстрее и надежнее выполнять подсветку синтаксиса, автодополнение, рефакторинг и другие функции.
Ранее JetBrains приходилось поддерживать отдельные реализации анализа кода для компилятора и IDE, что приводило к дублированию усилий и потенциальным несоответствиям. С K2 Mode эта проблема решена: теперь IDE и компилятор "понимают" язык одинаково. Это особенно важно для поддержки новых возможностей Kotlin 2.0 и выше.
Статья: https://blog.jetbrains.com/idea/2025/04/the-story-behind-k2-mode-and-how-it-works/
Платформа: Android
❤1
SnapshotTestingMacros - тонкая прослойка над Swift Testing и Swift SnapshotTesting, позволяющий делать снепшоты на основе макросов, используя синтаксис, похожий на Swift Testing.
Подобно тому, как в Swift Testing есть
Это позволяет быстро создавать снепшоты, просто помечая функции, возвращающие представления.
В простейшем случае это все, что нужно для снепшот теста:
SnapshotTestingMacros на GitHub: https://github.com/adammcarter/swift-snapshot-testing-macros
Платформа: iOS
⭐️: 31
Подобно тому, как в Swift Testing есть
@Suite и @Test, SnapshotTestingMacros использует @SnapshotSuite и @SnapshotTest для разметки кода.Это позволяет быстро создавать снепшоты, просто помечая функции, возвращающие представления.
В простейшем случае это все, что нужно для снепшот теста:
// ✅ Create a simple snapshot test for some SwiftUI text.
@Suite
@SnapshotSuite
struct MySnapshots {
@SnapshotTest
func myView() -> some View {
Text("Some text")
}
}
SnapshotTestingMacros на GitHub: https://github.com/adammcarter/swift-snapshot-testing-macros
Платформа: iOS
⭐️: 31
👍3
Optional vs Nullable на стыке технологий
При разработке современных приложений важнейшую роль играет качество клиент‑серверного взаимодействия. Для достижения стабильной связи между мобильными и веб приложениями и серверной частью необходимо стремиться к созданию надежного и эффективного механизма обмена данными. Это подразумевает создание устойчивого API, которое трудно сломать даже при изменениях в архитектуре сервера, а также легкость интеграции новых клиентов.
Кроме того, одним из ключевых приоритетов становится повышение продуктивности команд разработчиков. Важно сократить цикл разработки новых функций и обновлений, позволив разработчикам быстро вносить изменения и выпускать обновления, ускоряя процесс итераций.
Статья: https://habr.com/ru/articles/902552/
Платформа: разработка
При разработке современных приложений важнейшую роль играет качество клиент‑серверного взаимодействия. Для достижения стабильной связи между мобильными и веб приложениями и серверной частью необходимо стремиться к созданию надежного и эффективного механизма обмена данными. Это подразумевает создание устойчивого API, которое трудно сломать даже при изменениях в архитектуре сервера, а также легкость интеграции новых клиентов.
Кроме того, одним из ключевых приоритетов становится повышение продуктивности команд разработчиков. Важно сократить цикл разработки новых функций и обновлений, позволив разработчикам быстро вносить изменения и выпускать обновления, ускоряя процесс итераций.
Статья: https://habr.com/ru/articles/902552/
Платформа: разработка
❤1
Карты в Jetpack Compose - руководство для начинающих
Если вы только начинаете работать с картами в Jetpack Compose, статья в Kotlin Academy станет отличной отправной точкой. В ней автор делится практическим подходом к интеграции Google Maps в Compose-проекты, демонстрируя, как с нуля создать экран с картой, добавить маркеры и управлять состоянием карты в реактивном стиле.
Особое внимание уделяется тому, как правильно подключить зависимости, использовать AndroidView для внедрения MapView и при этом не терять преимущества декларативного подхода. Автор также объясняет, как настроить карту через MapView.getMapAsync, управлять перемещением камеры и работать с пользовательскими событиями.
Материал хорошо подходит для тех, кто знаком с Jetpack Compose, но пока не имел дела с Google Maps API. Он помогает быстро войти в тему и понять, какие сложности могут возникнуть при интеграции карт, а также как их обойти. Отличный выбор для первого опыта с геолокацией в Compose.
Статья: https://blog.kotlin-academy.com/maps-in-jetpack-compose-a-beginners-guide-a7f01e1c3ff4
Платформа: Android
👏: 8
👍 если хотите русский перевод
Если вы только начинаете работать с картами в Jetpack Compose, статья в Kotlin Academy станет отличной отправной точкой. В ней автор делится практическим подходом к интеграции Google Maps в Compose-проекты, демонстрируя, как с нуля создать экран с картой, добавить маркеры и управлять состоянием карты в реактивном стиле.
Особое внимание уделяется тому, как правильно подключить зависимости, использовать AndroidView для внедрения MapView и при этом не терять преимущества декларативного подхода. Автор также объясняет, как настроить карту через MapView.getMapAsync, управлять перемещением камеры и работать с пользовательскими событиями.
Материал хорошо подходит для тех, кто знаком с Jetpack Compose, но пока не имел дела с Google Maps API. Он помогает быстро войти в тему и понять, какие сложности могут возникнуть при интеграции карт, а также как их обойти. Отличный выбор для первого опыта с геолокацией в Compose.
Статья: https://blog.kotlin-academy.com/maps-in-jetpack-compose-a-beginners-guide-a7f01e1c3ff4
Платформа: Android
👏: 8
👍 если хотите русский перевод
👍3
Монотонный стек: мощный инструмент для оптимизации алгоритмов
В программировании при решении задач на массивы и последовательности часто возникает необходимость находить предыдущий или следующий элемент, удовлетворяющий определённому условию — например, ближайший больший или меньший элемент. Решать такие задачи в лоб — медленно и неэффективно. Но существует шаблон, позволяющий обрабатывать подобные задачи за линейное время — монотонный стек (monotonic stack).
Статья: https://apptractor.ru/info/articles/monotonic-stack.html
Платформа: алгоритмы
В программировании при решении задач на массивы и последовательности часто возникает необходимость находить предыдущий или следующий элемент, удовлетворяющий определённому условию — например, ближайший больший или меньший элемент. Решать такие задачи в лоб — медленно и неэффективно. Но существует шаблон, позволяющий обрабатывать подобные задачи за линейное время — монотонный стек (monotonic stack).
Статья: https://apptractor.ru/info/articles/monotonic-stack.html
Платформа: алгоритмы
👍1
Вайб кодинг - не оправдание для некачественной работы
Давайте признаем хорошее: программирование с помощью ИИ может стать переломным моментом. Он снижает барьеры для начинающих программистов и непрограммистов, позволяя им создавать работающее программное обеспечение, просто описывая то, что им нужно. Это разблокирует творческий потенциал — все больше людей смогут решать свои собственные проблемы с помощью пользовательского программного обеспечения, что является частью тенденции, которую некоторые называют «выделением личного программного обеспечения» (использование небольших инструментов, созданных с помощью ИИ, вместо универсальных приложений). Даже опытные инженеры могут получить выгоду.
Однако, как скажет вам любой опытный инженер, скорость ничего не значит, если на дороге отваливаются колеса. И вот тут-то и начинаются проблемы — в разрыве между вайбом и реальностью создания поддерживаемого, надежного программного обеспечения.
Статья: https://apptractor.ru/info/articles/vayb-koding-ne-opravdanie-dlya-nekachestvennoy-raboty.html
Платформа: разработка/ИИ
Давайте признаем хорошее: программирование с помощью ИИ может стать переломным моментом. Он снижает барьеры для начинающих программистов и непрограммистов, позволяя им создавать работающее программное обеспечение, просто описывая то, что им нужно. Это разблокирует творческий потенциал — все больше людей смогут решать свои собственные проблемы с помощью пользовательского программного обеспечения, что является частью тенденции, которую некоторые называют «выделением личного программного обеспечения» (использование небольших инструментов, созданных с помощью ИИ, вместо универсальных приложений). Даже опытные инженеры могут получить выгоду.
Однако, как скажет вам любой опытный инженер, скорость ничего не значит, если на дороге отваливаются колеса. И вот тут-то и начинаются проблемы — в разрыве между вайбом и реальностью создания поддерживаемого, надежного программного обеспечения.
Статья: https://apptractor.ru/info/articles/vayb-koding-ne-opravdanie-dlya-nekachestvennoy-raboty.html
Платформа: разработка/ИИ
❤2👍2
Есть ли лучшая AsyncButton?
В статье автор рассматривает текущие ограничения стандартного
В качестве решения предлагается создание пользовательского компонента
В целом, статья предлагает практическое решение для улучшения работы с асинхронными задачами в SwiftUI, делая код более чистым и поддерживаемым.
Статья: https://captainswiftui.substack.com/p/is-there-a-better-asyncbutton
Платформа: iOS
В статье автор рассматривает текущие ограничения стандартного
Button в SwiftUI при работе с асинхронными задачами. Он отмечает, что использование Button с асинхронными функциями может привести к дублированию кода и усложнению логики обработки состояний загрузки и ошибок.В качестве решения предлагается создание пользовательского компонента
AsyncButton, который инкапсулирует асинхронную логику, улучшает читаемость кода и упрощает управление состояниями. Этот подход позволяет разработчикам более эффективно обрабатывать асинхронные действия в интерфейсе SwiftUI.В целом, статья предлагает практическое решение для улучшения работы с асинхронными задачами в SwiftUI, делая код более чистым и поддерживаемым.
Статья: https://captainswiftui.substack.com/p/is-there-a-better-asyncbutton
Платформа: iOS
👍1
Forwarded from Mobile Development by AppTractor
Тестировать мобильные приложения – сложно.
Нужно покупать разные модели смартфонов, обслуживать и передавать устройства между сотрудниками, путаться во вкладках эмуляторов и параллельно запускать тестирование на нескольких телефонах вручную.
Точнее, так было раньше. Сейчас об этих QA-практиках можно забыть благодаря Мобильной ферме.
Это решение от Selectel для удаленного тестирования мобильных приложений на реальных устройствах, а не на эмуляторах. Здесь доступно 200+ моделей телефонов на Android и iOS, чтобы проверять удобство интерфейсов, проводить автотесты и параллельное тестирование. Оплачивайте Мобильную ферму только за использование – 1 р/мин или 30 р/час.
Запросите демо продукта и убедитесь в удобстве Мобильной фермы сами. Оставляйте заявку по ссылке: https://slc.tl/2r8m1
Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqwvWNUa
Нужно покупать разные модели смартфонов, обслуживать и передавать устройства между сотрудниками, путаться во вкладках эмуляторов и параллельно запускать тестирование на нескольких телефонах вручную.
Точнее, так было раньше. Сейчас об этих QA-практиках можно забыть благодаря Мобильной ферме.
Это решение от Selectel для удаленного тестирования мобильных приложений на реальных устройствах, а не на эмуляторах. Здесь доступно 200+ моделей телефонов на Android и iOS, чтобы проверять удобство интерфейсов, проводить автотесты и параллельное тестирование. Оплачивайте Мобильную ферму только за использование – 1 р/мин или 30 р/час.
Запросите демо продукта и убедитесь в удобстве Мобильной фермы сами. Оставляйте заявку по ссылке: https://slc.tl/2r8m1
Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqwvWNUa
👍1
AstraCrypt - это бесплатное, мощное приложение для шифрования с открытым исходным кодом, в котором есть все необходимое для обеспечения безопасности ваших данных.
Фичи: надежные алгоритмы шифрования, мультишифрование, безопасное хранение, дополнительная аутентификация пользователя, поддержка внешних хранилищ, пользовательские настройки безопасности, современный пользовательский интерфейс на основе Material You и пр.
Технический стек: чистая архитектура и MVVM, Google Tink, Room & Paging, Kotlin Coroutines и AndroidX Work, Jetpack Compose и Metrics, AndroidX Navigation-Compose, Junit v4, Mockk, Robolectric и KotlinX Coroutines Test, AndroidX DataStore, KotlinX Serialization и Kotlin Parcelize, Dagger Hilt и пр.
AstraCrypt на GitHub: https://github.com/gromif/AstraCrypt
Платформа: Android
⭐️: 48
Фичи: надежные алгоритмы шифрования, мультишифрование, безопасное хранение, дополнительная аутентификация пользователя, поддержка внешних хранилищ, пользовательские настройки безопасности, современный пользовательский интерфейс на основе Material You и пр.
Технический стек: чистая архитектура и MVVM, Google Tink, Room & Paging, Kotlin Coroutines и AndroidX Work, Jetpack Compose и Metrics, AndroidX Navigation-Compose, Junit v4, Mockk, Robolectric и KotlinX Coroutines Test, AndroidX DataStore, KotlinX Serialization и Kotlin Parcelize, Dagger Hilt и пр.
AstraCrypt на GitHub: https://github.com/gromif/AstraCrypt
Платформа: Android
⭐️: 48
👍2
Понимание порядка выполнения в Jetpack Compose: DisposableEffect, LaunchedEffect и Composables
Механика работы Jetpack Compose может сбивать с толку, особенно когда дело доходит до порядка выполнения кода. Почему
Статья разбирает порядок выполнения в Compose на практических примерах. Автор шаг за шагом показывает, что сначала вызываются сами
В статье подчёркивается, насколько важно понимать этот порядок, особенно если вы работаете с побочными эффектами, навигацией или асинхронными задачами. Такой уровень детализации помогает писать стабильные и предсказуемые UI на Compose — без магии и сюрпризов.
Статья: https://proandroiddev.com/understanding-execution-order-in-jetpack-compose-disposableeffect-launchedeffect-and-composables-d2d0b75b7ec8
Платформа: Android
👏: 132
Механика работы Jetpack Compose может сбивать с толку, особенно когда дело доходит до порядка выполнения кода. Почему
LaunchedEffect не срабатывает сразу? Когда именно вызывается DisposableEffect? Эти вопросы критичны, если вы хотите точно контролировать поведение ваших компонентов и избегать багов, связанных с жизненным циклом.Статья разбирает порядок выполнения в Compose на практических примерах. Автор шаг за шагом показывает, что сначала вызываются сами
@Composable функции, затем в них могут запускаться эффекты вроде LaunchedEffect, но уже в следующем фрейме. Это значит, что если вы ожидаете немедленного запуска эффекта после первого отображения компонента — стоит пересмотреть эту логику. С DisposableEffect тоже всё непросто: он срабатывает при монтировании и размонтировании, но строго после завершения компоновки.В статье подчёркивается, насколько важно понимать этот порядок, особенно если вы работаете с побочными эффектами, навигацией или асинхронными задачами. Такой уровень детализации помогает писать стабильные и предсказуемые UI на Compose — без магии и сюрпризов.
Статья: https://proandroiddev.com/understanding-execution-order-in-jetpack-compose-disposableeffect-launchedeffect-and-composables-d2d0b75b7ec8
Платформа: Android
👏: 132
❤1
Отлаживаем приложение вместе со SwiftUI Instruments
Apple по доброте душевной поделилась с разработчиками инструментом отладки SwiftUI. Удобный он или не очень — разберёмся вместе с Surf iOS Team.
Статья: https://habr.com/ru/companies/surfstudio/articles/903264/
Платформа: iOS
Apple по доброте душевной поделилась с разработчиками инструментом отладки SwiftUI. Удобный он или не очень — разберёмся вместе с Surf iOS Team.
Статья: https://habr.com/ru/companies/surfstudio/articles/903264/
Платформа: iOS
👍3
Закулисный взгляд на то, как Spotify выпускает приложения
Чтобы проиллюстрировать наш релизный цикл, давайте проследим путь версии 8.9.2 от зарождения до внедрения.
Статья: https://apptractor.ru/info/articles/spotify-release-1.html
Платформа: разработка
Чтобы проиллюстрировать наш релизный цикл, давайте проследим путь версии 8.9.2 от зарождения до внедрения.
Статья: https://apptractor.ru/info/articles/spotify-release-1.html
Платформа: разработка
👍3
AAInfographics - элегантный современный декларативный фреймворк для создания графиков и визуализации данных для iOS, iPadOS и macOS. Чрезвычайно мощный, поддерживает около 20 типов диаграмм, с его помощью можно очень быстро добавлять интерактивные графики в мобильные проекты. Он поддерживает касание для проверки данных, мультитач для масштабирования и улучшенную отзывчивость для ваших приложений.
AAInfographics на GitHub: https://github.com/AAChartModel/AAChartKit-Swift
Платформа: iOS
⭐️: 2.5K
AAInfographics на GitHub: https://github.com/AAChartModel/AAChartKit-Swift
Платформа: iOS
⭐️: 2.5K
👍3
Forwarded from Mobile Development by AppTractor
Транзакционные рассылки без головной боли для разработчиков
Чего обычно ждут от транзакционных рассылок? Они должны быть быстрыми, надёжными и безопасными. И настраиваться за пару кликов.
Если вы не хотите заниматься настройкой почтовой инфраструктуры, попробуйте Yandex Cloud Postbox:
• Быстро: медианное время отправки – меньше 3 секунд
• Надёжно: доставляемость в 99,9%
• Безопасно: отправляет email по TLS 1.2+ и соответствует DMARC, DKIM и SPF
Можно выбрать протокол: SMTP/AWS SES API. Первые 2 000 писем в месяц - бесплатно. Попробовать
Чего обычно ждут от транзакционных рассылок? Они должны быть быстрыми, надёжными и безопасными. И настраиваться за пару кликов.
Если вы не хотите заниматься настройкой почтовой инфраструктуры, попробуйте Yandex Cloud Postbox:
• Быстро: медианное время отправки – меньше 3 секунд
• Надёжно: доставляемость в 99,9%
• Безопасно: отправляет email по TLS 1.2+ и соответствует DMARC, DKIM и SPF
Можно выбрать протокол: SMTP/AWS SES API. Первые 2 000 писем в месяц - бесплатно. Попробовать
CI/CD по кнопке: как мы автоматизировали сборку SampleApp для SDK RuStore
В этой статье расскажу, как мы автоматизировали сборку нашего SampleApp — внутреннего Android‑приложения для тестирования SDK RuStore — и сделали процесс сборки максимально простым, быстрым и доступным для всей команды. Теперь любой участник проекта — даже без навыков Android‑разработки — может собрать актуальный APK с набором поставляемых SDK в пару кликов через CI/CD.
Статья: https://habr.com/ru/companies/vk/articles/903528/
Платформа: Android
В этой статье расскажу, как мы автоматизировали сборку нашего SampleApp — внутреннего Android‑приложения для тестирования SDK RuStore — и сделали процесс сборки максимально простым, быстрым и доступным для всей команды. Теперь любой участник проекта — даже без навыков Android‑разработки — может собрать актуальный APK с набором поставляемых SDK в пару кликов через CI/CD.
Статья: https://habr.com/ru/companies/vk/articles/903528/
Платформа: Android
👍1👎1
Архитектурный линтинг для Swift: часть 3
В этой серии статей мы рассказали о трудностях написания правил архитектурного линтинга в SwiftLint и представили Harmonize, новый архитектурный линтер с открытым исходным кодом для Swift. В предыдущей статье мы рассказали, как Harmonize позволяет разработчикам, используя простой в применении DSL, писать правила для того, чтобы слои приложения сочетались друг с другом.
В этой статье мы поделимся практическими советами, которые мы нашли, используя Harmonize в течение почти года в нашей компании (обратите внимание, что эти правила также применимы и к проектам Konsist для Android).
Статья: https://apptractor.ru/info/articles/arhitekturnyy-linting-dlya-swift-chast-3.html
Платформа: iOS
В этой серии статей мы рассказали о трудностях написания правил архитектурного линтинга в SwiftLint и представили Harmonize, новый архитектурный линтер с открытым исходным кодом для Swift. В предыдущей статье мы рассказали, как Harmonize позволяет разработчикам, используя простой в применении DSL, писать правила для того, чтобы слои приложения сочетались друг с другом.
В этой статье мы поделимся практическими советами, которые мы нашли, используя Harmonize в течение почти года в нашей компании (обратите внимание, что эти правила также применимы и к проектам Konsist для Android).
Статья: https://apptractor.ru/info/articles/arhitekturnyy-linting-dlya-swift-chast-3.html
Платформа: iOS
👍2