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

TakeoffKit - это библиотека Swift, упрощающая синхронизацию локальных данных с использованием CloudKit, абстрагируясь от его многочисленных сложностей, таких как преобразование CKRecord, ограничение скорости запросов, обработка ошибок и многое другое. Она предоставляет механизм синхронизации, аналогичный CKSyncEngine от Apple, но с более точным контролем и лучшей обратной совместимостью. Механизм синхронизации разработан для работы с любой локальной средой хранения данных — CoreData, SwiftData, Realm и т.д.

TakeoffKit на GitHub: https://github.com/orloff-n/TakeoffKit
Платформа: iOS
⭐️: 25

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Создание кастомного Toolbar с Jetpack Compose. Подробный разбор всех попыток и решений

Сегодня предлагаю разобрать путь создания кастомного тулбара от первой кривой реализации до оптимизированного решения.

И главная проблема, которую надо решить при создании этого компонента это центрирование title и subtitle. Эта проблема возникает потому что у нас может быть тулбар с разным количеством иконок по обе стороны от заголовка, текстом и иконками или только с title. И если ширина иконок у нас стандартна (44 dp), и достаточно просто умножить эту ширину на количество иконок справа, чтобы понять свободное пространство для title и subtitle, то с текстом с одной или с двух сторон всё намного сложнее, так как мы не можем заранее вычислить ширину этого текста, а значит не можем правильно центрировать и задать ширину title и subtitle.

В этой статье я расскажу, как я решил этот вопрос.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Уроки, извлеченные из собеседования по Swift

Некоторое время назад я проходил собеседование в команде разработчиков UI-фреймворка на SwiftUI в крупной компании-поставщике платформ. Поскольку я работал со SwiftUI с момента его выпуска, я был очень рад этой возможности. Но после многих лет работы в качестве независимого разработчика это было моё первое настоящее техническое собеседование за долгое время.

Спойлер: меня не взяли. Но я кое-чему научился в области алгоритмов Swift и тому, как подходить к техническим собеседованиям.

Статья: https://apptractor.ru/info/articles/uroki-izvlechennye-iz-sobesedovaniya-po-swift.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
😡2
This media is not supported in your browser
VIEW IN TELEGRAM
Awesome Jetpack Compose Animations - коллекция анимаций Jetpack Compose

Awesome Jetpack Compose Animations - организованная коллекция (24 штуки) классных анимаций для кнопок, карточек, изображений и многого другого — идеально подходит для улучшения ваших приложений и проектов.

Awesome Jetpack Compose Animations на GitHub: https://github.com/Swapnil-J-Patil/Delightful_Animations
Платформа: Android
⭐️: 13

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Flutter MethodChannel: как подружить Dart с нативным Android (и iOS)

Сегодня поговорим о том, как Flutter-приложению выйти за пределы чисто Dart-мирка и воспользоваться возможностями родной платформы, например, вызвать API Android или iOS напрямую. Например, есть какая-нибудь классная фича в Android SDK, а в Flutter её нет. Как быть? Ответ — писать собственный плагин и использовать MethodChannel.

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

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

RemoteCompose всё ещё находится в разработке AndroidX и официально пока не опубликован, однако концепция очень многообещающая.

Сервер перехватывает (capture) любой макет Jetpack Compose и выдает его в компактном сериализованном формате. Это своего рода «скриншот» вашего пользовательского интерфейса, только вместо пикселей вы захватываете фактические инструкции отрисовки. Этот полученный документ содержит всё необходимое для воссоздания пользовательского интерфейса: фигуры, цвета, текст, изображения, анимацию и даже интерактивные области касания. На стороне сервера пишется стандартный код Compose. Не нужно изучать новый DSL (Domain-Specific Language), поддерживать схему JSON или осваивать язык шаблонов. Если вы можете написать это на Compose, вы можете захватить это с помощью RemoteCompose.

В приложении работает простой (платформенный) плеер, который управляет показом и взаимодействием с этим ByteArray. Клиентскому устройству не нужны ваши композабл функции, ваши модели представления или ваша бизнес-логика — ему нужны только байты документа и проигрыватель.

Таким образом, преобразуя макеты Compose в переносимый формат документа, RemoteCompose обеспечивает управляемый сервером пользовательский интерфейс, а значит мгновенное A/B-тестирование, обновление контента в реальном времени и кроссплатформенную согласованность, сохраняя при этом производительность нативного рендеринга. Фреймворк справляется со сложностью сериализации, передачи и рендеринга, позволяя вам сосредоточиться на проектировании превосходного пользовательского опыта.

Статья: https://apptractor.ru/info/news/remotecompose.html
Платформа: Android

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

XcodeProj — это библиотека от Tuist, написанная на Swift, для анализа и работы с файлами проектов Xcode. С ее помощью можно писать скрипты и автоматизировать задачи в проекте. Например, можно создать скрипт, который будет синхронизировать ключ с версией проекта с текущим тегом в Git, представляющим версию проекта.

XcodeProj на GitHub: https://github.com/tuist/XcodeProj
Платформа: iOS
⭐️: 2.2K

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

(iOS Ru) Разбор кода: iOS-приложение для медитации на Swift
(iOS En) SwiftUI Animated Tab Icons - Symbol Effects Tab Bar
(iOS En) RichText Notes App - AttributedStrings and SwiftData
(iOS En) Interactive Map Carousel | MapKit | Map Animations | SwiftUI
(And Ru) Как сделать приложение за 10 минут? | FlowMVI Часть 1 - Часть 2 - Часть 3
(And XR) The Android Show | XR Edition
(And XR) Getting started developing on AI Glasses
(And XR) What's new in the Android XR SDK for Unity
(And XR) Designing interfaces for wired XR glasses
(And XR) Designing audio experiences on AI Glasses
(And XR) XR Journey: From Snapdragon Spaces to Android XR
(And XR) Design best practices for display AI Glasses
(And XR) What's new in the Jetpack XR SDK for immersive experiences
(And En) Bring your own model - Android Developers Backstage
(And En) Bottom Nav With Multiple Back Stacks In Navigation3
(And En) Nested Nav Graphs & Shared ViewModels With Navigation3
(And En) FaceCut App - Create Beautiful Portraits in minutes
(Crs En) Why iOS Devs Struggle with KMP (and How to Fix It)
(Dev Ru) Заменит ли AI разработчика
(Dev Ru) SWE-агенты — Пишем код, LLM, автономный ИИ
(Dev Ru) Open Source: альтруизм или скрытая выгода?
(Dev Ru) Как внедрить ИИ в разработку и подружиться с безопасниками
(Dev Ru) Как выявлять баги до первой строчки кода: опыт внедрения тест-анализа и тест-дизайна
(Dev Ru) Как мы делаем больше 10 релизов в день без регресса

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

(And Ru) Полный разбор Kotlin Delegated Property
(Crs Ru) BA x Flutter: взаимодействие отделов, запуск кроссплатформы и почему хорошее ТЗ — бич креативности
(Dev Ru) Карьера и лидерство в IT
(Dev Ru) Вся правда о грейдах, ревью и промоушенах
(Dev Ru) Искусство создания антихрупкого API

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Маленький экран — серьёзный вызов!

В VK мобильные разработчики создают опыт, который помещается в карман, но работает на миллионах устройств. Узнайте об их подходах к сложным задачам и ключевых результатах. По ссылке — ролики и даже вакансии!
9 типичных ошибок в Kotlin Flow, которые вы, вероятно, совершаете.

Автор делится своим опытом, собранным в ходе код-ревью реальных Android-проектов. Он отмечает, что, несмотря на всю мощь Kotlin Flow, разработчики часто сталкиваются с неочевидным поведением, которое может приводить к тихой отмене работы, повторному выполнению ресурсоемких операций или неожиданным проблемам с жизненным циклом. В статье подробно рассматриваются девять распространенных ошибок, каждая из которых сопровождается примерами плохого и хорошего кода и краткими практическими правилами, применимыми в реальной разработке.

Статья: https://medium.com/@af2905g/9-kotlin-flow-mistakes-youre-probably-making-c946ad750452
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
ComposeGuard - обнаружение нарушений правил и лучших практик Jetpack Compose

ComposeGuard — это плагин для IntelliJ/Android Studio, который обеспечивает обнаружение нарушений лучших практик Compose в режиме реального времени во время написания кода. Он анализирует ваши компонуемые функции и выделяет проблемы на основе документации по правилам Compose.

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

ComposeGuard на GitHub: https://github.com/AndroidPoet/compose-guard
Платформа: Android
⭐️: 17

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

Расскажу вам в этой статье, как я снизил потребление памяти моего macOS-приложения на Flutter более чем на 90%. Это потребовало неожиданно много усилий и включало создание собственного хоста для Flutter, разработку пользовательского плагина для перетаскивания и отладку кучи кода на Rust.

Статья: https://habr.com/ru/companies/piter/articles/976000/
Платформа: кроссплатформа
👍1
Я уменьшил iOS-приложение с 200 до 8 МБ: побочные эффекты, которых я не ожидал

Уменьшить размер приложения с 200 до 8 МБ — легко.

Жить с последствиями — вот это нелегко.

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

Статья: https://apptractor.ru/info/articles/200-8.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍2
Cupertino - локальный сканер документации Apple и сервер MCP

Cupertino - инструмент для сканирования, индексирования и предоставления документации Apple для разработчиков агентам искусственного интеллекта через протокол контекста модели (MCP).

Cupertino — это локальная, структурированная, готовая к использованию с ИИ система документации для платформ Apple. Она:

• Сканирует документацию разработчиков Apple, Swift.org, предложения Swift Evolution, рекомендации по проектированию пользовательского интерфейса, устаревшие руководства Apple Archive и метаданные пакетов Swift
• Индексирует всё в быструю, доступную для поиска базу данных SQLite FTS5 с рейтингом BM25
• Предоставляет документацию агентам ИИ, таким как Claude, через протокол контекста модели (MCP)
• Обеспечивает автономный доступ к более чем 302 424 страницам документации для 307 фреймворков

Зачем это нужно?

• Больше никаких галлюцинаций: агенты ИИ получают точную и актуальную документацию по API Apple
• Автономная разработка: работайте с полной документацией без доступа к интернету
• Детерминированный поиск: один и тот же запрос всегда возвращает одинаковые результаты
• Локальный контроль: управляйте своей документацией, проверяйте базу данных, создавайте сценарии рабочих процессов
• Дизайн, ориентированный на ИИ: создан специально для интеграции с агентами ИИ через MCP

Cupertino на GitHub: https://github.com/mihaelamj/cupertino
Платформа: iOS
⭐️: 105
👍2
Улучшение доступности в Android-приложениях

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

Статья: https://apptractor.ru/info/articles/uluchshenie-dostupnosti-v-android-prilozheniyah.html
Платформа: Android
1
Android Gradle Graph Plugin - мониторинг зависимостей проекта

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

Плагин был одним из инструментов для ускорения сборки. Подробнее об опыте ускорения сборки проекта 1Fit можете узнать в докладе.

Android Gradle Graph Plugin на GitHub: https://github.com/Anelkad/gradle-portal-verification-PENLI5B8
Платформа: Android
⭐️: 17


👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🦸‍♀️ "Станьте инженером, использующим искусственный интеллект" - обучающий курс JetBrains и Nebius

В сотрудничестве с облачной платформой Nebius AI компания JetBrains запустила серию из десяти бесплатных мини-курсов для разработчиков, демонстрирующих, как интегрировать ИИ в рабочий процесс, чтобы повысить производительность.

Всего на платформе есть 10 курсов и один Live-урок:

• Техники промптинга
• Программирование с ИИ-агентом
• Теория агентского рабочего процесса
• Обзор ИИ-инструментов для разработчиков
• ИИ-агенты как ваша команда
• Создание собственного ИИ-агента
• ИИ в QA
• Введение в ИИ для DevOps
• Легальные риски использования ИИ для программирования
• Создание приложения с ИИ с нуля
• Лабораторная ИИ разработки

Внутри 25 практических задач, выпускной проект. Предполагаемое время на все - около 20 часов. Все бесплатно. Также есть план за $500, который включает более сложную программу обучения и в итоге позволяет получить сертификат.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Ускорение CI сборок в Xcode с кэшированием слотов

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

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

Статья: https://apptractor.ru/info/articles/uskorenie-ci-sborok-v-xcode-s-keshirovaniem-slotov.html
Платформа: iOS

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

Snowdrop — типобезопасный, простой в использовании фреймворк на основе Swift Macros, созданный для того, чтобы вы могли с легкостью создавать и поддерживать сложные сетевые запросы.

Функции:

• Создание типобезопасных сервисов с помощью макроса @Service
• Поддержка различных типов методов запроса (например, @GET, @POST, @PUT, @DELETE, @PATCH, @CONNECT, @HEAD, @OPTIONS и т.п.)
• Пиннинг SSL/сертификатов
• Перехватчики
• Возможность создания мок-объектов

Snowdrop на GitHub: https://github.com/neothXT/Snowdrop
Платформа: iOS
⭐️: 67

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

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

А такие базовые компоненты, как JSONDecoder/Encoder, используются в iOS-проектах повсеместно, и ускорение их работы дает ощутимое влияние на общую производительность приложений.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Android UI-тесты с Maestro без тяжелой инфраструктуры

Maestro в Android-проекте: mock flavor, базовые сценарии и локальный прогон UI-тестов через Git pre-push без тяжелой инфраструктуры.

Статья: https://www.codingpas.ru/posts/android-ui-tests-maestro-pre-push/
Платформа: Android

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