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

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

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

Есть время для 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
📺 Видео и подкасты за неделю на @AppFiles

(iOS Ru) Учим Metal и image processing лишь бы не верстать на iOS
(iOS Ru) Race Condition: проблема гонки потоков — что это и как избежать?
(iOS Ru) Под капотом iOS-крешей
(iOS En) Resizable ScrollView Header | Scroll To Hide Header - SwiftUI
(iOS En) SwiftUI Theme Switcher in 3 Minutes – Light & Dark Mode Made Easy
(iOS En) Building emoji reactions in 5 minutes with SwiftUI
(iOS En) Customized Paywall using Native SwiftUI StoreKit APIs
(iOS En) Apple Engineer Shows How To Build a SwiftUI Sleep Tracker
(iOS En) 3 Ways to Initialize @State in SwiftUI
(And Ru) Тестирование Compose по-новому: простота, надежность, гибкость
(And En) The Android Show: I/O Edition
(And En) Now in Android: 116 – Google I/O, Gemini, and Jetpack Compose 1.8
(And En) What's new in Android Studio Meerkat Feature Drop
(And En) Android Testing Strategies
(And En) Tools and patterns for scalable Android app testing
(And En) 5 Anti-Patterns With Coroutines & Flows You MUST Avoid!
(And En) How Kotlin is Powering TV Broadcasts Worldwide
(And En) Android & Kotlin Development Masterclass – Full Course
(And En) Build your App from Scratch without Material 3 Color System
(Crs Ru) Kotlin Multiplatform vs Compose Multiplatform: отличия, способы создания и как запустить на iOS
(Crs Ru) Готов ли Compose iOS к продакшену?
(Crs En) ​​Kotlin Multiplatform: Have your code and eat it too
(Dev Ru) Разработчик HarmonyOS Next про ArkTS и HarmonyOS
(Dev Ru) Язык программирования Groovy: JVM языки, Java, Kotlin, Gradle, DSL
(Tcn Ru) Как работают нейроинтерфейсы: киборги, Neuralink, brain-computer interface
(Dev En) Design Messenger - Mobile System Design Mock Interview
(Dev En) C++ Course: Build an Audio Plugin

Прошлогодние видео:

(iOS Ru) TextField с автодополнением
(iOS Ru) SwiftUI-навигация: просто, нативно и декларативно
(iOS Ru) Удивительный мир внутри .ipa
(iOS Ru) Core Motion framework в финансовых приложениях
(And Ru) Путешествие к центру Композиции
(And Ru) Scout: новый фреймворк для ускоренного и безболезненного управления зависимостями
(And Ru) Компиляторные плагины: модификация и анализ Сompose
(And Ru) Как я code coverage внедрял да Gradle plugin для baseline писал
(Dev Ru) Грабим Дома на Собеседовании в Google (+ другие вопросы с собеседований)
Please open Telegram to view this post
VIEW IN TELEGRAM
WikWok - это красивое и функциональное приложение, которое превращает чтение Википедии в увлекательную ленту статей в стиле TikTok. Доступно на iOS, Android, Macos, Windows, Linux и в веб.

WikWok на GitHub: https://github.com/terrakok/WikWok
Платформа: Android
⭐️: 568
1
MagicMirror - умное зеркало своими руками

Подробная инструкция по созданию собственного MagicMirror — умного зеркала, которое отображает время, погоду, новости и другую полезную информацию прямо на поверхности зеркала.

🔧 Что входит в проект:

• Raspberry Pi в качестве основного контроллера
• Монитор за полупрозрачным зеркалом
• Корпус с элементами, напечатанными на 3D-принтере
• Настройка программного обеспечения MagicMirror² и добавление модулей для отображения различной информации.

Этот проект требует базовых навыков в электронике и программировании, а также некоторого времени на сборку и настройку. Однако результат стоит затраченных усилий: вы получите стильный и функциональный элемент интерьера, который можно адаптировать под свои нужды.

Если вы ищете интересный DIY-проект на выходные, создание MagicMirror может стать отличным выбором.

Статья: https://nerdiy.de/en/howto-magicmirror-build-your-own-magicmirror/
Платформа: интернет вещей
👍21
10 трюков Jetpack Compose, о которых вы, вероятно, не знаете

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

1. Анимируйте видимости с помощью переходов Enter/Exit
2. Используйте модификатора Layout для создания кастомных макетов
3. Разделяйте элементы в LazyColumn
4. Используйте drawBehind для расширения фонового рисунка за пределы границ
5. Закрепляйте заголовки в LazyColumn с помощью stickyHeader
6. Используйте rememberUpdatedState, чтобы избежать устаревших лямбд
7. Не забывайте о pointerInput для кастомных жестов
8. Прокручивайте любой компонент с помощью Modifier.scrollable
9. Используйте CompositionLocal для тематического поведения
10. Используйте Modifier.graphicsLayer для создания эффектов

Статья: https://apptractor.ru/develop/10-tryukov-jetpack-compose.html
Платформа: Android
2👍1
ErrorKit - сообщения об ошибках Swift, удобные для человека

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

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

Статья: https://apptractor.ru/info/articles/errorkit.html
Платформа: iOS
👍3
Xtool - кроссплатформенная среда разработки, замена Xcode. Создавайте и развертывайте приложения для iOS с SwiftPM на Linux, Windows и macOS.

В нем есть:

• Сборка пакета SwiftPM в приложение для iOS
• Подпись и установка приложений для iOS
• Взаимодействие с Apple Developer Services программным способом

Xtool на GitHub: https://github.com/xtool-org/xtool
Платформа: iOS
⭐️: 2.4K
👍1
Новый плагин KMP для IntelliJ IDEA и Android Studio

JetBrains выпустил бета-версию нового плагина KMP для IntelliJ IDEA и Android Studio. Этот плагин упрощает все этапы работы с KMP, от настройки проекта до кроссплатформенной разработки и предварительного просмотра пользовательского интерфейса Compose.

Что нового:

• Встроенный расширенный визард для новых проектов — поддерживает все целевые комбинации Android, iOS, десктоп, веб и сервер
• Предварительные проверки — когда вы открываете проект, плагин автоматически запускает проверку окружения
• Готовность к запуску — после индексации плагин автоматически генерирует конфигурации запуска для всех платформ, доступных в вашем проекте, — Android, iOS, web, desktop и server
• Поддержка языков — для проектов с Kotlin и Swift плагин обеспечивает межъязыковую навигацию, подсветку синтаксиса, быстрое документирование и отладку в вашей IDE
• Поддержка Compose Multiplatform — Compose Multiplatform для iOS недавно получил статус Stable, что позволяет уверенно создавать красивые общие пользовательские интерфейсы для использования в производственных условиях на iOS, Android и настольных компьютерах
• Горячая перезагрузка Compose — быстрая итерация является ключевым моментом при создании пользовательских интерфейсов, с помощью Compose Hot Reload вы можете мгновенно увидеть изменения в пользовательском интерфейсе, не перезапуская приложение и не теряя его состояние

Новость: https://apptractor.ru/info/news/novyy-plagin-kmp-dlya-intellij-idea-i-android-studio.html
Платформа: кроссплатформа
KStorage — единый подход к key-value хранилищам на Kotlin Multiplatform

Key-Value хранилища — это очень удобно... пока вам не захочется большего.

SharedPreferences на Android, DataStore, NSUserDefaults на iOS, Multiplatform Settings, локальные файлы или вообще SQL - под все эти варианты нужно писать специфичный код.
Каждое из этих апи нуждается в создании дополнительных оберток, репозиториев, для повышения абстракции и упрощения замены конкретных библиотек.

KStorage — ультимативная обёртка, которая решает эту проблему. Библиотека позволяет создавать обёртки для Key-Value хранилищ, таких как DataStore. Также можно создавать Key-Value хранилище, где ключ — это название файла, а значение — это его сериализуемое значение.

Более того, вы даже можете спокойно сделать обёртку над SQL-запросом. Например, для создания пользователя, обновления или удаления.

Статья: https://habr.com/ru/articles/910392/
Платформа: Android/кроссплатформа
🤡1
Когда отладчик Swift лжет: скрытая стоимость компиляторных оптимизаций

Итак, я создаю приложение SwiftUI, а в нем параллельно вызываю две конечные точки бэкенда с помощью async let. Оба возвращают массивы пользователей, и я хочу объединить их результаты в операторе switch. Достаточно просто, верно?

Оказалось, что да, но при этом немного запутанно.

Во время отладки я заметил нечто странное: один из моих массивов (users2) оказался загадочно пуст прямо перед оператором возврата, хотя я только что перебирал его и видел все правильные данные!

Так в чем же дело? Неужели Swift съел мой массив? Это ошибка в моем API-клиенте? Или что-то более глубокое?

Статья: https://apptractor.ru/info/articles/kogda-otladchik-swift-lzhet.html
Платформа: iOS
🔥1
ZenTone - библиотека для Android, которая генерирует звуковые сигналы определенной частоты и громкости.

ZenTone на GitHub: https://github.com/nisrulz/zentone
Платформа: Android
⭐️: 123
Видим невидимое: контроль качества Android-библиотек через объектив AppTracer Lite SDK

Мы усиленно работаем над качеством нашего SDK, и одним из важных аспектов стал контроль работы SDK на устройствах пользователей. Было решено собирать краши и перформанс-метрики. Для этого отлично подходит новый инструмент AppTracer Lite SDK, разработанный в VK. Сейчас он доступен только внутри VK.

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

Статья: https://habr.com/ru/companies/vk/articles/911120/
Платформа: Android
1
Мечтают ли андроиды о Robolectric? Разбираем фреймворк по косточкам

Robolectric — это мощный инструмент для UI‑тестирования Android‑кода без эмулятора. Когда я использовал Robolectric в работе, испытал удивление от того, как работает библиотека.

Помимо возможности в юнит‑тестах работать с Android‑компонентами, Robolectric позволяет работать с View и получать из неё Bitmap, что решает не только задачу проверки взаимодействия с View, но и позволяет проверить отображение экрана. И хотя в Android‑комьюнити у Robolectric неоднозначная репутация из‑за трудностей совместимости с другими библиотеками, его почти бесценные возможности пробудили любопытство копнуть глубже и осмыслить этот инструмент.

Статья: https://habr.com/ru/companies/alfa/articles/910226/
Платформа: Android
Комбинируем жесты и анимации в SwiftUI

В статье демонстрируют, как объединение жестов и анимаций в SwiftUI может повысить интерактивность и отзывчивость пользовательского интерфейса. Они начинают с простого примера, где изображение перемещается в соответствии с положением пальца пользователя, используя модификатор position и DragGesture. Затем они усложняют пример, добавляя анимацию возврата объекта в исходное положение с помощью withAnimation(.spring()), что делает взаимодействие более естественным и плавным. Этот подход подчеркивает важность визуальной обратной связи и демонстрирует, как SwiftUI позволяет легко создавать динамичные и интуитивно понятные интерфейсы.

Статья: https://www.createwithswift.com/combining-gestures-and-animations-with-swiftui/
Платформа: iOS
Google анонсирует Jetpack Navigation 3

Долгие годы разработчики жаловались на Jetpack Navigation (2) и теперь компания выпускает абсолютно новую библиотеку навигации, которая должна устранить все предыдущие проблемы.

Основные принципы:

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

Ключевые особенности

• Анимации
• Адаптивные макеты
• Разграничение состояний
• Модульность

Есть пример кода и типовые решения.

В настоящее время Nav3 находится в стадии альфа-версии, что означает, что API может быть изменен на основе отзывов.
Робот Android - любимый маскот пользователей и разработчиков Android. И предыдущие версии конструктора таких ботов были очень популярны - в Google решили в этом году переделать конструктор ботов с нуля, используя новейшие технологии, поддерживаемые Gemini. Сегодня компания выпустила новое приложение с открытым исходным кодом Androidify, с помощью которого можно научиться создавать мощный опыт на базе искусственного интеллекта на Android с использованием новейших технологий, таких как Jetpack Compose, Gemini API через Firebase AI Logic SDK, CameraX и Navigation 3.

Примечание: это приложение все еще находится в стадии разработки. В настоящее время в этом приложении используется стандартная модель Imagen, но авторы работают над усовершенствованной моделью, которая специально обучена всем элементам, делающим Android-бота милым и забавным, ею поделятся позже этим летом. А пока не удивляйтесь, если это приложение выдаст несколько интересных вариантов!

Приложение сочетает в себе множество различных технологий Google, таких как:

• Gemini API - через Firebase AI Logic SDK для доступа к базовым моделям Imagen и Gemini.
• Jetpack Compose - для создания пользовательского интерфейса с восхитительными анимациями и адаптации приложения к различным размерам экрана.
• Navigation 3 - новейшая навигационная библиотека для построения навигационных графов с помощью Compose.
• CameraX и Media3 Compose - для создания кастомной камеры с пользовательскими элементами управления пользовательским интерфейсом (поддержка задней камеры, поддержка зума, тап-фокус) и воспроизведения промо-видео.

Androidify на GitHub: https://github.com/android/androidify
Статья: https://apptractor.ru/androidify-link
Платформа: Android
⭐️: 308
Современные приложения имеют сложную внутреннюю архитектуру, которую при правильном понимании можно оптимизировать для повышения производительности, эффективности и удобства использования. Rosalind от Tuist анализирует пакеты приложений, чтобы выявить скрытые структуры, предоставляя разработчикам четкие и действенные сведения об их коде, зависимостях, ресурсах и общей структуре. Делая невидимое видимым, Rosalind дает командам разработчиков возможность принимать обоснованные решения при доработке приложений.

В настоящее время Rosalind обеспечивает всесторонний анализ артефактов приложений, созданных в Xcode, а в планах есть поддержка платформ Android и React Native. Цель авторов - предложить единый подход к пониманию ДНК ваших приложений во всех основных экосистемах разработки приложений.

Rosalind на GitHub
: https://github.com/tuist/Rosalind
Платформа: iOS
⭐️: 56
1🔥1
Что нового в Jetpack Compose

На Google I/O 2025  объявили о множестве обновлений функций, производительности, стабильности, библиотек и инструментов для Jetpack Compose, рекомендуемого инструментария для создания пользовательских интерфейсов для Android. С помощью Compose вы сможете создавать отличные приложения, которые будут работать на всех устройствах. С момента своего первого анонса (на Google I/O 2019!) Compose значительно усовершенствовался, и сейчас 60% из 1000 лучших приложений в Play Store, таких как MAX и Google Drive, используют и любят его.

Статья: https://apptractor.ru/info/articles/chto-novogo-v-jetpack-compose.html
Платформа: Android
Большое обновление DivKit: визуальный редактор, поддержка форм, аниматоры

Команда DivKit надеется, что новые фичи помогут пользователям фреймворка и облегчат повседневные задачи. А пока мы продолжаем развитие DivKit: сейчас наше внимание направлено на feature parity между платформами и обновление документации.

Статья: https://habr.com/ru/companies/yandex/articles/909300/
Платформа: разработка
👍1