Прекратите использовать тестовые теги в Jetpack Compose
Использование семантики делает ваше приложение доступным для людей с особыми потребностями и в то же время сохраняет его тестируемость. К сожалению, бывают ситуации, когда тестовый тег неизбежен или просто не стоит тратить время на семантику. С другой стороны, я надеюсь, что это сделает внедрение семантик менее сложным для вас и упростит чью-то жизнь с помощью вашего приложения.
Статья: https://apptractor.ru/info/articles/prekratite-ispolzovat-testovye-tegi-v-jetpack-compose.html
Платформа: Android/тестирование
Использование семантики делает ваше приложение доступным для людей с особыми потребностями и в то же время сохраняет его тестируемость. К сожалению, бывают ситуации, когда тестовый тег неизбежен или просто не стоит тратить время на семантику. С другой стороны, я надеюсь, что это сделает внедрение семантик менее сложным для вас и упростит чью-то жизнь с помощью вашего приложения.
Статья: https://apptractor.ru/info/articles/prekratite-ispolzovat-testovye-tegi-v-jetpack-compose.html
Платформа: Android/тестирование
20 лет Xcode год за годом
В следующий раз, когда вы откроете Xcode, чтобы исправить небольшую ошибку, продумать идею следующего приложения на миллиард долларов или узнать больше о разработке для iOS, помните, что у каждого приложения есть история — и мы все пишем ее строку за строкой.
Статья: https://apptractor.ru/info/articles/20-let-xcode-god-za-godom.html
Платформа: iOS
В следующий раз, когда вы откроете Xcode, чтобы исправить небольшую ошибку, продумать идею следующего приложения на миллиард долларов или узнать больше о разработке для iOS, помните, что у каждого приложения есть история — и мы все пишем ее строку за строкой.
Статья: https://apptractor.ru/info/articles/20-let-xcode-god-za-godom.html
Платформа: iOS
👍3
EmojiKit - SDK на базе Swift, позволяющий использовать эмодзи в приложениях для всех основных платформах Apple (iOS, macOS, tvOS, watchOS и visionOS). EmojiKit предоставляет все необходимое для работы с эмодзи, включая категории, варианты оттенков кожи, информацию о юникоде и версии, поддержку локализации и т.д.
EmojiKit на GitHub: https://github.com/Kankoda/EmojiKit
Платформа: iOS
⭐️: 34
EmojiKit на GitHub: https://github.com/Kankoda/EmojiKit
Платформа: iOS
⭐️: 34
Почему Ollie перешел от SwiftUI к UIKit
Мы обнаружили, что в SwiftUI много «магии», которая затрудняет понимание. В SwiftUI есть множество неявных скрытых предположений, которые, если их не соблюдать, могут привести к неожиданным болезненным результатам.
Статья: https://apptractor.ru/info/articles/pochemu-ollie-pereshel-ot-swiftui-k-uikit.html
Платформа: iOS
Мы обнаружили, что в SwiftUI много «магии», которая затрудняет понимание. В SwiftUI есть множество неявных скрытых предположений, которые, если их не соблюдать, могут привести к неожиданным болезненным результатам.
Статья: https://apptractor.ru/info/articles/pochemu-ollie-pereshel-ot-swiftui-k-uikit.html
Платформа: iOS
❤3
Decompose - это библиотека Kotlin Multiplatform для разбиения кода на древовидную структуру, состоящую из небольших независимых компонентов бизнес-логики (BLoC), учитывающих жизненный цикл, с функцией маршрутизации и подключаемым пользовательским интерфейсом (Jetpack/Multiplatform Compose, Android Views, SwiftUI, Kotlin/React и т.д.).
Decompose проводит четкие границы между кодом пользовательского интерфейса и кодом, не относящимся к нему, позволяет правильно делать Dependency injection (DI) и Inversion of control (IoC), иметь общую логику навигации и т.д.
Decompose на GitHub: https://github.com/arkivanov/Decompose
Платформа: Android/кроссплатформа
⭐️: 1.8K
Decompose проводит четкие границы между кодом пользовательского интерфейса и кодом, не относящимся к нему, позволяет правильно делать Dependency injection (DI) и Inversion of control (IoC), иметь общую логику навигации и т.д.
Decompose на GitHub: https://github.com/arkivanov/Decompose
Платформа: Android/кроссплатформа
⭐️: 1.8K
🔥4
7 открытых iOS-проектов, которые помогут изучить SwiftUI
Чтение кода (и его понимание) — один из лучших способов улучшить свои навыки разработки. Проекты с открытым исходным кодом — самое правильное место, где можно узнать о лучших практиках, стилях программирования и многих других темах. В этой статье список из 7 iOS-проектов на SwiftUI, которые помогут вам научиться новому.
Статья: https://apptractor.ru/develop/7-otkrytyh-ios-proektov-kotorye-pomogut-izuchit-swiftui.html
Платформа: iOS
Чтение кода (и его понимание) — один из лучших способов улучшить свои навыки разработки. Проекты с открытым исходным кодом — самое правильное место, где можно узнать о лучших практиках, стилях программирования и многих других темах. В этой статье список из 7 iOS-проектов на SwiftUI, которые помогут вам научиться новому.
Статья: https://apptractor.ru/develop/7-otkrytyh-ios-proektov-kotorye-pomogut-izuchit-swiftui.html
Платформа: iOS
🔥2
Отслеживание времени сборки Android-проекта
Сколько часов вы просидели перед Android Studio, просматривая сообщение «Gradle Build Running», просто ожидая сборки и развертывания приложения на вашем устройстве? Для больших приложений, совместно используемых десятками разработчиков, измерение этого числа важно для определения того, сколько времени может быть потрачено впустую
Статья: https://apptractor.ru/info/articles/otslezhivanie-vremeni-sborki-android-proekta.html
Платформа: Android
Сколько часов вы просидели перед Android Studio, просматривая сообщение «Gradle Build Running», просто ожидая сборки и развертывания приложения на вашем устройстве? Для больших приложений, совместно используемых десятками разработчиков, измерение этого числа важно для определения того, сколько времени может быть потрачено впустую
Статья: https://apptractor.ru/info/articles/otslezhivanie-vremeni-sborki-android-proekta.html
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
VerticalSplit - реализации разделенного на две части экрана с динамическими границами в SwiftUI. Вдохновлена приложением Amie для iOS.
VerticalSplit на GitHub: https://github.com/vedantgurav/VerticalSplit
Платформа: iOS
⭐️: 46
VerticalSplit на GitHub: https://github.com/vedantgurav/VerticalSplit
Платформа: iOS
⭐️: 46
❤2
Видео и подкасты за неделю:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Что вы интересного посмотрели/послушали про разработку на этой неделе? 🌐 @AppFiles
•
(iOS Ru)
Пишем текстовую RPG•
(iOS En)
How to Create 3D App Icons for visionOS•
(iOS En)
How to easily mock ANY network call with URLProtocol•
(iOS En)
Elastic Custom Segmented Control - SwiftUI•
(iOS En)
Custom SwiftUI Calendar•
(And Ru)
Наш опыт внедрения Compose в большой проект•
(And Ru)
Многомодульность: что это такое?•
(And Ru)
Жизнь инди в Google Play•
(And Ru)
Разработка новостного приложения. Часть 2•
(And En)
The Ultimate Package Structure Guide for Android Developers•
(And En)
Modern Dependency Management With Version Catalogs•
(And En)
Modularization at scale with Alireza Tizfahmfard•
(Dev Ru)
Топ 5 книг для синьора•
(Dev En)
Machine Learning in 2024 – Beginner's Course•
(Dev Ru)
Как мы пытались растить выручку через персонализациюЧто вы интересного посмотрели/послушали про разработку на этой неделе? 🌐 @AppFiles
AppTractor
Пишем текстовую RPG
Пример написания текстовой игры на Swift. https://www.youtube.com/watch?v=7H9xICrE5jU
ComposeInvestigator - отслеживает рекомпозиции Composable с указанием причины, без какого-либо шаблонного кода. Он может выполнять следующие задачи:
• Сообщает, если Composable пропущен при рекомпозиции.
• Сообщает, если аргументы элемента изменились и он был перекомпонован. Он также может сравнить значения до и после изменения.
• Сообщает, были ли изменены значения состояния внутри Composable. Также можно сравнить значения до и после изменения.
• Получает стек вызовов, ведущий к вовлечению Composable. Это помогает определить конкретный Composable, который перекомпонуется, когда один и тот же Composable используется повторно в нескольких местах.
ComposeInvestigator на GitHub: https://github.com/jisungbin/ComposeInvestigator
Платформа: Android
⭐️: 60
• Сообщает, если Composable пропущен при рекомпозиции.
• Сообщает, если аргументы элемента изменились и он был перекомпонован. Он также может сравнить значения до и после изменения.
• Сообщает, были ли изменены значения состояния внутри Composable. Также можно сравнить значения до и после изменения.
• Получает стек вызовов, ведущий к вовлечению Composable. Это помогает определить конкретный Composable, который перекомпонуется, когда один и тот же Composable используется повторно в нескольких местах.
ComposeInvestigator на GitHub: https://github.com/jisungbin/ComposeInvestigator
Платформа: Android
⭐️: 60
❤1
Android Lint: оптимизируем проверку мердж-реквестов
В этой статье расскажу, как добавил новое правило, чтобы lint предлагал использовать внутреннюю функцию нашего проекта. В рамках этой статьи я не буду описывать, какие зависимости и как нужно добавить в проект — информации об этом и так достаточно в этих ваших интернетах.
Статья: https://habr.com/ru/companies/ru_mts/articles/797053/
Платформа: Android
В этой статье расскажу, как добавил новое правило, чтобы lint предлагал использовать внутреннюю функцию нашего проекта. В рамках этой статьи я не буду описывать, какие зависимости и как нужно добавить в проект — информации об этом и так достаточно в этих ваших интернетах.
Статья: https://habr.com/ru/companies/ru_mts/articles/797053/
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
MLX Swift Chat - пример запуска LLM-модели локально с помощью MLX. MLX - это эффективный фреймворк машинного обучения, специально разработанный для Apple Silicon. Сам проект - полностью нативное приложение SwiftUI, которое позволяет запускать локальные LLM-модели (например, Llama, Mistral) на процессоре Apple в режиме реального времени с помощью MLX.
MLX Swift Chat на GitHub: https://github.com/PreternaturalAI/mlx-swift-chat
Платформа: iOS
⭐️: 194
MLX Swift Chat на GitHub: https://github.com/PreternaturalAI/mlx-swift-chat
Платформа: iOS
⭐️: 194
❤3
Continuations для взаимодействия асинхронных задач с синхронным кодом
Continuations позволяют нам создать обертку над обработчиком завершения (completion handler) и асинхронными функциями, чтобы мы могли обернуть старый код в более современный API. Например, функция withCheckedContinuation() создает новое continuation, которое может запускать любой код, который мы хотим, а затем вызывает resume(returning:), чтобы отправить значение обратно, даже если это часть обработчика завершения (completion handler).
Статья: https://habr.com/ru/articles/797735/
Платформа: iOS
Continuations позволяют нам создать обертку над обработчиком завершения (completion handler) и асинхронными функциями, чтобы мы могли обернуть старый код в более современный API. Например, функция withCheckedContinuation() создает новое continuation, которое может запускать любой код, который мы хотим, а затем вызывает resume(returning:), чтобы отправить значение обратно, даже если это часть обработчика завершения (completion handler).
Статья: https://habr.com/ru/articles/797735/
Платформа: iOS
Начинаем тестирование со Сканером Доступности
В этой статье мы рассмотрели Accessibility Scanner — инструмент для проверки некоторых аспектов доступности приложений для Android. Хотя он не гарантирует полной доступности приложений, это отличный инструмент для поиска малозаметных проблем.
Статья: https://apptractor.ru/info/articles/accessibility-scanner.html
Платформа: Android
В этой статье мы рассмотрели Accessibility Scanner — инструмент для проверки некоторых аспектов доступности приложений для Android. Хотя он не гарантирует полной доступности приложений, это отличный инструмент для поиска малозаметных проблем.
Статья: https://apptractor.ru/info/articles/accessibility-scanner.html
Платформа: Android
Apollo Kotlin (ранее известный как Apollo Android) - это клиент GraphQL, который генерирует модели Kotlin и Java из запросов GraphQL.
Apollo Kotlin выполняет запросы и мутации на сервере GraphQL и возвращает результаты в виде типов Kotlin, специфичных для запроса. Это означает, что вам не нужно разбирать JSON, передавать Maps и заставлять клиентов вручную приводить значения к нужному типу. Вам также не нужно писать типы моделей самостоятельно, потому что они генерируются из определений GraphQL, которые использует ваш пользовательский интерфейс.
Поскольку сгенерированные типы зависят от запроса, вы можете получить доступ только к тем данным, которые вы указали в запросе. Если вы не запрашиваете определенное поле в запросе, вы не сможете получить доступ к соответствующему свойству возвращаемой структуры данных.
Эта библиотека разработана в первую очередь для Android, но вы можете использовать ее в любом приложении на Java/Kotlin, включая мультиплатформенные.
Apollo Kotlin на GitHub: https://github.com/apollographql/apollo-kotlin
Платформа: Android
⭐️: 3.6K
Apollo Kotlin выполняет запросы и мутации на сервере GraphQL и возвращает результаты в виде типов Kotlin, специфичных для запроса. Это означает, что вам не нужно разбирать JSON, передавать Maps и заставлять клиентов вручную приводить значения к нужному типу. Вам также не нужно писать типы моделей самостоятельно, потому что они генерируются из определений GraphQL, которые использует ваш пользовательский интерфейс.
Поскольку сгенерированные типы зависят от запроса, вы можете получить доступ только к тем данным, которые вы указали в запросе. Если вы не запрашиваете определенное поле в запросе, вы не сможете получить доступ к соответствующему свойству возвращаемой структуры данных.
Эта библиотека разработана в первую очередь для Android, но вы можете использовать ее в любом приложении на Java/Kotlin, включая мультиплатформенные.
Apollo Kotlin на GitHub: https://github.com/apollographql/apollo-kotlin
Платформа: Android
⭐️: 3.6K
🔥1
Введение в Изоляцию в Swift
Недавно кто-то задал мне вопрос об изоляции акторов. Конкретные детали не так важны, но я действительно задумался над этим вопросом, потому что, конечно, любой тут начнет испытывать трудности. Изоляция является центральным элементом работы параллелизма в Swift, но это совершенно новая концепция.
Несмотря на новизну, она использует в основном знакомые механизмы. Вероятно, вы уже понимаете то, как работает изоляция, просто пока не осознаете этого.
Вот описание концепций в самых простых терминах, которые я смог придумать.
Статья: https://apptractor.ru/info/articles/vvedenie-v-izolyatsiyu-v-swift.html
Платформа: iOS
Недавно кто-то задал мне вопрос об изоляции акторов. Конкретные детали не так важны, но я действительно задумался над этим вопросом, потому что, конечно, любой тут начнет испытывать трудности. Изоляция является центральным элементом работы параллелизма в Swift, но это совершенно новая концепция.
Несмотря на новизну, она использует в основном знакомые механизмы. Вероятно, вы уже понимаете то, как работает изоляция, просто пока не осознаете этого.
Вот описание концепций в самых простых терминах, которые я смог придумать.
Статья: https://apptractor.ru/info/articles/vvedenie-v-izolyatsiyu-v-swift.html
Платформа: iOS
Что делать, если в проекте нечего делать: 3 совета разработчикам
Нам всем, даже когда мы любим нашу работу, любим компанию, на которую работаем, и никогда не сменили бы нашу текущую работу на другую, время от времени становится скучно. Это жизнь, всегда есть взлеты и падения, и мобильному разработчику очень просто свалиться в состояние «я понятия не имею, что делать теперь, когда продукт вышел».
Статья: https://apptractor.ru/info/articles/chto-delat-esli-v-proekte-nechego-delat-3-soveta-android-razrabotchikam.html
Платформа: разработка
Нам всем, даже когда мы любим нашу работу, любим компанию, на которую работаем, и никогда не сменили бы нашу текущую работу на другую, время от времени становится скучно. Это жизнь, всегда есть взлеты и падения, и мобильному разработчику очень просто свалиться в состояние «я понятия не имею, что делать теперь, когда продукт вышел».
Статья: https://apptractor.ru/info/articles/chto-delat-esli-v-proekte-nechego-delat-3-soveta-android-razrabotchikam.html
Платформа: разработка
Loopover - это сложная 2D головоломка в стиле кубика Рубика. Цель игры - поставить каждую ячейку на свое место. Любая ячейка, выходящая за пределы поля, "закручивается" обратно на другую сторону. В игру можно играть в 4 разных размерах: 3x3, 4x4, 5x5 и 6x6.
Loopover на GitHub: https://github.com/typicel/loopover-ios
Платформа: iOS
⭐️: 3
Loopover на GitHub: https://github.com/typicel/loopover-ios
Платформа: iOS
⭐️: 3
Optional в Swift: 5 вещей, которые вы должны знать
Optional лежат в основе Swift и существуют с первой версии языка. Опциональное значение позволяет нам писать чистый код и в то же время заботиться о возможных значениях nil.
Статья: https://apptractor.ru/info/articles/optional-v-swift-5-veschey-kotorye-vy-dolzhny-znat.html
Платформа: iOS
Optional лежат в основе Swift и существуют с первой версии языка. Опциональное значение позволяет нам писать чистый код и в то же время заботиться о возможных значениях nil.
Статья: https://apptractor.ru/info/articles/optional-v-swift-5-veschey-kotorye-vy-dolzhny-znat.html
Платформа: iOS
Как увеличить шрифт так, чтобы контейнер не поехал? Адаптация UI/UX для людей с проблемами зрения в XML и Compose
Я — Денис, Android-разработчик в «Лайв Тайпинге». В этой статье я продолжу рассказывать о современных подходах разработки адаптивного UI/UX для людей с ограниченными возможностями, разных национальностей и особенностями развития. В этой статьей я расскажу про разработку интерфейсов в XML и Compose для варьирующего размера шрифта. А также покажу почему атрибут contentDescription так важен.
Статья: https://habr.com/ru/articles/798473/
Платформа: Android
Я — Денис, Android-разработчик в «Лайв Тайпинге». В этой статье я продолжу рассказывать о современных подходах разработки адаптивного UI/UX для людей с ограниченными возможностями, разных национальностей и особенностями развития. В этой статьей я расскажу про разработку интерфейсов в XML и Compose для варьирующего размера шрифта. А также покажу почему атрибут contentDescription так важен.
Статья: https://habr.com/ru/articles/798473/
Платформа: Android