AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.69K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Архитектурный линтинг для Swift: часть 4

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

В этом, заключительном, посте мы объясним разработчикам, как начать использовать Harmonize в своем собственном iOS-проекте.

Статьи:

Архитектурный линтинг для Swift: часть 4
Архитектурный линтинг для Swift: часть 3
Архитектурный линтинг для Swift: часть 2
Расширенные архитектурные правила в SwiftLint: часть 1

Платформа: iOS
This media is not supported in your browser
VIEW IN TELEGRAM
Haze - это библиотека, обеспечивающая размытие в стиле Глассморфизма для Compose. Haze создан на базе Compose Multiplatform и поддерживает все его платформы - Android, iOS, JS и пр.

Haze на GitHub: https://github.com/chrisbanes/haze
Платформа: Android
⭐️: 1.6K
Когда JavaScript недостаточно: Практика разработки нативных модулей для React Native

Эта статья для React Native-разработчиков, которым не хватает возможностей JavaScript. Вы научитесь писать нативные модули на Kotlin, чтобы работать с NFC, Bluetooth, системными API и другими «закрытыми» для RN функциями. Готовый пример + объяснение каждой строки кода.

Статья: https://habr.com/ru/articles/908690/
Платформа: кроссплатформа
GPT, DeepSeek и Qwen: идеальные unit-тесты в эхо-камере

Появление unit- и UI-тестов неизбежно в крупных мобильных приложениях: появляется новая функциональность, старая расширяется, изменяются существующие элементы. Для стабильной работы команда вынуждена внедрять автотесты, что требует инфраструктуры, инструментов, а также времени и внимания для их реализации.

Размышляя над этим, пришла идея использовать LLM для автоматической генерации тестов. Это могло бы снизить нагрузку на разработчиков и минимизировать влияние автотестов на time to market новых фич. Меня зовут Марк, я iOS-разработчик Lamoda Tech. Ранее я рассказывал о своем опыте поиска решений с использованием GPT и Copilot в UI-тестах.

Со временем на AI-арене появились новые заметные игроки — DeepSeek и Qwen. В это же время передо мной как разработчиком возникла задача обеспечить покрытие новой функциональности unit-тестами. Похоже, настал момент для очередного эксперимента: мы протестируем возможности GPT, DeepSeek и Qwen в генерации unit-тестов для iOS-приложения.

Статья: https://habr.com/ru/companies/lamoda/articles/902038/
Платформа: iOS/тестирование/ИИ
Как правильно загружать данные в Kotlin-проектах

Я создал 15 с лишним приложений и прочитал тысячи статей по Kotlin, и я видел так много неправильных способов загрузки данных для отображения в пользовательском интерфейсе, что я беспокоюсь за всех людей, которые неосознанно используют их.

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

Хотите узнать, используете ли вы одну из них? Исправить проблемы? Тогда эта статья для вас, потому что это окончательное руководство, которое вам нужно для правильной загрузки данных в приложениях на Kotlin.

Статья: https://proandroiddev.com/how-to-load-data-kotlin-898f9add9c6f
Платформа: Android
👏: 308
1
This media is not supported in your browser
VIEW IN TELEGRAM
Используем Core Motion в SwiftUI-приложении

Чтобы получить доступ к акселерометру, гироскопам и, при наличии, шагомеру, магнитометру и барометру устройства, будь то iOS, iPadOS, watchOS или visionOS, используйте фреймворк Core Motion. Этот фреймворк сообщает данные о движении и окружающей среде, полученные от встроенных аппаратных датчиков. Использовать его в приложении, созданном с помощью SwiftUI, для создания визуального взаимодействия на основе собранных данных довольно просто.

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

Статья: https://apptractor.ru/info/articles/ispolzuem-core-motion-v-swiftui-prilozhenii.html
Платформа: iOS
Создавайте восхитительные возможности и опыт с камерой и мультимедиа в Android

Команда Android поделилась свежими разработками в области камер и медиавозможностей — с фокусом на Jetpack Media3, CameraX и AI-интеграции. Вот что важно:

🎬 Многооконный видеомонтаж с Media3
Jetpack Media3 теперь позволяет легко собирать клипы в единую композицию с адаптивным UI (например, 2×2 сетка или picture-in-picture). Причём всё это — с поддержкой Jetpack Compose и даже Android XR.

📸 CameraX 1.4: кастомизация без боли
Новый API поддерживает эффекты из Media3. Например, добавить ч/б-фильтр — это буквально три строки. Есть и поддержка собственного OpenGL-рендеринга.

🧠 AI + видео: краткие итоги, перевод, теги
С помощью Gemini и Firebase можно анализировать видео, извлекать ключевые кадры, генерировать описания и аудиоверсии. В демо показаны фичи вроде видео-конспектов и HDR-превью.

🔊 Аудио с заботой о батарее
Android 16 и NDK добавляют PCM Offload — воспроизведение аудио через DSP, минуя CPU. Это экономит энергию и идеально для подкастов и музыки.

Все примеры уже доступны: AI Samples, Composition Demo, PowerPlay и другие.

Статья: https://android-developers.googleblog.com/2025/05/building-delightful-android-camera-media-experiences.html
Платформа: Android
Местное вдохновение, мировое влияние: знакомимся с четырьмя победителями конкурса Swift Student Challenge этого года

В статье рассказывается о Swift Student Challenge, ежегодном мероприятии Apple, которое приглашает студентов со всего мира продемонстрировать свой творческий потенциал с помощью Swift. В этом году было отобрано 350 победителей из 38 стран, а 50 выдающихся победителей были приглашены на Всемирную конференцию разработчиков (WWDC) в Apple Park.

В статье рассказывается о четырех из этих победителей: Тайки Хамамото, который создал Hanafuda Tactics, чтобы сохранить традиционную японскую карточную игру; Марина Ли, разработавшая EvacuMate, чтобы помочь людям во время стихийных бедствий; Лусиана Ортис Ноласко, разработавшая BreakDownCosmic, чтобы сделать астрономию более доступной; и Нахом Ворку, который создал AccessEd, чтобы предоставить образовательные ресурсы для студентов с Wi-Fi или без него. Эти студенты использовали свои навыки программирования для решения реальных проблем и создания инновационных решений, демонстрируя силу технологий для стимулирования позитивных изменений. Apple поддерживает этих молодых разработчиков и их усилия по формированию будущего с помощью технологий.

Статья: https://www.apple.com/newsroom/2025/05/meet-four-of-this-years-swift-student-challenge-winners/
Платформа: разработка
This media is not supported in your browser
VIEW IN TELEGRAM
ProgressUI - это пакет SwiftUI, который реализует легко настраиваемый круговой индикатор прогресса. Он поддерживает динамическое окрашивание в зависимости от самого прогресса, несколько вариантов размеров и плавную анимацию, что делает его идеальным для отображения процессов, состояний загрузки или индикаторов состояния в приложениях для iOS, macOS, watchOS, visionOS и tvOS.

ProgressUI на GitHub: https://github.com/PierreJanineh-com/ProgressUI
Платформа: iOS
⭐️: 14
👍1
Apple опубликовала FastVLM — визуальный энкодер, которая позволяет улучшить работу с большими мультимодальными языковыми моделями.

Visual Language Model (VLM) — это модель искусственного интеллекта, которая сочетает в себе обработку изображений (визуальных данных) и текста (языковых данных). Такие модели умеют одновременно анализировать и понимать как картинки, так и текст, что позволяет им выполнять мультиформатные задачи.

VLM использует два типа нейросетей:

• Визуальный энкодер — преобразует изображение в векторное представление.
• Языковая модель — обрабатывает текст и встраивает его в общий векторный контекст вместе с визуальными данными.

FastVLM как раз является новым визуальным энкодером, разработанным для вывода меньшего количества токенов и значительного сокращения времени энкодинга изображений высокого разрешения.

Модель доступна в конфигурациях с параметрами 0,5B, 1,5B и 3B.

Apple также предоставила демонстрационное приложение для запуска модели на устройствах Apple и распознавания изображения.

FastVLM на GitHub: https://github.com/apple/ml-fastvlm
Платформа: iOS
⭐️: 1.9K
👍2
Мастерство фокусов на Compose (часть 2): как работает запрос фокуса

В процессе работы над проектом PREMIER для Android TV я столкнулся с тем, что в Jetpack Compose механизм фокусов — достаточно сложная и неочевидная тема. А информации в интернете об этом очень мало, особенно о специфичных сценариях вроде ТВ-приложений или устройств без сенсорного ввода. Поэтому я решил разобрать тему фокусов в Compose максимально подробно, чтобы помочь разработчикам лучше понять этот механизм и избежать типичных ошибок.

Статья: https://habr.com/ru/companies/habr_rutube/articles/902306/
Платформа: Android
Первый проект на HarmonyOS — мой плейлист для старта с нуля

Я работаю, в том числе, с мобильными приложениями на React Native. Разработка под HarmonyOS сразу заинтриговала меня тем, что ArkTS — это как бы TypeScript, но не совсем. И сам ArkUI сочетает в себе элементы и из React Native, и из Flutter, который мне тоже знаком.

Я решил: создам на Harmony OS базовое мобильное приложение и посмотрю, насколько дружелюбна эта платформа. Если вы мобильный разработчик (особенно с опытом Android или Flutter) и тоже хотите разобраться, что это за платформа и как с ней работать — вы по адресу. Создадим базовый плейлист по шагам.

Статья: https://habr.com/ru/companies/friflex/articles/909090/
Платформа
: разработка
Compose Unstyled - это набор базовых компонентов для создания высококачественных, доступных систем дизайна в Compose Multiplatform. Доступен для Desktop, Web (Js/WASM), Android, iOS, а также для любой другой платформы, на которой может работать Compose.

Compose Unstyled на GitHub: https://github.com/composablehorizons/compose-unstyled/
Платформа: Android
⭐️: 568
👍1
Типобезопасная передача результатов между экранами в Compose с Jetpack Navigation

В этой небольшой статье я расскажу, как мы в проекте решили обеспечить типобезопасность при передаче результатов между экранами с применением библиотеки 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 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. Это свидетельствует о стремлении к стабилизации и зрелости фреймворка, что особенно важно для разработчиков, ориентированных на долгосрочную поддержку приложений.
• В области анимаций введён 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
👍1🔥1
Мантры программирования — это не догмы, а выражения

Это значит, что мы можем цитировать Кнута, говорящего, что преждевременная оптимизация — корень всех зол, и при этом считать, что производительность — это важная характеристика.

Мы можем понимать и применять разделение ответственности, но при этом видеть ценность локальности поведения.

Есть время для 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
Прячем код по-настоящему: тёмные уголки обфускации R8 и ProGuard

Обфускация — важная часть защиты Android-приложений. Однако даже если вы используете R8 или ProGuard - это не гарантия высокой устойчивости к тому что вас код не взломают. Стандартная настройка обфускации довольно простая и нацелена на уменьшение размера сборки, а не повышение защиты от взлома. В этой статье разберу как происходит обфускация в стандартной конфигурации, как можно её сделать сложнее для разбора, а по итогу и уникальной для каждой сборки.

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