AppFiles - Mobile Development – Telegram
AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.7K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Pixel Weather App - многофункциональное погодное приложение для Android с уникальным пиксель-арт пользовательским интерфейсом, разработанное в качестве дипломного проекта. Приложение не только отображает стандартные прогнозы погоды из OpenWeatherMap API, но и использует локальную модель TensorFlow Lite для прогнозирования температуры «ощущается как».

Внутри Kotlin, Jetpack Compose, MVVM, корутины и Flow, Hilt, Room, TensorFlow Lite, Gradle.

Pixel Weather App на GitHub: https://github.com/ArtemZarubin/PixelArtWeatherML
Платформа: Android
⭐️: 29
Как мы распилили монолит Tinder

Tinder поделился опытом преодоления проблем, связанных с монолитной архитектурой в iOS-приложении. Они столкнулись с трудностями, такими как медленные сборки, отсутствие четкой ответственности за модули и сложности в тестировании. Чтобы решить эти проблемы, команда Tinder применила стратегию модульности, разделив монолит на независимые Swift-модули.

Ключевые аспекты подхода Tinder:

1. Сокращение критического пути сборки: Путем «уплощения» графа зависимостей, то есть устранения ненужных зависимостей между модулями, они добились возможности параллельной компиляции, что значительно ускорило процесс сборки.
2. Модульность как средство управления зависимостями: Разделение кода на модули позволило явно определить контракты между частями системы, уменьшить использование анти-паттернов, таких как синглтоны и циклические зависимости, и улучшить читаемость и поддержку кода.
3. Автоматизация процесса: С учетом масштабов проекта (более 1000 файлов и 150 000 строк кода), ручная модульность была бы неэффективной. Tinder разработал инструменты для автоматического рефакторинга, что обеспечило масштабируемость и последовательность изменений.

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

Статья: https://medium.com/tinder/how-we-decomposed-tinders-monolith-48dcf01a6066
Платформа: iOS
3👍3
Скриншот-тестирование для превью Compose

Скриншот-тестирование - эффективный способ проверить, как ваш пользовательский интерфейс выглядит для пользователей. Инструмент Compose Preview Screenshot Testing сочетает в себе простоту и возможности composable превью с повышением производительности при выполнении скриншот-тестов на собственном компьютере. Compose Preview Screenshot Testing разработан для того, чтобы быть таким же простым в использовании, как и сами composable превью.

Статья: https://apptractor.ru/info/articles/skrinshot-testirovanie-dlya-prevyu-compose.html
Платформа: Android
1
This media is not supported in your browser
VIEW IN TELEGRAM
Выразительные анимации для всех

По мере изучения возможностей Material 3 Expressive одним из первых компонентов, которые я собираюсь внедрить, станут кнопки-переключатели. Благодаря новой выразительной системе движений и визуальных эффектов мне не терпится увидеть, как эти кнопки могут стать более динамичными, плавными и эмоционально привлекательными - выйти за рамки статичных элементов пользовательского интерфейса и стать тем, что действительно реагирует на взаимодействие с пользователем.

Статья: https://apptractor.ru/info/articles/vyrazitelnye-animatsii-dlya-vseh.html
Платформа: Android
ObservableDefaults - библиотека Swift, которая легко интегрирует UserDefaults и NSUbiquitousKeyValueStore (iCloud Key-Value Storage) с фреймворком Observation в SwiftUI. Он предоставляет два мощных макроса (@ObservableDefaults для локального управления UserDefaults и @ObservableCloud для облачного синхронизированного хранения данных), которые упрощают сохранение данных, автоматически связывая объявленные свойства с соответствующими системами хранения. Это позволяет точно и эффективно реагировать на изменения данных, независимо от того, происходят ли они внутри приложения, извне или на нескольких устройствах.

ObservableDefaults на GitHub: https://github.com/fatbobman/ObservableDefaults
Платформа: iOS
⭐️: 152
📺 Видео и подкасты за неделю на @AppFiles

(iOS Ru) Ускоряем приложение эффективно
(iOS Ru) Swift Concurrency в iOS SDK Яндекс Доставки
(iOS Ru) Как мы доверили качество наших приложений AI
(iOS En) iOS Interview Question: Build a World Clock App in SwiftUI
(iOS En) 6 Useful SwiftUI Modifiers - Xcode 16
(iOS En) How to Run Automated UI Tests in iOS with XCUITest
(iOS En) Elevate Your SwiftUI Lists with iOS 18’s New Container Features
(iOS En) SwiftUI iOS Localization Tutorial: Master String Catalogs in Xcode 16
(iOS En) How Task Cancellation Really Works in Swift (Behind the Scenes)
(iOS En) Re-creating iMessage Morph-Menu Effect Using SwiftUI
(And Ru) История одного бизнес-желания
(And Ru) Наглядный пример, когда не следовать best practices for coroutines от Google
(And Ru) Кто является Senior разработчиком?
(And En) What’s new in Jetpack Compose
(And En) Google Home APIs, tools, and Gemini capabilities for your apps
(And En) KotlinConf'25 - Keynote
(And En) Everything you need to know about NEW Navigation 3
(Crs Ru) Борьба с лишним весом, или Методы оптимизации размеров Flutter-приложений
(Crs En) Hot Reload In Compose Multiplatform (CMP) - THIS Is All You Have to Know
(Dev Ru) Анатомия энергопотребления
(Dev Ru) От J2ME до супераппов: 20 лет разработки глазами техдиректор
(Dev Ru) Вадим Чистяков — Global Talent Visa, переезд в Лондон, работа в IT
(Dev Ru) Мнемотехника: запомнить всё — развитие памяти, насмотренность, саморазвитие
(Dev En) Announcing Gemma 3n Preview: Powerful, Efficient, Mobile-First AI
(Dev En) Learn Python for Data Science – Full Course for Beginners

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

(iOS Ru) Как писать игры на Swift для Playdate
(iOS Ru) Мок-собеседование iOS-разработчика. SwiftUI (+ все собеседования)
(iOS Ru) Макросы Swift: проще, чище, быстрее
(iOS Ru) Мы решили все проблемы работы в модульном проекте. Хотите так же?
(And Ru) Оптимизация Compose: проблемы, опыт, тактика, стратегия
(Crs Ru) 5 лет с Flutter: эволюция кроссплатформенности
(Crs Ru) Flutter-диета. Как сбросить вес, выпиливая модули
(Dev Ru) Прокачиваем Code Review: как выжать максимум?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
ReadMoreTextView - библиотека реализует сворачиваемый виджет Text с «Читать дальше» в свернутом состоянии и «Читать меньше» в развернутом. Поддерживает Android View и Jetpack Compose.

ReadMoreTextView на GitHub: https://github.com/webtoon/ReadMoreTextView
Платформа: Android
⭐️: 180
Для чего я написал собственный аудиопроигрыватель

Раздосадованный ограниченностью возможностей, я решил взяться за разработку. Если уж я купил вычислительное устройство (в данном случае iPhone), то что мешает мне просто создать необходимое мне при помощи кода? В этой статье я расскажу о своих разочарованиях по пути к реализации базовой функциональности музыкального плеера: загрузки аудиофайлов, их упорядочивания и воспроизведения. Но больше всего мне хотелось напомнить себе, что это просто компьютер, и у меня должна быть возможность заставить его выполнять нужные мне задачи.

Статья: https://habr.com/ru/companies/ruvds/articles/912886/
Платформа: iOS
Автоматизация проверки стиля кода с помощью KtLint в Android проекте

Мне повезло участвовать в большом стартапе и начать проект самостоятельно. И в моем проекте я решил покончить с Code Review в привычном понимании.

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

В данной статье я рассмотрю только анализ стиля Kotlin кода и его автоматическое исправления согласно выработанным правилам в проекте.

Статья: https://habr.com/ru/articles/914250/
Платформа: Android
🔥1
SmartCaptcha Yandex на iOS: инструкция по внедрению

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

Материал предназначен для iOS-разработчиков, у которых уже есть базовые знания мобильной разработки, и кто хочет быстро и корректно внедрить капчу от Яндекса в свое iOS-приложение.

Статья: https://habr.com/ru/companies/simbirsoft/articles/914178/
Платформа: iOS
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Марширующие муравьи - делаем кастомный модификатор для границ

Граница в виде "марширующих муравьев" — распространенный элемент пользовательского интерфейса, используемый для обозначения «выбранного» элемента, но предоставляемый Compose модификатор border() не справляется с этой задачей.

Поэтому давайте создадим свой собственный!

И по ходу дела мы многое узнаем о Paths, измерении путей, рисовании путей и эффектах!

Статья: https://apptractor.ru/info/articles/marshiruyuschie-muravi-delaem-kastomnyy-modifikator-dlya-granits.html
Платформа: Android
🔥1
ChessKit - пакет Swift для эффективной реализации шахматной логики (не игры самой, а именно логики). Реализует представление доски и всех игровых фигур, проверку правильности хода, ветвление ходов и вариации, состояний игры (шах, мат, пат, ничья) и т.п.

ChessKit на GitHub: https://github.com/chesskit-app/chesskit-swift
Платформа: iOS
⭐️: 14
👍2
Уникальные значения - удаление дубликатов из массива в Swift

Удаление дубликатов для получения уникальных значений из массива может быть распространенной задачей. В таких языках, как Ruby, есть встроенные методы, например uniq, но в Swift нам приходится создавать такие методы самостоятельно. Стандартная библиотека не предоставляет простого способа для этого.

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

Статья
: https://apptractor.ru/info/articles/unikalnye-znacheniya-udalenie-dublikatov-iz-massiva-v-swift.html
Платформа: iOS
👍1
Live Updates в Android 16 — исследуем новые уведомления

Начиная с Android 16, у нас появился новый стиль уведомлений Notification.ProgressStyle, который мы можем использовать для создания уведомлений, ориентированных на отображение прогресса выполнения задач.

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

Статья: https://apptractor.ru/info/articles/live-updates-v-android-16-issleduem-novye-uvedomleniya.html
Платформа: Android
Tomoyo — это приложение Kotlin Multiplatform. С одной стороны, это функциональная копия веб-сайта, позволяющая реализовать некоторые его функции на мобильных и десктопных платформах. С другой стороны, оно служит примером для общих функций, таких как навигация, сокеты (для чата), видео, аудио и база данных в Kotlin Multiplatform.

Tomoyo на GitHub: https://github.com/AsterCass/Tomoyo
Платформа: Android/кроссплатформа
⭐️: 65
👍1
Swift в Apple: перенос службы мониторинга паролей с Java

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

Статья: https://apptractor.ru/info/articles/swift-v-apple-perenos-sluzhby-monitoringa-paroley-s-java.html
Платформа: Swift/разработка
👍1
Творческая переработка MVVM и TCA на примере iOS

За основу мы взяли архитектуру MVVM (Model—View—ViewModel), в которой View отвечает за графическое представление данных, вся бизнес логика сосредоточена внутри ViewModel. ViewModel обрабатывает запросы от View, обновляет свои данные, и View посредством data binding автоматически обновляет своё представление, что очень удобно. Model — модель для хранения и передачи данных.

Статья: https://habr.com/ru/companies/gri/articles/913610/
Платформа: iOS
👍1
Kotlin 2.4 представляет расширенные ошибки — революционное изменение в обработке ошибок

На конференции KotlinConf 2025 была представлена новая функция Kotlin 2.4 — Rich Errors, которая обещает изменить подход к обработке ошибок в языке.
fun fetchUser(): User | AppError {
if (/* network fails */) return NetworkError(503)
if (/* user not found */) return UserNotFoundError
return User("123", "Ada")
}

fun loadUserData() {
val result = fetchUser()
when (result) {
is User -> show(result)
is NetworkError -> showError("Проблема с сетью (${result.code}). Попробуйте снова.")
is UserNotFoundError -> showError("Пользователь не найден. Проверьте данные.")
}
}

Почему это важно?

1. Безопасность типов: Компилятор знает о всех возможных ошибках и требует их обработки.
2. Меньше шаблонного кода: Уменьшается необходимость в многочисленных блоках try-catch.
3. Упрощение тестирования: Тестировать функции становится проще, так как ошибки возвращаются как значения, а не выбрасываются как исключения.

Везде, где возможны предсказуемые ошибки, Rich Errors делают код более надежным и понятным.

Статья: https://xuanlocle.medium.com/kotlin-2-4-introduces-rich-errors-a-game-changer-for-error-handling-413d281e4a05
Платформа: Android

👍 если хотите русский перевод
3🔥3👍1
SwiftSMTP предоставляет реализацию на основе SwiftNIO для отправки электронных писем с использованием SMTP-серверов.

Существует структура Configuration (и ее вложенные структуры и перечисления), которая настраивает доступ к SMTP-серверу (имя хоста, учетные данные и т.д.).

После того, как у вас есть Configuration (вместе с NIO EventLoopGroup), вы можете создать Mailer. Mailer отвечает за настройку канала NIO, который подключается к SMTP-серверу и доставляет электронную почту.

Имея Mailer в своем распоряжении, вы можете использовать его для отправки электронной почты. Поскольку SMTP прерывает соединение после каждой доставки, Mailer создает новое соединение для каждой электронной почты, которая должна быть доставлена.

SwiftSMTP на GitHub: https://github.com/sersoft-gmbh/swift-smtp
Платформа: iOS
⭐️: 49
Как мы превратили iPhone в лабораторный микроскоп с AI и BLE: real-world edge-приложение

В этой статье я хочу поделиться опытом разработки iOS-приложения для роботизированного микроскопа с AI-распознаванием клеток крови — как оно устроено, какие задачи пришлось решать, на какие грабли пришлось наткнуться и как iPhone можно использовать в качестве лабораторного инструмента.

Это не очередной todo-лист с авторизацией или приложение для наложения масок на селфи — в центре внимания: видеопоток с окуляра микроскопа, нейронки, работа с железом, Bluetooth-управление перемещением стекол, и всё это — прямо на iPhone.

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

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