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

(iOS En) SwiftUI App Update Checker
(iOS En) SwiftUI Concentric Rectangle & Concentric Corners in iOS 26
(iOS En) Building a Drawing App in SwiftUI with PaperKit
(iOS En) Conditional App Store Rating Popup Using SwiftUI
(And Ru) Семантический Gradle: публикуем артефакты со спокойствием и уверенностью
(And En) From natural language to UI tests: A deep dive into Journeys for Android Studio
(And En) Split Buttons in Material3 Expressive - Full Guide
(And En) The NEW Material3 Expressive Motion Physics Animation System
(And En) Koin to Kotzilla - TypeAlias Show
(And En) derivedStateOf() vs remember(key) - Optimize recompositions
(Dev Ru) 7 грехов стартапера
(Dev Ru) Собеседование DS инженера в Авито: ML system design (все собеседования)
(Dev Ru) AI-агенты и безопасность — безопасность, уязвимости, LLM, MCP
(Dev En) Mobile System Design - Design Youtube App
(Dev En) Agentic coding at Airbnb
(Dev En) Google Generative AI Leader Certification Course – Pass the Exam

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

(And Ru) Как следить за качеством работы вашего кода. Tracer. Кирилл Попов
(And Ru) 1000 откликов и 0 собеседований — как не войти в айти в 2024: кодревью
(And Ru) Замена иконок — что может быть проще?
Please open Telegram to view this post
VIEW IN TELEGRAM
Moneytopia - трекер финансов

Moneytopia - полнофункциональный личный трекер расходов, созданный с помощью Jetpack Compose и Material 3. Благодаря чистому и интуитивно понятному дизайну он делает управление финансами простым и легким, помогая вам с легкостью контролировать свои расходы.

Внутри: Realm, корутины, Compose Navigation, Compose Compiler Gradle Plugin, Lifecycle ViewModel Compose, AppCompatб Vico Compose Chart, Compose Material Icons Extended.

Moneytopia на GitHub: https://github.com/dimrnhhh/moneytopia
Платформа: Android
⭐️: 53
1
Вайбуем в закрытом корпконтуре с Android Studio, Continue и Ollama в локальном режиме

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

Статья: https://habr.com/ru/companies/sportmaster_lab/articles/957260/
Платформа: Android
1.webm
296.4 KB
Эффект глюка на Jetpack Compose

Эффекты глитча (глюка, сбоя) — неотъемлемая часть научно-фантастических фильмов и киберпанк-игр. В этой статье мы увидим, как легко реализовать этот эффект в Jetpack Compose.

Статья: https://apptractor.ru/info/articles/effekt-glyuka-na-jetpack-compose.html
Платформа: Android
MarkdownView - отображение markdown контента в SwiftUI

MarkdownView предлагает невероятно простой и гибко настраиваемый способ отображения markdown разметки в вашем приложении. Он использует Swift-Markdown для анализа разметки, полностью совместим со спецификацией CommonMark.

Фичи:

• Полностью совместима с CommonMark
• Поддерживает рендеринг SVG 
• Поддерживает LaTeX
• Настраиваемые шрифты, подсветка кода, цветов
• Нативная реализация для SwiftUI

MarkdownView на GitHub: https://github.com/LiYanan2004/MarkdownView
Платформа: iOS
⭐️: 440
Сам себе Шерлок: 7 способов найти логи и поймать баг на iOS

Знакома ситуация, когда кнопка не работает, приложение виснет, анимации тормозят, но при этом нет никаких ошибок на экране? Можно часами играть в детектива, гадая по UI и строя догадки, что пошло не так. А можно за несколько минут найти настоящего преступника — ведь iOS щедро оставляет улики в виде логов. Нужно лишь знать, где их искать. Секрет — в грамотном выборе способа, как собрать доказательства.

Статья: https://habr.com/ru/articles/958142/
Платформа: iOS
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Что такое ANR и как с ним работать правильно

Когда пользователь открывает приложение, нажимает на кнопку — и ничего не происходит несколько секунд, Android начинает считать, что “приложение не отвечает”. Через 5 секунд на главном потоке система показывает диалог:

“Приложение не отвечает. Закрыть?”

Это и есть ANR (Application Not Responding).

Статья: https://habr.com/ru/articles/958278/
Платформа: Android
👍1
Продвинутые Codable

В статье автор показывает, как выйти за рамки стандартного Codable в Swift, когда JSON-структура не совпадает с моделью данных. Вместо громоздких init(from:) предлагается разделять DTO (структуру, соответствующую JSON) и модель, используя протоколы AdvancedDecodable и AdvancedEncodable. Они позволяют автоматически кодировать и декодировать данные через промежуточный слой, где можно добавлять валидацию и преобразования, не теряя простоту Codable. Помимо этого, автор предлагает обёртки Maybe, Either и Both — универсальные решения для обработки некорректных или неоднородных данных. Такой подход сохраняет читаемость и устойчивость к изменениям API, делая код надёжнее и понятнее.

Статья: https://nothingtocommitworkingtreeclean.com/advanced_codable.html
Платформа: iOS
👍1
Уменьшающиеся слоны

В статье команда инженеров Block рассказывает о проблеме масштабных монорепозиториев — когда проект разбит на тысячи подпроектов и IDE синхронизирует десятки миллионов строк кода, разработка становится неэффективной. В примере приводят ситуацию, когда «холодная» (cold) синхронизация в IntelliJ с Gradle занимает около 24 минут, и при этом используется порядка 36 ГБ оперативной памяти — очевидно, что для разработчика такое ожидание неприемлемо.

Чтобы решить эту проблему, авторы вводят ряд «интервенций» — изменений поверх обычного Gradle-процесса, направленных на уменьшение объёма работы IDE при синхронизации. Среди них — параллельная загрузка моделей, ограничение числа проектов, которые синхронизируются (Spotlight), отключение транзитивной синхронизации зависимостей (intransitive sync), замена подпроектов на заранее собранные артефакты (artifact swap), предпроскачивание зависимостей (pre-fetch). В совокупности эти меры позволили снизить время синхронизации с нескольких минут до ~15 секунд — улучшение порядка 97% — и значительно снизить нагрузку на ресурсы.

Статья: https://engineering.block.xyz/blog/shrinking-elephants
Платформа: Android
👍1
Material Pickers - Material 3 пикеры для Compose

Material Pickers - компоненты выбора для Jetpack Compose, соответствующие материальному дизайну. Выразительные, настраиваемые и идеально вписывающиеся в систему дизайна Material 3. Библиотека предоставляет готовые к использованию вертикальные, горизонтальные и двойные (парные) пикеры, а также низкоуровневые примитивы для создания полностью настраиваемых макетов.

Material Pickers на GitHub: https://github.com/eidam-slices/material-pickers
Платформа: Android
⭐️: 7
1
Как создать собственную библиотеку на Kotlin Multiplatform

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

Статья: https://nuancesprog.ru/p/30352/
Платформа: Android/кроссплатформа
1
Архитектура SwiftUI: структурируем представления для повторного использования и ясности

Новая статья от Антуана ван дер Ли предлагает практический подход к организации архитектуры SwiftUI-приложений с акцентом на читаемость, повторное использование и поддержку кода. Автор начинает с примера простого списка статей, который со временем может стать перегруженным из-за добавления новых функциональностей, таких как индикаторы загрузки, обработка пустых состояний и действия с ячейками. Чтобы избежать этого, он рекомендует разделять представления на более мелкие компоненты, используя такие техники, как выделение отдельных представлений, создание расширений и вычисляемых свойств. Однако он предостерегает от чрезмерного использования этих методов, чтобы не усложнить структуру кода. В статье подчеркивается важность соблюдения принципов читаемости и повторного использования кода, что способствует более легкому тестированию и поддержке приложения в будущем. Автор также делится практическими рекомендациями по организации представлений и структуры проекта, что делает материал полезным для разработчиков, стремящихся улучшить архитектуру своих SwiftUI-приложений.

Статья: https://www.avanderlee.com/swiftui/swiftui-architecture-structure-views-for-reusability-and-clarity/
Платформа: iOS
👍1
Kinetics - настраиваемые примитивы физического движения для SwiftUI

Kinetics привносит естественное ощущение реальной физики в ваши анимации SwiftUI. Разработанный на основе Swift 6 с строгим соблюдением принципов многопоточности, он предоставляет современную и безопасную основу для создания анимаций, которая реагируют на действия пользователя, учитывают границы и выглядят реалистично.

Kinetics на GitHub: https://github.com/roberthein/kinetics
Платформа: iOS
⭐️: 156
Combine – швейцарский нож iOS-разработчика. Или нет

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

Большинство статей описывают 3 сущности: Publisher (издатель), Subscriber (подписчик) и Operator'ы. Но они умалчивают еще об одном игроке – Subnoscription. Именно подписка управляет всей "жизнью" цепочки: кто кому и когда передаёт данные, и когда всё заканчивается.

Статья: https://habr.com/ru/companies/banki/articles/958650/
Платформа: iOS
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Globe - вращающийся "глобус" из изображений

Globe - вращающийся "глобус" из изображений (они тоже являются composable) на Compose Multiplatform. Поддерживает Android, iOS, Desktop (JVM).

Globe на GitHub: https://github.com/pedromassango/compose_concepts
Платформа: Android/кроссплатформа
⭐️: 29
🔥4
📺 Видео и подкасты за неделю @AppFiles

(iOS En) Building an iOS Ghibli App with SwiftUI, MVVM, and Swift Concurrency
(iOS En) Create immersive media experiences for visionOS
(iOS En) SwiftUI Course for Beginners – Create an iOS App from Scratch
(iOS En) 5 Useful SwiftUI Modifiers
(iOS En) Foundation Models Framework in Swift
(iOS En) iOS 26 Style Floating Sheets Using SwiftUI
(And Ru) Как обеспечить стабильную работу SDK для миллионов устройств
(And En) Bringing Androidify to XR
(And En) State vs. Actions vs. Events On Android & KMP
(And En) Single & Multi-Choice Button Groups In Material3 Expressive
(And En) What's new in Kotlin 2.2.21 (and 2.2.20!)
(And En) Discussing Kotlin Coroutines with Marcin Moskała
(And En) A Common Mistake when working with Kotlin Flows
(And En) Your Toolchain is Production: The Case for Observability
(And En) From Lag to Lightning: Transforming Dependency Update Timelines
(And En) Universal Cache: It’s time for fast, reliable, and cheap CI pipelines
(And En) Gradle: Your Build, Your Rules
(Crs Ru) Что ждёт Kotlin Multiplatform разработчика на собесе? (все собеседования)
(Dev Ru) Как сделать Offline Mode. Секреты от Avito.Tech
(Dev Ru) Бережливое управление людьми — менеджмент без переработок и выгорания
(Dev En) Data Structures and Algorithms Mega Course – Master Technical Interviews in 49 Hours

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

(And Ru) Избавляемся от Context в бизнес логике — как ответить на собеседовании
(Dev Ru) Backend vs Frontend: сравниваем опыт разработчиков — что сложнее, перспективнее и кому больше платят
(Dev Ru) Grafana: инструкция по применению
(Dev Ru) Тесты с душком
(Dev Ru) Как писать библиотеки: проектирование API, обратная совместимость
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Space! - виджет с фотографиями NASA

Астрономическая фотография дня от NASA — теперь на вашем главном экране с виджетами!

Space! отображает последние фотографии Astronomy Picture of the Day, публикуемые NASA каждый день. Чтобы увидеть последние фотографии, добавьте виджет на главный экран или в окно «Сегодня», или просто откройте приложение для просмотра на весь экран и ознакомления с познавательным описанием.

Space! — это приложение с полностью открытым исходным кодом, разработанное на Swift и SwiftUI.

Space! на GitHub: https://github.com/jtbandes/SpacePOD
Платформа: iOS
⭐️: 112
👍1
Разница между @MainActor и DispatchQueue.main.async — вопросы с собеседования

Основное различие заключается в том, что @MainActor — это современный атрибут из фреймворка Swift Concurrency, который гарантирует выполнение кода в главном потоке на этапе компиляции, а DispatchQueue.main.async — это более старая команда из Grand Central Dispatch (GCD), которая асинхронно отправляет блок кода на выполнение в главную очередь в рантайме.​

Статья: https://apptractor.ru/info/articles/raznitsa-mezhdu-mainactor-i-dispatchqueue-main-async-voprosy-s-sobesedovaniya.html
Платформа: iOS
👍2
За 3 дня запустить Android приложение на iOS: опыт адаптации приложения под CMP

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

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

Да, тема довольно холиварная, и в статье я не заявляю, что KMP лучше Flutter’а во всем. Каждая технология хороша под свои задачи. Вместо этого я расскажу о конкретном проекте, на котором KMP оказался более удачным выбором. Также коснусь вопросов архитектуры и миграции Android-приложения на iOS с помощью CMP, а заодно подсвечу подводные камни, с которыми пришлось разбираться в процессе.

Статья: https://habr.com/ru/companies/kts/articles/959950/
Платформа: кроссплатформа
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Сравниваем два View с помощью слайдера в SwiftUI

Когда вам нужно визуально сравнить два изображения, экрана или состояния, слайдер «до и после» часто оказывается наиболее интуитивно понятным решением. В этой статье мы рассмотрим, как создать многоразовое представление сравнения со слайдером полностью на SwiftUI — без использования UIKit или внешних библиотек.

Статья: https://apptractor.ru/info/articles/sravnivaem-dva-view-s-pomoschyu-slaydera-v-swiftui.html
Платформа: iOS
👍3