Про то, как я Storage Access Framework укрощал, да файлы в хранилище приручал
В начале было приложение. И было это приложение для цифровой подписи. Работало оно просто: подписываешь документы на смартфоне, не думая о каких-либо дополнительных токенах. Все упаковано в телефон — и сертификаты, и библиотеки. Процесс знакомый: авторизовался, загрузил файл, подписал.
Но вот однажды пользователи стали жаловаться, что не могут найти ранее подписанные документы. Бывало, пользователь подписал файл, долго к нему не возвращался, а спустя время уже не смог его отыскать. Переустановил приложение или авторизовался с другого устройства, и все файлы как в воду канули.
Меня зовут Георгий Левченко, я Android-разработчик в ПСБ. Начал я искать источник бед пользовательских. Оказалось, виной всему было то, что все файлы хранились в кэш-директории приложения. Понял я: чтобы файлы не пропадали, им нужен менеджмент для файлов. Отыскался у Android для таких целей готовый инструмент — Storage Access Framework (SAF), он служит для доступа к файлам через стандартный интерфейс без управления разрешениями вручную. Поведаю под катом, как я решал с его помощью эту задачу.
Статья: https://habr.com/ru/companies/psb/articles/991676/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В начале было приложение. И было это приложение для цифровой подписи. Работало оно просто: подписываешь документы на смартфоне, не думая о каких-либо дополнительных токенах. Все упаковано в телефон — и сертификаты, и библиотеки. Процесс знакомый: авторизовался, загрузил файл, подписал.
Но вот однажды пользователи стали жаловаться, что не могут найти ранее подписанные документы. Бывало, пользователь подписал файл, долго к нему не возвращался, а спустя время уже не смог его отыскать. Переустановил приложение или авторизовался с другого устройства, и все файлы как в воду канули.
Меня зовут Георгий Левченко, я Android-разработчик в ПСБ. Начал я искать источник бед пользовательских. Оказалось, виной всему было то, что все файлы хранились в кэш-директории приложения. Понял я: чтобы файлы не пропадали, им нужен менеджмент для файлов. Отыскался у Android для таких целей готовый инструмент — Storage Access Framework (SAF), он служит для доступа к файлам через стандартный интерфейс без управления разрешениями вручную. Поведаю под катом, как я решал с его помощью эту задачу.
Статья: https://habr.com/ru/companies/psb/articles/991676/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему Senior iOS-разработчики всё ещё проваливаются на System Design интервью
Вы когда-нибудь задумывались, почему программист с 8–10+ годами опыта уверенно пишет сложный код в Xcode, но за белой доской в интервью у него словно отключается «второе полушарие»? Опытный iOS-разработчик отлично знает Swift и архитектуру MVVM/Clean, но интервью по System Design проверяет не просто знания фреймворков. Это совсем другой навык — умение строить масштабирующиеся системы, аргументировать архитектурные решения и чётко объяснять свои мысли под давлением.
Многие сеньоры считают, что годы практики в продакшене должны автоматически сделать их экспертами по системному дизайну — но интервью проверяет способность быстро мыслить в новых условиях, объяснять решения и учитывать компромиссы. И если этого не тренировать специально — результат может разочаровать.
Статья: https://blog.stackademic.com/groww-ios-interview-why-senior-developers-still-fail-system-design-da24e34e4382
Платформа: iOS/System Design
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Вы когда-нибудь задумывались, почему программист с 8–10+ годами опыта уверенно пишет сложный код в Xcode, но за белой доской в интервью у него словно отключается «второе полушарие»? Опытный iOS-разработчик отлично знает Swift и архитектуру MVVM/Clean, но интервью по System Design проверяет не просто знания фреймворков. Это совсем другой навык — умение строить масштабирующиеся системы, аргументировать архитектурные решения и чётко объяснять свои мысли под давлением.
Многие сеньоры считают, что годы практики в продакшене должны автоматически сделать их экспертами по системному дизайну — но интервью проверяет способность быстро мыслить в новых условиях, объяснять решения и учитывать компромиссы. И если этого не тренировать специально — результат может разочаровать.
Статья: https://blog.stackademic.com/groww-ios-interview-why-senior-developers-still-fail-system-design-da24e34e4382
Платформа: iOS/System Design
Please open Telegram to view this post
VIEW IN TELEGRAM
Ошибка, которую я не мог воспроизвести — пока не перестал тестировать на своём телефоне
Три недели назад я начал получать сообщения от пользователей приложения, которое мы выпустили в прошлом году.
«Приложение постоянно перезапускается после того, как я делаю снимок».
Оно не зависало и не выдавало ошибок. Просто закрывалось и перезапускалось.
Самое странное, что на моём телефоне всё работало идеально. И на устройствах моих коллег тоже.
Поначалу это казалось какой-то «призрачной ошибкой», которая проявляется только тогда, когда пользователь находится далеко, и вы не видите его экран.
Но это приложение — инструмент на основе GPS для сбора данных. Пользователи сканируют штрихкод, чтобы предотвратить дублирование активов, заполняют несколько экранов с подробными данными, делают снимки, регистрируют серийные и модельные номера, и мы сохраняем всё локально перед синхронизацией с сервером. Изображения автоматически сжимаются до 100 КБ или меньше, поэтому загрузка работает даже в медленных сетях.
Это серьёзный рабочий процесс. Не приложение типа «заполнил одну форму и отправил».
И где-то внутри этого процесса всё начало разваливаться.
Статья: https://apptractor.ru/info/articles/oshibka-kotoruyu-ya-ne-mog-vosproizvesti-poka-ne-perestal-testirovat-na-svoyom-telefone.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Три недели назад я начал получать сообщения от пользователей приложения, которое мы выпустили в прошлом году.
«Приложение постоянно перезапускается после того, как я делаю снимок».
Оно не зависало и не выдавало ошибок. Просто закрывалось и перезапускалось.
Самое странное, что на моём телефоне всё работало идеально. И на устройствах моих коллег тоже.
Поначалу это казалось какой-то «призрачной ошибкой», которая проявляется только тогда, когда пользователь находится далеко, и вы не видите его экран.
Но это приложение — инструмент на основе GPS для сбора данных. Пользователи сканируют штрихкод, чтобы предотвратить дублирование активов, заполняют несколько экранов с подробными данными, делают снимки, регистрируют серийные и модельные номера, и мы сохраняем всё локально перед синхронизацией с сервером. Изображения автоматически сжимаются до 100 КБ или меньше, поэтому загрузка работает даже в медленных сетях.
Это серьёзный рабочий процесс. Не приложение типа «заполнил одну форму и отправил».
И где-то внутри этого процесса всё начало разваливаться.
Статья: https://apptractor.ru/info/articles/oshibka-kotoruyu-ya-ne-mog-vosproizvesti-poka-ne-perestal-testirovat-na-svoyom-telefone.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Обратное маскирование в SwiftUI с использованием режимов наложения
Представьте себе карточку, залитую цветом, на поверхности которой вырезана фигура.
Карточка видима везде, кроме области, где расположена фигура. Эта область становится прозрачной.
В UIKit вы можете использовать Core Graphics или маски слоев.
В SwiftUI решение заключается в режимах наложения.
Статья: https://apptractor.ru/info/articles/obratnoe-maskirovanie-v-swiftui-s-ispolzovaniem-rezhimov-nalozheniya.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Представьте себе карточку, залитую цветом, на поверхности которой вырезана фигура.
Карточка видима везде, кроме области, где расположена фигура. Эта область становится прозрачной.
В UIKit вы можете использовать Core Graphics или маски слоев.
В SwiftUI решение заключается в режимах наложения.
Статья: https://apptractor.ru/info/articles/obratnoe-maskirovanie-v-swiftui-s-ispolzovaniem-rezhimov-nalozheniya.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Skelter Project - готовый шаблон проекта на Flutter
Skelter Project - готовый проект, включающий в себя лучшие практики, современную архитектуру и шаблонный код для быстрой разработки приложений.
Технологический стек:
• Flutter: ^3.35.7
• Dart SDK: ^3.9.2
• Управление состояниями: BLoC
• Навигация: Auto Route
• Бэкенд: Firebase (Core, Analytics, Crashlytics, Auth)
• Аутентификация: Firebase Auth, Google Sign-In, Apple Sign-In
• UI-компоненты: кастомные виджеты, Flutter SVG, эффекты мерцания
• Тестирование: Flutter Test, Bloc Test, Alchemist (Golden Tests), Mocktail
• Генерация кода: Build Runner, Auto Route Generator, Flutter Gen Runner
Skelter Project на GitHub: https://github.com/solguruz/skelter
Платформа: кроссплатформа/Flutter
⭐️: 79
Skelter Project - готовый проект, включающий в себя лучшие практики, современную архитектуру и шаблонный код для быстрой разработки приложений.
Технологический стек:
• Flutter: ^3.35.7
• Dart SDK: ^3.9.2
• Управление состояниями: BLoC
• Навигация: Auto Route
• Бэкенд: Firebase (Core, Analytics, Crashlytics, Auth)
• Аутентификация: Firebase Auth, Google Sign-In, Apple Sign-In
• UI-компоненты: кастомные виджеты, Flutter SVG, эффекты мерцания
• Тестирование: Flutter Test, Bloc Test, Alchemist (Golden Tests), Mocktail
• Генерация кода: Build Runner, Auto Route Generator, Flutter Gen Runner
Skelter Project на GitHub: https://github.com/solguruz/skelter
Платформа: кроссплатформа/Flutter
⭐️: 79
Combine умер?
Да, Combine теряет часть своей роли на фоне Swift Concurrency и новых средств наблюдения.
Но ни официально не признан устаревшим, ни полностью не прекращает быть полезным, особенно в существующих кодовых базах и для определённых архитектурных задач.
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Да, Combine теряет часть своей роли на фоне Swift Concurrency и новых средств наблюдения.
Но ни официально не признан устаревшим, ни полностью не прекращает быть полезным, особенно в существующих кодовых базах и для определённых архитектурных задач.
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Как мы помогали Стэнфорду следить за акулами
Вот что для этого понадобилось: бэкендеры — 2 штуки, фронтендер — 1 штука, дизайнер — 1 штука, мобильный разработчик — 1 штука, время — 2 учебных семестра.
Продолжаем рассказывать об интересных проектах студентов ФИИТ. В этот раз речь пойдёт о приложении для интерактивного мониторинга белых акул по заказу Стэнфордского университета. 🦈 В статье ребята рассказали, какие возможности реализовали внутри приложения, какой стек технологий выбрали и что за сложности случились на фронтенде и бэкенде.
Статья: https://habr.com/ru/companies/skbkontur/articles/992662/
Платформа: разработка
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Вот что для этого понадобилось: бэкендеры — 2 штуки, фронтендер — 1 штука, дизайнер — 1 штука, мобильный разработчик — 1 штука, время — 2 учебных семестра.
Продолжаем рассказывать об интересных проектах студентов ФИИТ. В этот раз речь пойдёт о приложении для интерактивного мониторинга белых акул по заказу Стэнфордского университета. 🦈 В статье ребята рассказали, какие возможности реализовали внутри приложения, какой стек технологий выбрали и что за сложности случились на фронтенде и бэкенде.
Статья: https://habr.com/ru/companies/skbkontur/articles/992662/
Платформа: разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
Модульная архитектура — это не просто теория, вот доказательства
Среднестатистический разработчик, если его попросят дать определение модульности, вероятно, скажет что-то вроде:
Модульность — это когда вы разбиваете свой код на более мелкие, отдельные части или модули, вместо того чтобы хранить все в одном большом файле. Каждый модуль обрабатывает определенную часть функциональности, и они могут работать вместе, но существовать независимо.
Здесь нет ничего неверного, но это опасно неполно; отсутствует объяснение того, почему это важно — а это крайне важно для понимания того, что такое хорошая модульность.
Статья: https://apptractor.ru/info/articles/modulnaya-arhitektura-eto-ne-prosto-teoriya-vot-dokazatelstva.html
Платформа: iOS/архитектура
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Среднестатистический разработчик, если его попросят дать определение модульности, вероятно, скажет что-то вроде:
Модульность — это когда вы разбиваете свой код на более мелкие, отдельные части или модули, вместо того чтобы хранить все в одном большом файле. Каждый модуль обрабатывает определенную часть функциональности, и они могут работать вместе, но существовать независимо.
Здесь нет ничего неверного, но это опасно неполно; отсутствует объяснение того, почему это важно — а это крайне важно для понимания того, что такое хорошая модульность.
Статья: https://apptractor.ru/info/articles/modulnaya-arhitektura-eto-ne-prosto-teoriya-vot-dokazatelstva.html
Платформа: iOS/архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
Kotlin Android MVVM Template - шаблон Android-приложения
Kotlin Android MVVM Template - простой и легкий шаблон для приложения Jetpack Compose с полностью настроенной навигацией, Retrofit и Dagger-Hilt для вашего удобства, чтобы вы могли сосредоточиться только на важном.
Фичи:
• Полностью на Jetpack Compose
• Jetpack Compose Navigation
• Полностью настроенный Retrofit
• MVVM
• Kotlin DSL
• Gradle Version Catalog для инъекции зависимостей
• detekt для проверки кода
• Dependabot для обновления зависимостей
• GitHub Actions CI/CD для проверки линтера, тестов и сборки APK
• Coil для изображений
Kotlin Android MVVM Template на GitHub: https://github.com/its-me-debk007/kotlin-android-mvvm-template
Платформа: Android
⭐️: 62
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Kotlin Android MVVM Template - простой и легкий шаблон для приложения Jetpack Compose с полностью настроенной навигацией, Retrofit и Dagger-Hilt для вашего удобства, чтобы вы могли сосредоточиться только на важном.
Фичи:
• Полностью на Jetpack Compose
• Jetpack Compose Navigation
• Полностью настроенный Retrofit
• MVVM
• Kotlin DSL
• Gradle Version Catalog для инъекции зависимостей
• detekt для проверки кода
• Dependabot для обновления зависимостей
• GitHub Actions CI/CD для проверки линтера, тестов и сборки APK
• Coil для изображений
Kotlin Android MVVM Template на GitHub: https://github.com/its-me-debk007/kotlin-android-mvvm-template
Платформа: Android
⭐️: 62
Please open Telegram to view this post
VIEW IN TELEGRAM
•
(iOS En) Code-along: Experiment with coding intelligence in Xcode 26•
(iOS En) Meet agentic coding in Xcode •
(iOS En) Complex 3D Animation Effect Using SwiftUI - BlueNote's 3D Paywall Effect•
(iOS En) How to build a better tagging UI in SwiftUI with Antigravity•
(iOS En) SwiftUI Dynamic Island QR Code Scanner•
(And Ru) kotlinx.fuzz: почему фаззинг имеет значение•
(And En) Talking Kotlin #144 | Kotlin 2.3 Release Special (Audio Only)•
(Crs En) How to Encrypt Local Preferences In KMP With KSafe•
(Dev Ru) Лучший AI для программиста в 2025•
(Dev Ru) СДВГ (ADHD) в IT-индустрии — Наука, диагностика и мифы•
(Dev Ru) Как работают программисты в больших IT-компанияхПрошлогодние видео:
•
(iOS Ru) Как поддерживать недельный релизный цикл и ничего не забывать•
(iOS Ru) Реактивный велосипед для SDK•
(And Ru) Разбор кода приложения по доставке пиццы•
(And Ru) Запускаем автотесты Android на EMCEEAppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Под капотом Android Automotive: Что такое VHAL и почему это сердце машины
В прошлой статье мы запустили эмулятор и убедились, что Android Automotive OS (AAOS) — это не просто зеркало вашего телефона. Это самостоятельная экосистема. Но пока мы запускали только стандартные медиа-плееры, мы скользили по поверхности.
Настоящая магия начинается там, где софт встречается с «железом».
В телефоне у вас есть стандартный набор датчиков: GPS, акселерометр, гироскоп. В современном автомобиле таких датчиков тысячи: от давления в шинах и температуры масла до угла поворота руля и статуса каждой двери. Как Android-разработчику получить доступ к этому океану данных? Не будем же мы тянуть провода к OBDII разъему?
Конечно, нет. Для этого Google построила мощный мост, по которому мы сегодня и пройдемся. Добро пожаловать в мир Car API и VHAL.
Статья: https://habr.com/ru/articles/992868/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В прошлой статье мы запустили эмулятор и убедились, что Android Automotive OS (AAOS) — это не просто зеркало вашего телефона. Это самостоятельная экосистема. Но пока мы запускали только стандартные медиа-плееры, мы скользили по поверхности.
Настоящая магия начинается там, где софт встречается с «железом».
В телефоне у вас есть стандартный набор датчиков: GPS, акселерометр, гироскоп. В современном автомобиле таких датчиков тысячи: от давления в шинах и температуры масла до угла поворота руля и статуса каждой двери. Как Android-разработчику получить доступ к этому океану данных? Не будем же мы тянуть провода к OBDII разъему?
Конечно, нет. Для этого Google построила мощный мост, по которому мы сегодня и пройдемся. Добро пожаловать в мир Car API и VHAL.
Статья: https://habr.com/ru/articles/992868/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM