AppFiles - Mobile Development
2.01K subscribers
2.61K photos
33 videos
8 files
3.51K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
ComposeInvestigator - отслеживает рекомпозиции Composable с указанием причины, без какого-либо шаблонного кода. Он может выполнять следующие задачи:

• Сообщает, если 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
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
3
Continuations для взаимодействия асинхронных задач с синхронным кодом

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
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
🔥1
Введение в Изоляцию в Swift

Недавно кто-то задал мне вопрос об изоляции акторов. Конкретные детали не так важны, но я действительно задумался над этим вопросом, потому что, конечно, любой тут начнет испытывать трудности. Изоляция является центральным элементом работы параллелизма в 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
Платформа: разработка
Loopover - это сложная 2D головоломка в стиле кубика Рубика. Цель игры - поставить каждую ячейку на свое место. Любая ячейка, выходящая за пределы поля, "закручивается" обратно на другую сторону. В игру можно играть в 4 разных размерах: 3x3, 4x4, 5x5 и 6x6.

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
Как увеличить шрифт так, чтобы контейнер не поехал? Адаптация UI/UX для людей с проблемами зрения в XML и Compose

Я — Денис, Android-разработчик в «Лайв Тайпинге». В этой статье я продолжу рассказывать о современных подходах разработки адаптивного UI/UX для людей с ограниченными возможностями, разных национальностей и особенностями развития. В этой статьей я расскажу про разработку интерфейсов в XML и Compose для варьирующего размера шрифта. А также покажу почему атрибут contentDescription так важен.

Статья: https://habr.com/ru/articles/798473/
Платформа: Android
Видео и подкасты за неделю:

(iOS Ru) Minimal Widget Product: путь к эффективной и гибкой реализации виджетов
(iOS Ru) Уроки Swift: UITextField с анимированным плейсхолдером
(iOS En) Paging ScrollView in SwiftUI for iOS 17
(iOS En) Visual Effect API - Stacked Cards - ScrollView
(iOS En) Custom Calendar Tallies in SwiftUI
(iOS En) Minimal Login Setup With Firebase Email Authentication
(And Ru) Разработка новостного приложения. Часть 3
(And Ru) Hilt в многомодульный проект — пособие по внедрению зависимостей для новичков
(And En) THIS Is How You Create Custom Shapes in Jetpack Compose
(And En) New Android 15 Changes, App Update Prompts & AI Document Scanning
(And En) Lyricist & Voyager - Navigating the Compose Multiverse
(And En) Imperative, declarative, object oriented, functional: four of a Kotlin kind
(Crs Ru) Сериализация и десериализация — вошли и вышли
(Crs Ru) Адаптивная вёрстка во Flutter
(Dev Ru) Я.Субботник по мобильной разработке
(Dev En) Firebase’s Release Monitoring dashboard, Dart 3.3 release, and more dev news!
(Dev En) Learn C# – Full Course with Mini-Projects
(Anl Ru) Avito Analytics meetup

Что вы интересного посмотрели/послушали про разработку на этой неделе? 🌐 @AppFiles
Legado - читалка электронных книг для Android. Поддерживает TXT и EPUB, может сама скачивать контент из веба в соответствии с пользовательскими правилами, настраиваемые шрифты, фоны и прочее, может читать вслух через сторонние сервисы и множество прочих функций.

Legado на GitHub: https://github.com/gedoor/legado
Платформа: Android
⭐️: 22.5K
👍1
DetailsPro - это no-code инструмент проектирования на основе SwiftUI.

• Создавайте с помощью таких представлений SwiftUI, как VStack, Text, Image и др.
• Создавайте реальные дизайны без написания кода
• Экспорт в Xcode, Swift Playgrounds и др.

Сайт: https://detailspro.app/
Платформа: iOS
🤯4
Concurrency Recipes - практические решения проблем с использованием Swift Concurrency.

Swift Concurrency может быть очень сложным в использовании. Было бы удобно задокументировать и поделиться решениями и опасностями, с которыми вы можете столкнуться в его использовании. Вряд ли этот репозиторий является исчерпывающим или представленные в нем решения безусловно великолепны. Но он развивается и точно сможет помочь вам в понимании сложного фреймворка.

Concurrency Recipes на GitHub: https://github.com/mattmassicotte/ConcurrencyRecipes
Платформа: iOS
⭐️: 505
1
Чистка Android-проекта для уменьшения размера APK, ускорения сборки и улучшения опыта разработки

В любом программном проекте разработка — это непрерывный процесс, и со временем кодовая база растет и становится все сложнее. Эта сложность может привести к замедлению времени сборки, увеличению размера APK и менее продуктивному опыту разработки. В этом руководстве мы рассмотрим некоторые методы поддержания чистоты и эффективности вашего Android-проекта.

Статья: https://apptractor.ru/info/articles/chistka-android-proekta-dlya-umensheniya-razmera-apk-uskoreniya-sborki-i-uluchsheniya-opyta-razrabotki.html
Платформа: Android
У каждого кода запах особый: 8 причин, почему ваш код плохо пахнет

Вероятно, большая часть кода, который вы когда-либо видели, немного попахивает. В худшем случае код просто воняет. Скорее всего, это в свой код неприятный запах вы добавили сами. Но чем именно пахнет код?

Плохой запах — это поверхностный признак того, что может быть глубинной проблемой с вашей системой или качеством кода. В большинстве случаев плохой запах требует определенного рефакторинга. Хотя плохо пахнущие программы и работают, но это показатель низкого качества кода.

В этой статье мы рассмотрим восемь распространенных ошибок, приводящих к тому, что код начинает пованивать.

Статья: https://apptractor.ru/info/articles/your-code-smell.html
Платформа: программирование
Прекратите спорить в Code Review — начните внедрять с правилами линтера

Правила линтинга выступают в качестве письменных соглашений об архитектуре кодовой базы и установленных лучших и необходимых практиках команды. Они помогают поддерживать последовательность кодовой базы, устраняя двусмысленности, защищают наши проекты от мелких ошибок и значительно ускоряют написание и рецензирование кода.

Благодаря Konsist мы на Android наконец-то получили долгожданный инструмент, который делает написание правил линтинга простым и доступным, не требующим сложного обучения. Инструмент, который, безусловно, является важной вехой в написании пользовательских правил, благодаря своей гениальной идее переосмыслить их как юнит-тесты.

Статья: https://apptractor.ru/info/articles/prekratite-sporit-v-code-review-nachnite-vnedryat-s-pravilami-lintera.html
Платформа: Android
Kotest - это гибкий и элегантный мультиплатформенный фреймворк для тестирования Kotlin с широким спектром утверждений (assertion) и интегрированным тестированием свойств. Есть встроенная поддержка корутинов на каждом уровне, возможность использования функций в качестве обратных вызовов жизненного цикла теста, широкие возможности расширения, расширенная оценка условий, мощное тестирование на основе данных и многое другое. Библиотека утверждений Kotest - это первая мультиплатформенная библиотека утверждений для Kotlin с более чем 300 утверждениями. Она оснащена инспекторами коллекций, помощниками недетерминированных тестов, мягкими утверждениями, модулями для arrow, json, kotlinx-datetime. Ну а модуль тестирования свойств Kotest - это продвинутая мультиплатформенная библиотека тестов свойств с более чем 50 встроенными генераторами.

Kotest на GitHub: https://github.com/kotest/kotest
Платформа: Android/тестирование
⭐️: 4.2K
Кот в мешке: мастерство обработки ошибок внешних ключей SQLite

Сталкивались с загадочными ошибками Foreign Key в SQLite для Android? Сегодня мы раскроем завесу тайны и расскажем как извлекать подробную информацию об ошибках этого типа.

Статья: https://habr.com/ru/companies/kts/articles/798607/
Платформа: Android