TGViewer
Channel Public Channel
AppFiles - Mobile Development

AppFiles - Mobile Development

@applib

Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Subscribers
2.18K
Photos
3.3K
Videos
48
Links
4.3K

Showing posts older than #4042 · Back to latest

Older Posts 20 shown
Post #4041 340
Зачем нужен companion object в Hilt-модулях

Замечали некий companion object в интерфейсах Hilt-модулей? Что он делает, как он работает под капотом, почему так популярен в Hilt-модулях, и почему нельзя обойтись обычными классами? Сегодня я развею эту магию!

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4040 388
Kotlin Multiplatform LaTeX Rendering Library - рендеринг формул LaTeX в Compose

Kotlin Multiplatform LaTeX Rendering Library - высокопроизводительная библиотека для анализа и отображения математических формул LaTeX, разработанная на основе Kotlin Multiplatform (KMP). Она поддерживает согласованные эффекты отображения на Android, iOS, Desktop (JVM) и Web (Wasm/JS).

Фичи:

• Высокопроизводительный парсинг: рекурсивный парсер на основе AST с поддержкой инкрементальных обновлений
• Кроссплатформенная консистентность: используется Compose Multiplatform для единообразного рендеринга на Android, iOS, Desktop (JVM) и Web (Wasm/JS)
• Автоматический перенос строк: умный перенос длинных формул по логическим точкам разрыва (операторы, отношения и т.д.)
• Экспорт изображений: возможность экспортировать отрендеренные формулы в изображения PNG/JPEG/WEBP с настраиваемым масштабированием разрешения
• API предварительного измерения: синхронное предварительное вычисление размеров формулы (ширина/высота/baseline) для встраивания математических выражений в Compose через InlineTextContent
• Доступность: встроенная поддержка screen reader’ов с описанием формул в стиле MathSpeak
• LaTeX → MathML: конвертация AST LaTeX в Presentation MathML
• Подсветка формул: возможность подсветки подвыражений внутри формулы через HighlightConfig
• Анимации: анимированные переходы между формулами (crossfade / slide / fade+slide)
• WYSIWYG-редактор (экспериментально): встроенный редактор LaTeX с позиционированием курсора, размещением по тапу и предпросмотром отрендеренной формулы в реальном времени

Kotlin Multiplatform LaTeX Rendering Library на GitHub: https://github.com/huarangmeng/latex
Платформа: Android/кроссплатформа
⭐️: 55

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 👎 1
Post #4039 389
Малоизвестная возможность Swift: for case let, о которой не знают многие iOS-разработчики

Swift известен системой pattern matching. Большинство разработчиков используют её в switch, иногда в if case или guard case. Но в языке есть ещё одна конструкция, которую многие никогда не видели — for case let.

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4038 392
UIComponent - декларативный UIKit

UIComponent — еще один декларативный современный фреймворк для создания пользовательских интерфейсов с использованием UIKit. Благодаря возможностям @resultBuilder и @dynamicMemberLookup, ваш интерфейс UIKit можно легко построить с синтаксисом, аналогичным SwiftUI. UIComponent также поддерживает однонаправленный поток данных вместо двусторонней привязки и предлагает отличные возможности для повышения производительности и оптимизации.

В версии 5.0 UIComponent также может легко отображать представления SwiftUI вместе с UIView и другими компонентами.

UIComponent на GitHub: https://github.com/lkzhao/UIComponent
Платформа: iOS
⭐️: 420

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4037 402
Устройства Android плавно интегрируются с подключенными дисплеями.

Google официально объявила о выходе режима рабочего стола (desktop windowing) в общую доступность вместе с релизом Android 16 QPR3. Новая функция, разработанная в партнерстве с Samsung, позволяет пользователям подключать смартфоны Pixel и Samsung к внешним мониторам для создания полноценной рабочей среды. В этом режиме на внешнем экране появляется панель задач и поддержка многооконности, что позволяет запускать несколько приложений одновременно в свободно масштабируемых окнах, превращая мобильное устройство в подобие настольного ПК.

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

Статья: https://android-developers.googleblog.com/2026/03/android-devices-extend-seamlessly-to.html
Перевод: https://apptractor.ru/info/articles/ustroystva-android-plavno-perehodyat-v-desktopnyy-rezhim.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • ❤ 1
Post #4035 350
Промпт-контракты — от гадания к выпуску кода

Фреймворк промпт-контрактов не о том, чтобы писать больше кода. Он о том, чтобы думать 60 секунд, чтобы Claude Code не приходилось гадать 60 минут.

Я перешёл от азартных игр к поставке продуктов. Ваш ход.

Статья: https://apptractor.ru/info/articles/prompt-contracts.html
Платформа: разработка/ИИ

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 👍 1
  • 👎 1
Post #4034 350
Declarative Gradle - процесс сборки в ясной и понятной форме

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

Пока это экспериментальный проект. 

Declarative Gradle на GitHub: https://github.com/gradle/declarative-gradle
Платформа: Android
⭐️: 171

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4033 402
Экспериментальный Styles API в Jetpack Compose

Система модификаторов Jetpack Compose долгое время была основным способом применения визуальных свойств к компонуемым элементам. Вы объединяете модификаторы, такие как background(), padding() и border(), для здания внешнего вида и поведения элементов пользовательского интерфейса. Несмотря на свою мощь, этот подход имеет ограничения при работе с интерактивными состояниями. Если вы хотите, чтобы кнопка меняла цвет при нажатии, вам необходимо вручную отслеживать состояние, создавать анимированные значения и условно применять различные модификаторы. Новый экспериментальный Styles API призван решить эту проблему, предоставляя декларативный способ определения зависимых от состояния стилей с автоматической анимацией.

Статья: https://apptractor.ru/info/articles/eksperimentalnyy-styles-api-v-jetpack-compose.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 👍 1
Post #4032 355
План развития Flutter и Dart в 2026 год

Погружаясь в наши планы на год, помните, что эта дорожная карта — как и всегда — является нашей амбициозной стратегией на будущее. Как и любая другая дорожная карта, планы, как правило, меняются и адаптируются в течение года, поэтому не удивляйтесь, если произойдут какие-то изменения. Хотя она в основном отражает работу, на которой сосредоточены наши команды в Google, правда в том, что Flutterverse сейчас намного больше, чем любая отдельная компания.

Статья: https://apptractor.ru/info/articles/plan-razvitiya-flutter-i-dart-v-2026-godu.html
Платформа: Flutter

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 🔥 1
Post #4031 362
Нет соединения — не значит нет UX. Как не потерять доверие пользователя вместе с интернетом

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4030 360
Между логином и 401: как устроена JWT-авторизация во Flutter

Сегодня я расскажу о веб-токенах JWT: как с их помощью безопасно передавать данные и реализовать авторизацию во Flutter. Разберем, чем JWT отличаются от классической схемы с сессиями, как работают Access- и Refresh-токены, зачем нужен Blacklist и как все это собрать в рабочее решение.

Статья: https://habr.com/ru/companies/friflex/articles/1005474/
Платформа: кроссплатформа/Flutter

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4029 386
Construkt - декларативный и реактивный UIKit

Construkt позволяет создавать пользовательские интерфейсы на основе UIKit, используя современный декларативный синтаксис, идентичный SwiftUI.

Он переносит преимущества декларативной композиции и реактивного потока данных в устаревшие проекты UIKit, позволяя создавать динамические интерфейсы, управляемые состоянием, без сторибордов, NIB-файлов или шаблонного кода Auto Layout.
LabelView($title)
.color(.red)
.font(.title1)

Используя паттерн ResultBuilder из Swift, Construkt компонует нативные иерархии UIView. Вы получаете лаконичный, читаемый синтаксис SwiftUI, сохраняя при этом всю мощь, предсказуемость и бесконечные возможности настройки UIKit.

Construkt на GitHub: https://github.com/MainActorDev/Construkt
Платформа: iOS
⭐️: 11

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4028 411
Как мы написали React Native библиотеку для Яндекс Карт за два дня с Claude

В одном из проектов (российская сеть ресторанов по франшизе) нам нужно было прикрутить Яндекс Карты. Изначально хотели взять либу react-native-yamap (респект тем, кто ее делал) — но как выяснилось, она работает только на старой архитектуре RN.

После обновления до 0.76 версии, где Fabric стала использоваться по умолчанию, приложения на iOS начали падать: карта не рендерится, события не доходят до JS, приложение крашится при взаимодействии с картой и вот это вот всё. И судя по открытым тикетам, мы не одни, кто столкнулся с этой проблемой.

Полезли искать, написал ли кто-то уже библиотеку под новую архитектуру — но либо таких людей нет, либо ни с кем не делятся. Спойлер: мы пока тоже не будем, ещё обкатываем либу на своих проектах — но уже сейчас хотим рассказать, как собрали новый пакет с помощью Claude Code за два дня.

Статья: https://habr.com/ru/articles/1004576/
Платформа: кроссплатформа

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4027 381
Кастомная галерея на iOS: от лага на 60 000 фото до lazy-загрузки и Combine

Если вы когда-нибудь разрабатывали мессенджер, то наверняка сталкивались с задачей выбора фотографий и видео для отправки. На первый взгляд кажется, что Apple предоставляет всё необходимое: UIImagePickerController, PHPickerViewController. Но стоит только копнуть чуть глубже, и оказывается, что стандартные компоненты не покрывают и половины того, что нужно в реальном продукте.

В этой статье я расскажу, как мы шаг за шагом построили кастомный пикер галереи для iOS-мессенджера. Пройдём путь от наивной реализации, которая зависала при открытии на устройствах с 60 000+ фотографий, до production-ready решения с lazy-загрузкой, отслеживанием прогресса скачивания из iCloud через Combine и встроенным превью камеры.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 🔥 2
Post #4026 412
ProjectGuard - защита проекта от нежелательных зависимостей

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

Ключевые фичи:

• Простой DSL: настройте все правила в одном блоке конфигурации Gradle.
• Управление внешними библиотеками: используйте каталоги версий Gradle (libs) для обеспечения безопасности на этапе компиляции и автозавершения кода в IDE.
• Отчеты об использовании зависимостей: сгенерируйте подробный HTML-отчет, который четко показывает все нарушения зависимостей, что упрощает их выявление и исправление.
• Интеграция с CI/CD: завершайте сборку с ошибкой при нарушении правила, гарантируя, что проблемные зависимости не попадут в вашу основную ветку.
• Поддержка базовых версий: не хотите исправлять все существующие нарушения сразу? Создайте базовый файл, чтобы игнорировать их и сосредоточиться на предотвращении новых проблем.
• Граф Mermaid для визуализации: проверьте граф зависимостей для каждого модуля вашего проекта.

ProjectGuard на GitHub: https://github.com/rubensousa/ProjectGuard
Платформа: Android
⭐️: 51

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4025 433
📺 Видео и подкасты за неделю

• (iOS En) iOS Style Permission Animation Using SwiftUI
• (iOS En) Swift Autoclosures - From First Principles to Smarter SwiftUI Validation
• (And En) Android Developer fireside chat: Talking about Gemini in Android Studio
• (And En) Senior Developer Ranks Jetpack Compose State Management Approaches
• (And En) Intro to Kotlin's Flow API
• (And En) Automating governance from build to release with Gradle and JFrog
• (Crs En) How Major Metros Run on Kotlin Multiplatform
• (Crs En) Tap to Exit with Navigation 3 - Kotlin Multiplatform (Android/iOS)
• (Dev Ru) От языков программирования к Developer Experience
• (Dev Ru) Волновая архитектура на практике
• (Dev Ru) OCaml – лучший функциональный язык: OCaml vs Haskell vs TypeScript
• (Dev En) Learn Kubernetes in 6 Hours – Full Course with Real-World Project

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

• (iOS Ru) Переходим на SwiftUI
• (And Ru) Производительность sequence, stream и collection в JVM
• (And Ru) Непростые вопросы про Kotlin Coroutines
• (And Ru) Наш опыт внедрения Compose в большой проект
• (And Ru) Многомодульность: что это такое?
• (And Ru) Жизнь инди в Google Play
• (Dev Ru) Архитектурный надзор и анализ трейсов в Авито

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4024 427
Calf - адаптивные пользовательские интерфейсы в Compose Multiplatform

Calf — это библиотека, которая позволяет легко создавать адаптивные пользовательские интерфейсы и получать доступ к API, специфичным для каждой платформы (UI-элементы, выбор файлов, WebView, разрешения, уведомления и т.п.), из ваших приложений Compose Multiplatform.

В настоящее время основное внимание уделяется Android и iOS, но в будущем появятся и другие компоненты для десктопов, позволяющие создавать адаптивные пользовательские интерфейсы и для этих платформ (Windows, macOS, Linux).

Calf на GitHub: https://github.com/MohamedRejeb/Calf
Платформа: Android/кроссплатформа
⭐️: 1.5K

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4023 467
Payo - управление покупками и подписками в iOS-приложении

Самый простой способ добавить подписки в ваше iOS-приложение. Это легковесный iOS SDK, созданный на основе StoreKit 2, который обрабатывает управление подписками, контроль доступа и процессы покупок — так что вы можете сосредоточиться на разработке своего приложения.

Особенности:

• Автоматическое определение — Передавайте идентификаторы продуктов, Payo автоматически определяет типы подписок, периоды и цены из StoreKit
• Синхронные проверки доступа — Payo.hasAccess мгновенно возвращает Bool, await не требуется
• Реактивное состояние SwiftUI — Payo.state — это ObservableObject, который автоматически обновляется при покупках, восстановлении, продлении и истечении срока действия
• Ограничение доступа к представлениям в одну строку — .requiresAccess() добавляет наложение blur + lock к любому представлению SwiftUI или UIView
• Право на участие в вводном предложении — Проверьте, имеют ли пользователи право на бесплатные пробные периоды или скидки на первый период
• Управление и возврат средств — Откройте встроенные в Apple панели управления подписками и возвратами
• Многоуровневая поддержка — Ограничение доступа к функциям за именованными группами для приложений с несколькими уровнями тарифных планов
• Нулевой код конфигурации — Просто добавьте файл Payo.plist, и SDK автоматически настроится при запуске

Payo на GitHub: https://github.com/PayoSDK/payo-ios
Платформа: iOS
⭐️: 3

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4022 433
Чистый вайб(кодинг)
Post #4021 387
Кастомные параметры и анимация с использованием шейдеров Metal

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

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

Статья: https://apptractor.ru/info/articles/kastomnye-parametry-i-animatsiya-s-ispolzovaniem-sheyderov-metal.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →