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 #3960 · Back to latest

Older Posts 20 shown
Post #3959 437
Осваиваем переходы между общими элементами в Compose

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

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3958 407
Модульность как архитектурный выбор

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3957 403
Coordinator в iOS: как я перестал бояться кнопки «Назад» и полюбил навигацию

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3956 367
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: код, инструменты, практики, производительность
Post #3955 374
Kotlin и Arrow: функциональное программирование с Either, Validated и эффектами

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 👎 4
  • 🔥 1
Post #3954 356
Пишем игру-головоломку под macOS на SwiftUI [StarDust Collector]

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

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3953 340
Перевод iOS-приложения с платной модели на freemium

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

Статья: https://apptractor.ru/info/articles/perevod-ios-prilozheniya-s-platnoy-modeli-na-freemium.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3952 336
Развитие Android-разработки в 2026 году

Несколько лет назад решение было простым. Вы изучали Android, создавали приложения для телефонов, выпускали новые функции, исправляли ошибки и постепенно осваивались в этой роли. Сегодня же этот выбор сопровождается сомнениями. Люди спрашивают, актуальна ли еще нативная Android-разработка, заменят ли ее Flutter или React Native, и стоит ли вообще углубленно изучать Android.

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

Android не стал внезапно сложнее. Ожидания стали.

Статья: https://apptractor.ru/info/articles/plan-razvitiya-android-razrabotki-na-2026-god.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3950 333
FabBar - панель вкладок с Liquid Glass и плавающей кнопкой действия

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

В iOS 26 с панелью вкладок разработчики могут объявить вкладку с ролью .search и использовать ее в качестве основного действия, но у этого подхода есть несколько проблем:

• Вы обманываете систему, это на самом деле не вкладка поиска.
• VoiceOver читает ее как вкладку, а не как кнопку.
• Требуется слушатель изменений вкладок и их отмена в SwiftUI, что подвержено состояниям гонки.
• Отсутствует возможность изменения цвета, поэтому это выглядит как вкладка поиска, а не как основное действие.

У разработчиков есть еще один вариант: размещение пользовательской плавающей кнопки действия над панелью вкладок. Обычно она размещается в правой части экрана. Однако в iOS 26 с центрированной панелью вкладок это создает неудобную компоновку. При наличии менее четырех вкладок по обе стороны панели остается пустое пространство, а размещение кнопки FAB на крае создает несбалансированное пустое пространство. При этом нет возможности настроить расположение или размер стандартной панели вкладок, чтобы обойти это.

FabBar предлагает одно решение: полностью пересоздать панель вкладок для полного контроля.

Как это работает

FabBar предоставляет API SwiftUI, но внутри использует UIKit.

Ключевая проблема в точном воссоздании панели вкладок — это эффект «пузырькового» интерактивного стекла при касании. Этот эффект доступен только для панелей вкладок и еще одного компонента: сегментированных элементов управления. FabBar использует UISegmentedControl в качестве основы, скрывая стандартные метки и накладывая пользовательские представления элементов вкладок.

Почему UIKit? FabBar манипулирует внутренней иерархией представлений UISegmentedControl, чтобы скрыть собственные метки и наложить пользовательские представления. Это невозможно с помощью Picker из SwiftUI. Кроме того, смешивание пользовательских элементов управления UIKit с методом .glassEffect() из SwiftUI вызывает проблемы с частотой кадров во время сенсорного взаимодействия.

Этот подход по своей природе ненадежен и может перестать работать после обновлений ОС. 

FabBar на GitHub: https://github.com/ryanashcraft/FabBar
Платформа: iOS
⭐️: 76

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3949 502
Как я ускорил холодный старт Android-приложения в 10 раз

Разбор реального кейса оптимизации Android-приложения: как сократить время холодного старта с 17 до 1.7 секунд, улучшив retention с 82% до 98.5%. Конкретные решения: миграция на Splash Screen API, система фоновых задач, реактивная загрузка данных и оптимизация бэкенда.

Статья: https://nek12.dev/blog/ru/how-to-speed-up-android-app-launch-baseline-profiles-startup-optimization-splash-screen
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
nek12.dev Как я ускорил холодный старт Android-приложения в 10 раз | nek12.dev Разбор реального кейса оптимизации Android-приложения: как сократить время холодного старта с 17 до 1.7 секунд, улучшив retention с 82% до 98.5%. Конкретные решения: миграция на Splash Screen API, система фоновых задач, реактивная загрузка данных и оптимизация…
  • ❤ 2
Post #3948 2.66K
📺 Видео и подкасты за неделю

• (iOS En) SwiftUI Sortable Grid View
• (iOS En) Managing Undo/Redo State in SwiftUI
• (iOS En) I Built a macOS Transcription App with Codex 5.2 + Xcode (Real Workflow)
• (iOS En) SwiftUI Pickers Deep Dive
• (And Ru) Пишу свой телеграм клиент на Android по TDD
• (And En) Why you should delete your base classes on Android (BaseActivity, BaseViewModel, etc.)
• (And En) Making Apps Accessible with Kotlin and Compose
• (And En) Refactor Kotlin code from OO to functional - step by step, safely, and pragmatically
• (And En) Unused Return Value Checker in Kotlin 2.3
• (And En) Explicit Backing Fields in Kotlin 2.3 - What You Need to Know
• (And En) Stop using LaunchedEffect for passing an Argument to a ViewModel
• (Crs Ru) Опасный Flutter… Или нет?
• (Crs Ru) Курс Dart и Flutter вместе
• (Crs En) How to Switch the App Language In KMP (Android & iOS)
• (Dev Ru) AntiSOLID
• (Dev Ru) Железо для ИИ — AI, Hardware, GPU, Cerebras
• (Dev En) Relational Database Design – Full Course

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

• (iOS Ru) Как мы адаптировали проект к Strict Concurrency Checking — Swift 6
• (iOS Ru) Как избежать утечек памяти при использовании Task, Combine, CurrentValueSubject и AsyncStream
• (And Ru) Построение multi-app архитектуры
• (And Ru) Старт карьеры в Android-разработке до 18 лет
• (And Ru) Compose Navigation Codelab: проходим кодлаб от Google
• (Dev Ru) Проектирование и запуск разработки
Post #3947 434
WiFi Mirror - шаринг экрана через Wi-Fi

WiFi Mirror - кроссплатформенные приложения для шаринга экрана в локальных сетях.

WiFi Mirror обеспечивает шаринг экрана в режиме реального времени между устройствами, подключенными к одной локальной сети. Разработанное на Flutter, оно поддерживает платформы Android, iOS, macOS, Windows, Linux и Web с непрерывным peer-to-peer подключением.

WiFi Mirror на GitHub: https://github.com/navneetprajapati26/wifi-mirror
Платформа: кроссплатформа
⭐️: 19
  • 👍 1
Post #3946 487
Простые синтаксические приёмы в Swift

В этой статье - несколько практических приёмов и особенностей Swift, которые помогают писать код проще, короче и понятнее. Здесь не будет абстрактной теории — только реальные примеры, которые можно сразу применять в проектах: от сопоставления с шаблоном и работы с optional до безопасной обработки строк и чисел. Если вы хотите, чтобы ваш Swift-код выглядел аккуратно и «по-свифтовски», эти советы точно пригодятся.

Статья: https://apptractor.ru/info/articles/prostye-sintaksicheskie-priyomy-v-swift.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • ❤ 1
Post #3945 436
React Native. Часть 1: архитектура, производительность и варианты использования

React Native прошел путь от решения с фундаментальными архитектурными ограничениями до платформы с современным, производительным ядром. В этой статье мы разберем, как работала старая архитектура на основе Bridge, как ее заменили JSI, Fabric и Hermes, и в каких случаях React Native - оптимальный выбор для проекта.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3944 419
Безопасный обмен данными между приложениями на Android: intents, URI schemes, shared preferences

Системы злоумышленников постоянно эволюционируют, появляются новые атаки и новые защиты. То, что работало в Android 8, может быть небезопасно в Android 14. Поэтому безопасность в Android - это не разовая настройка, а процесс.

Мой главный совет: читайте Android Security Bulletins, следите за CVE, связанными с вашими зависимостями, и регулярно проводите аудит своего кода.

И последнее: если сомневаетесь, стоит ли передавать какие-то данные между приложениями - не передавайте. Лучше лишний раз сходить на сервер, чем потом разгребать последствия утечки данных. Серьёзно, оно того не стоит.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3943 376
App Store Toolkit - инструменты локализации iOS-приложений

App Store Toolkit - набор из нескольких инструментов для локализации iOS-приложений. Есть локализация .xcstrings, настройка стоимости подписки для разных стран, перевод мета-данных и генератор скриншотов для App Store Connect. Все это с помощью ИИ и локальных сервисов.

App Store Toolkit на GitHub: https://github.com/fayharinn/iOS-App-Distribution-Localizer
Платформа: iOS/Web
⭐️: 24

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3942 393
Cash Sense - Android-приложение для управления финансами

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

Cash Sense на GitHub: https://github.com/nikbulavin/cashsense
Платформа: Android
⭐️: 175

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • ❤ 1
Post #3941 427
Бессерверный ИИ для Android-приложений с Firebase AI Logic

Цель этой статьи — показать, почему бессерверный ИИ на Android наконец-то стал практичным, и как Firebase AI Logic делает его удивительно простым.

Статья: https://apptractor.ru/info/articles/firebase-ai-logic.html
Платформа: Android/ИИ

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #3940 452
Отлаживайте Swift как Senior

В этой статье мы обсудим методы отладки, которые используют Senior iOS-разработчики.

1. Выявление логических ошибок на этапе разработки
2. Обогащение отладочных логов контекстной информацией
3. Настройка вывода с помощью CustomDebugStringConvertible
4. Анализ свойств и значений экземпляров во время выполнения
5. Функция dump() для углубленной отладки

Статья: https://apptractor.ru/info/articles/otlazhivayte-swift-kak-senior.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 →