AppFiles - Mobile Development – Telegram
AppFiles - Mobile Development
2.14K subscribers
2.83K photos
38 videos
11 files
3.76K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Пишем игру-головоломку под macOS на SwiftUI [StarDust Collector]

В прошлой статье я поделился опытом, как писал с помощью ИИ кастомный TO-DO-лист под macOS. Опыт оказался противоречивым, но приложение всё-таки получилось и даже работало.

Поэтому я решил добавить немного фана и реализовать мечту любого программиста — написать собственную игру. Так как у меня уже появилось небольшое понимание экосистемы десктоп-приложений под macOS и SwiftUI, я решил использовать именно её.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Kotlin и Arrow: функциональное программирование с Either, Validated и эффектами

Сегодня расскажем про библиотеку Arrow в Kotlin. Arrow привносит в Kotlin крутые штуки из функционального программирования: типы вроде Either и Validated для работы с ошибками, эффекты для безопасной работы с внешним миром, ну и много всего. Звучит мощно, но когда за это действительно стоит браться?

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👎4🔥1
Kvaesitso - лаунчер для Android

Kvaesitso — это ориентированный на поиск бесплатный лаунчер для Android с открытым исходным кодом. Главная особенность — глобальный поиск, который позволяет искать не только приложения, контакты и события календаря на устройстве, но и в веб-сервисах, таких как Википедия. Кроме того, он включает в себя ряд полезных инструментов, например, калькулятор и конвертер единиц измерения. Ищете документ или информацию? Просто выполните поиск, и Kvæsitso покажет вам самый быстрый путь к ней.

Внутри Jetpack Compose и Accompanist для UI, Koin для DI, Coil для изображений, корутины для асинхронных операций, KotlinX serialization для сериализации, Room для данных, Datastore для данных пользователей, Ktor для запросов и еще несколько библиотек AndroidX.

Kvaesitso на GitHub: https://github.com/MM2-0/Kvaesitso
Платформа: Android
⭐️: 4.2K

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Coordinator в iOS: как я перестал бояться кнопки «Назад» и полюбил навигацию

Эта статья - логическое продолжение нашего погружения в архитектуру. Если в первой части мы навели порядок внутри «черного ящика» под названием ViewModel, то здесь мы выйдем за его пределы. Вы узнаете, как выпилить логику переходов из ViewControllers и ViewModels, почему вызов navigationController?.pushViewController() прямо в экшене кнопки - это архитектурный тупик, и как построить систему навигации, которая не превратит ваш проект в спагетти при добавлении десятого экрана. Мы разберем концепцию Child Coordinators, решим проблему утечек памяти (спойлер: системная кнопка "Назад" - ваш враг) и обсудим, выжил ли этот паттерн в эпоху SwiftUI.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Модульность как архитектурный выбор

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

Статья: https://apptractor.ru/info/articles/modulnost-kak-arhitekturnyy-vybor.html
Платформа: разработка

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Осваиваем переходы между общими элементами в Compose

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

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

Статья: https://apptractor.ru/info/articles/osvaivaem-perehody-mezhdu-obschimi-elementami-v-compose.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Destinations - управление потоком навигации

Destinations — это библиотека Swift для UIKit и SwiftUI, разработанная для полного разделения пользовательского интерфейса и управления потоком навигации. Она основана на философии, которая подчеркивает четкое разделение задач, то есть каждый значимый View или UIViewController в приложении не должен знать о других, и то, что пользовательский интерфейс и функциональность должны легко заменяться по мере изменения потребностей. Destinations позволяет вашим пользовательским интерфейсам снова сосредоточиться на пользователе.

• Обеспечивает четкое разделение задач между вашими интерфейсами, источниками данных и другой логикой приложения.
• Позволяет легко заменять пользовательский интерфейс и источники данных для A/B-тестирования или предоставления тестовых моков.
• Сокращает время разработки — предоставляет встроенные реализации для многих типов представления системы, уменьшает объем кода по мере изменения функциональных потоков.
• Обеспечивает удобную возможность глубокой привязки.
• Предоставляет возможность отображать и тестировать разделы ваших приложений изолированно.
• Гибкая и расширяемая система на основе протоколов, соответствующая потребностям вашего проекта, включая пользовательский интерфейс.
• Аналогичный API как для UIKit, так и для SwiftUI, и достаточно универсальный, чтобы обеспечить поддержку других платформ. Поддерживает приложения на основе UIKit и SwiftUI, а также гибридные приложения с контентом SwiftUI, размещенным в контроллерах UIKit.

Destinations на GitHubhttps://github.com/poetmountain/Destinations
Платформа: iOS
⭐️: 18

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как не сломать Android-приложение при защите от реверса

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

Чтобы развеять опасения разработчиков и повысить их уверенность в качестве защищённой сборки, мы покажем принципы работы с протектором. Нельзя же включать все техники по умолчанию в надежде, что функциональность не пострадает.

Далее мы разберем, какие участки Android‑приложения можно защитить одной кнопкой, что требует настройки, а что трогать нельзя.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Про то, как я Storage Access Framework укрощал, да файлы в хранилище приручал

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

Но вот однажды пользователи стали жаловаться, что не могут найти ранее подписанные документы. Бывало, пользователь подписал файл, долго к нему не возвращался, а спустя время уже не смог его отыскать. Переустановил приложение или авторизовался с другого устройства, и все файлы как в воду канули.

Меня зовут Георгий Левченко, я Android-разработчик в ПСБ. Начал я искать источник бед пользовательских. Оказалось, виной всему было то, что все файлы хранились в кэш-директории приложения. Понял я: чтобы файлы не пропадали, им нужен менеджмент для файлов. Отыскался у Android для таких целей готовый инструмент — Storage Access Framework (SAF), он служит для доступа к файлам через стандартный интерфейс без управления разрешениями вручную. Поведаю под катом, как я решал с его помощью эту задачу.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему Senior iOS-разработчики всё ещё проваливаются на System Design интервью

Вы когда-нибудь задумывались, почему программист с 8–10+ годами опыта уверенно пишет сложный код в Xcode, но за белой доской в интервью у него словно отключается «второе полушарие»? Опытный iOS-разработчик отлично знает Swift и архитектуру MVVM/Clean, но интервью по System Design проверяет не просто знания фреймворков. Это совсем другой навык — умение строить масштабирующиеся системы, аргументировать архитектурные решения и чётко объяснять свои мысли под давлением.

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

Статья: https://blog.stackademic.com/groww-ios-interview-why-senior-developers-still-fail-system-design-da24e34e4382
Платформа: iOS/System Design

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Ошибка, которую я не мог воспроизвести — пока не перестал тестировать на своём телефоне

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

«Приложение постоянно перезапускается после того, как я делаю снимок».

Оно не зависало и не выдавало ошибок. Просто закрывалось и перезапускалось.

Самое странное, что на моём телефоне всё работало идеально. И на устройствах моих коллег тоже.

Поначалу это казалось какой-то «призрачной ошибкой», которая проявляется только тогда, когда пользователь находится далеко, и вы не видите его экран.

Но это приложение — инструмент на основе GPS для сбора данных. Пользователи сканируют штрихкод, чтобы предотвратить дублирование активов, заполняют несколько экранов с подробными данными, делают снимки, регистрируют серийные и модельные номера, и мы сохраняем всё локально перед синхронизацией с сервером. Изображения автоматически сжимаются до 100 КБ или меньше, поэтому загрузка работает даже в медленных сетях.

Это серьёзный рабочий процесс. Не приложение типа «заполнил одну форму и отправил».

И где-то внутри этого процесса всё начало разваливаться.

Статья: https://apptractor.ru/info/articles/oshibka-kotoruyu-ya-ne-mog-vosproizvesti-poka-ne-perestal-testirovat-na-svoyom-telefone.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Обратное маскирование в SwiftUI с использованием режимов наложения

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

Карточка видима везде, кроме области, где расположена фигура. Эта область становится прозрачной.

В UIKit вы можете использовать Core Graphics или маски слоев.

В SwiftUI решение заключается в режимах наложения.

Статья: https://apptractor.ru/info/articles/obratnoe-maskirovanie-v-swiftui-s-ispolzovaniem-rezhimov-nalozheniya.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Skelter Project - готовый шаблон проекта на Flutter

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

Технологический стек:

• Flutter: ^3.35.7
• Dart SDK: ^3.9.2
• Управление состояниями: BLoC
• Навигация: Auto Route
• Бэкенд: Firebase (Core, Analytics, Crashlytics, Auth)
• Аутентификация: Firebase Auth, Google Sign-In, Apple Sign-In
• UI-компоненты: кастомные виджеты, Flutter SVG, эффекты мерцания
• Тестирование: Flutter Test, Bloc Test, Alchemist (Golden Tests), Mocktail
• Генерация кода: Build Runner, Auto Route Generator, Flutter Gen Runner

Skelter Project на GitHub: https://github.com/solguruz/skelter
Платформа: кроссплатформа/Flutter
⭐️: 79
Combine умер?

Да, Combine теряет часть своей роли на фоне Swift Concurrency и новых средств наблюдения.

Но ни официально не признан устаревшим, ни полностью не прекращает быть полезным, особенно в существующих кодовых базах и для определённых архитектурных задач.

Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как мы помогали Стэнфорду следить за акулами

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

Продолжаем рассказывать об интересных проектах студентов ФИИТ. В этот раз речь пойдёт о приложении для интерактивного мониторинга белых акул по заказу Стэнфордского университета. 🦈 В статье ребята рассказали, какие возможности реализовали внутри приложения, какой стек технологий выбрали и что за сложности случились на фронтенде и бэкенде.

Статья: https://habr.com/ru/companies/skbkontur/articles/992662/
Платформа: разработка

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Модульная архитектура — это не просто теория, вот доказательства

Среднестатистический разработчик, если его попросят дать определение модульности, вероятно, скажет что-то вроде:

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

Здесь нет ничего неверного, но это опасно неполно; отсутствует объяснение того, почему это важно — а это крайне важно для понимания того, что такое хорошая модульность.

Статья: https://apptractor.ru/info/articles/modulnaya-arhitektura-eto-ne-prosto-teoriya-vot-dokazatelstva.html
Платформа: iOS/архитектура

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Kotlin Android MVVM Template - шаблон Android-приложения

Kotlin Android MVVM Template - простой и легкий шаблон для приложения Jetpack Compose с полностью настроенной навигацией, Retrofit и Dagger-Hilt для вашего удобства, чтобы вы могли сосредоточиться только на важном.

Фичи:

• Полностью на Jetpack Compose
• Jetpack Compose Navigation
• Полностью настроенный Retrofit 
• MVVM
• Kotlin DSL
• Gradle Version Catalog для инъекции зависимостей
• detekt для проверки кода
• Dependabot для обновления зависимостей
• GitHub Actions CI/CD для проверки линтера, тестов и сборки APK
• Coil для изображений

Kotlin Android MVVM Template на GitHub: https://github.com/its-me-debk007/kotlin-android-mvvm-template
Платформа: Android
⭐️: 62

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Под капотом Android Automotive: Что такое VHAL и почему это сердце машины

В прошлой статье мы запустили эмулятор и убедились, что Android Automotive OS (AAOS) — это не просто зеркало вашего телефона. Это самостоятельная экосистема. Но пока мы запускали только стандартные медиа-плееры, мы скользили по поверхности.

Настоящая магия начинается там, где софт встречается с «железом».

В телефоне у вас есть стандартный набор датчиков: GPS, акселерометр, гироскоп. В современном автомобиле таких датчиков тысячи: от давления в шинах и температуры масла до угла поворота руля и статуса каждой двери. Как Android-разработчику получить доступ к этому океану данных? Не будем же мы тянуть провода к OBDII разъему?

Конечно, нет. Для этого Google построила мощный мост, по которому мы сегодня и пройдемся. Добро пожаловать в мир Car API и VHAL.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM