AppFiles - Mobile Development
2.15K subscribers
2.92K photos
40 videos
11 files
3.87K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Сейчас писать код дешево

Самая большая проблема при внедрении методов агентной инженерии — это смириться с последствиями того факта, что написание кода теперь обходится дёшево.

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

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

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

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

Возможность параллельного запуска агентов еще больше затрудняет оценку, поскольку один инженер-человек теперь может одновременно внедрять, рефакторить, тестировать и документировать код в нескольких местах.

Статья: https://apptractor.ru/info/articles/seychas-pisat-kod-deshevo.html
Платформа: разработка

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

Metro — современный фреймворк для внедрения зависимостей в Kotlin, созданный Заком Свирсом. И мы, Android-разработчики из Vinted, официально и полностью перешли на него! Для нашей огромной кодовой базы это был довольно непростой путь.

Статья: https://apptractor.ru/info/articles/ot-dagger-k-metro.html
Платформа: Android

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

App Store Connect CLI - быстрая, легковесная, со скриптами CLI-утилита для работы с App Store Connect API. Автоматизируйте рабочие процессы выпуска iOS, macOS, tvOS и visionOS из терминала, IDE или конвейера CI/CD. Работайте с TestFlight, сборками, отправкой, подписанием, аналитикой, скриншотами, подписками и многим другим. JSON-ориентированный подход, без интерактивных промптов.

App Store Connect CLI на GitHub: https://github.com/rudrankriyam/App-Store-Connect-CLI
Платформа: iOS
⭐️: 2.3K

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

Злоумышленники проводят фальшивые собеседования для разработчиков и отправляют «тестовые задания» в виде репозиториев с вредоносным кодом. Проекты выглядят как обычные приложения (например, на Next.js), но при запуске устанавливают бэкдор и подключаются к серверу управления (C2). Таким образом атакующие получают удалённый доступ к машине жертвы

Вредоносный код активируется через привычные для разработчика механизмы: автоматические задачи VS Code (.vscode/tasks.json), скрытые скрипты в файлах проекта (например, замаскированные под jquery.min.js) и серверный код, выполняющий декодированные команды при старте приложения. В результате на устройстве закрепляется бэкдор, способный выполнять команды и передавать данные злоумышленникам

Основной риск — компрометация рабочей среды: утечка API-ключей, токенов, секретов из .env, исходного кода и доступа к корпоративной инфраструктуре. В качестве защиты рекомендуется запускать тестовые задания в изолированной среде (VM или контейнере), проверять конфигурационные файлы перед запуском и тщательно верифицировать работодателя через официальные каналы.

Статья: https://threatroad.substack.com/p/fake-job-interviews-are-installing 🇬🇧
Платформа: разработка

Поставь 👍 или пошарь пост, если хочешь перевод

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Вы думали, что Flutter обладает производительностью, близкой к нативной? А вот и нет!

Результаты бенчмарка говорят об обратном.

Используя современные инструменты 2025 года, реальные устройства и повторяемую методологию, Flutter не просто не отставал от нативных iOS и Android. По нескольким ключевым показателям он их значительно превзошёл.

И не на погрешность округления.

Статья: https://apptractor.ru/info/articles/vy-dumali-chto-flutter-obladaet-proizvoditelnostyu-blizkoy-k-nativnoy-a-vot-i-net.html
Платформа: кроссплатформа/Flutter

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

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

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
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: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Calf - адаптивные пользовательские интерфейсы в Compose Multiplatform

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

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

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

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

(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: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
ProjectGuard - защита проекта от нежелательных зависимостей

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

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

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

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

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

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

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

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

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

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

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

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
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: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Между логином и 401: как устроена JWT-авторизация во Flutter

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

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

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

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

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

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

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Экспериментальный 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: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Declarative Gradle - процесс сборки в ясной и понятной форме

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

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

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

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

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

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👎1
👩‍💻 Открытый урок «Знакомство с Kotlin: пишем первый код»

🗓 5 марта в 20:00 МСК

🆓 Бесплатно. Урок в рамках старта курса «Kotlin Developer. Basic» от Otus.

Программа вебинара:

✔️Разберем три ключевых преимущества Kotlin: безопасность null, лаконичность и совместимость.
✔️Напишем небольшой, но полезный фрагмент, который решает понятную задачу.
✔️Ответим на главный вопрос: почему Kotlin — это не просто «улучшенная Java», а другой подход к разработке.

Вебинар будет полезен:

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

🔗 Ссылка на регистрацию: https://otus.pw/mBhz/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576