Про BDUI грабли на примере простого опросника, который не так прост, как кажется
Однажды у нас появилась задача, которая (на первый взгляд) выглядела очень простой: сделать опросник в приложении. На макетах всего лишь пара экранов, несколько вопросов, кнопка «Далее». Всё красиво, не сухо, с картинками у вариантов ответа и нормальной подачей, а не в формате «Заполните обязательные поля».
Статья: https://habr.com/ru/companies/alfa/articles/1036748/
Платформа: разработка
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Однажды у нас появилась задача, которая (на первый взгляд) выглядела очень простой: сделать опросник в приложении. На макетах всего лишь пара экранов, несколько вопросов, кнопка «Далее». Всё красиво, не сухо, с картинками у вариантов ответа и нормальной подачей, а не в формате «Заполните обязательные поля».
Статья: https://habr.com/ru/companies/alfa/articles/1036748/
Платформа: разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Горячая перезагрузка AGSL-шейдеров без пересборки: пошаговое руководство для Compose
В этой статье вы изучите пример мыльного пузыря и точно определите, какие параметры можно настраивать врантайме, почему строка
Статья: https://apptractor.ru/info/articles/goryachaya-perezagruzka-agsl-sheyderov-bez-peresborki-poshagovoe-rukovodstvo-dlya-compose.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В этой статье вы изучите пример мыльного пузыря и точно определите, какие параметры можно настраивать врантайме, почему строка
remember(SHADER_SRC) обеспечивает распространение изменений шейдера на запущенную программу, как спецификации анимации на стороне Kotlin сглаживают переходы при изменении числа и какие классы редактирования по-прежнему требуют полной пересборки.Статья: https://apptractor.ru/info/articles/goryachaya-perezagruzka-agsl-sheyderov-bez-peresborki-poshagovoe-rukovodstvo-dlya-compose.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
VReader - ридер EPUB, PDF, TXT и Markdown для iOS
VReader — это современное приложение для чтения, разработанное для iPhone и iPad, полностью созданное с помощью ИИ (Claude Code + Codex CLI) при участии людей в определении требований и тестировании. Оно поддерживает форматы EPUB, AZW3/MOBI (Kindle), PDF, TXT и Markdown с аннотациями, полнотекстовым поиском, ИИ-помощником, синтезом речи, парсингом исходных данных книг и резервным копированием через WebDAV.
Стек: Swift 6, SwiftUI, SwiftData, EPUB через WKWebView, AZW3/MOBI через Foliate-js в WKWebView, PDF через PDFKit + PDFAnnotation, TXT через TextKit 1 (UITextView) + UITableView, Markdown через NSAttributedString, OpenAI для суммаризации, TTS через AVSpeechSynthesizer + облачный TTS.
VReader на GitHub: https://github.com/lllyys/vreader
Платформа: iOS
⭐️: 11
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
VReader — это современное приложение для чтения, разработанное для iPhone и iPad, полностью созданное с помощью ИИ (Claude Code + Codex CLI) при участии людей в определении требований и тестировании. Оно поддерживает форматы EPUB, AZW3/MOBI (Kindle), PDF, TXT и Markdown с аннотациями, полнотекстовым поиском, ИИ-помощником, синтезом речи, парсингом исходных данных книг и резервным копированием через WebDAV.
Стек: Swift 6, SwiftUI, SwiftData, EPUB через WKWebView, AZW3/MOBI через Foliate-js в WKWebView, PDF через PDFKit + PDFAnnotation, TXT через TextKit 1 (UITextView) + UITableView, Markdown через NSAttributedString, OpenAI для суммаризации, TTS через AVSpeechSynthesizer + облачный TTS.
VReader на GitHub: https://github.com/lllyys/vreader
Платформа: iOS
⭐️: 11
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Видео I/O и кейноут KotlinConf
•
(iOS En) Senior iOS Engineer Mock Interview - Spotify App System Design•
(iOS En) Custom Glass Segmented Control Using SwiftUI•
(iOS En) How to Add Search in a SwiftUI List with Async/Await and Debounce•
(iOS En) Understanding Swift Result Builders - The Power Behind ViewBuilder•
(iOS En) Flexible Liquid Glass Morphing Tab Bar to Bottom Bar Using SwiftUI•
(I/O En) Google I/O 2026 Developer Keynote•
(I/O En) Google I/O 2026 Developer Keynote 5-Minute recap•
(I/O En) What's new in Android•
(I/O En) Build custom design systems with Jetpack Compose's new Styles API•
(I/O En) Make your UI adaptive with Android Studio's AI agent•
(I/O En) Build beautiful, premium, adaptive apps with Material•
(I/O En) Build adaptive layouts with Navigation 3•
(I/O En) Deploy Android on-device AI with ML Kit GenAI and LiteRT-LM•
(I/O En) The latest in Android XR•
(I/O En) Supercharge Android media experiences with Jetpack Media3 and CameraX•
(I/O En) What's new in Android development tools•
(I/O En) What’s new in Google Play•
(I/O En) Make Material your own•
(I/O En) Engineering memory-performant Android apps•
(I/O En) Build a modern note-taking app on Android•
(I/O En) Build native Android experiences for web apps using WebView•
(I/O En) Design and build desktop-class Android experiences•
(I/O En) Extend your mobile app for AI glasses•
(I/O En) Build adaptive widgets for cars, phones, watches, and more•
(I/O En) Android accessibility updates•
(And En) The 4 Types of Offline Caches On Android - Mobile System Design Basics•
(And En) KotlinConf ’26 Keynote•
(And En) Gotta use that returned value?•
(Crs En) A New Default Project Structure for Kotlin MultiplatformПрошлогодние видео:
•
(iOS Ru) TOP 10 горячих клавиш для Xcode•
(iOS Ru) Swift Plugins: ускоряем сборку проекта•
(iOS Ru) Объединяем Combine и Swift Concurrency•
(And Ru) Взлом и защита Android-приложений•
(And Ru) Моментальный запуск: как VK Клипы работают с плейбэком видео на Android•
(And Ru) Память в Android, утечки и OOM•
(Crs Ru) Настраиваем навигацию во Flutter-приложении через AutoRoute•
(And Ru) Проводим и проходим Mobile System Design-интервьюPlease open Telegram to view this post
VIEW IN TELEGRAM
BeautyCat - просмотр adb logcat в браузере
BeautyCat - красивый веб-интерфейс для просмотра логов
BeautyCat на GitHub: https://github.com/jeziellago/beautycat
Платформа: Android
⭐️: 10
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
BeautyCat - красивый веб-интерфейс для просмотра логов
adb logcat, аналог Logcat из Android Studio, но без IDE. Это оболочка для adb logcat, которая передает логи в ваш браузер через WebSocket и предоставляет быстрый интерфейс, похожий на IDE, с фильтрами по уровню/тегу/пакету, поиском с регулярными выражениями, паузой/возобновлением, предустановленными фильтрами и экспортом в один клик. Запуск одной командой. IDE не требуется.BeautyCat на GitHub: https://github.com/jeziellago/beautycat
Платформа: Android
⭐️: 10
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴1
Обход блокировок внутри iOS-приложения: VLESS + Reality через sing-box, и грабли по дороге
Мы делаем мессенджер. Весной 2026 наш бэкенд начал отваливаться у части пользователей из России: HTTPS-запросы к API таймаутятся, WebSocket не поднимается. Картина знакомая всем, кто держит сервис с одним доменом и одним IP.
Для мессенджера это приговор. Не «неудобно», а именно приговор: приложение, которое не может даже подключиться, бесполезно. И вариант «попросите пользователя сначала включить VPN» нас не устраивал совсем. Ниже разберу, почему мы в итоге встроили обход прямо в приложение, на чём он работает и на какие грабли мы наступили. Без маркетинга, по делу.
Статья: https://habr.com/ru/articles/1038412/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Мы делаем мессенджер. Весной 2026 наш бэкенд начал отваливаться у части пользователей из России: HTTPS-запросы к API таймаутятся, WebSocket не поднимается. Картина знакомая всем, кто держит сервис с одним доменом и одним IP.
Для мессенджера это приговор. Не «неудобно», а именно приговор: приложение, которое не может даже подключиться, бесполезно. И вариант «попросите пользователя сначала включить VPN» нас не устраивал совсем. Ниже разберу, почему мы в итоге встроили обход прямо в приложение, на чём он работает и на какие грабли мы наступили. Без маркетинга, по делу.
Статья: https://habr.com/ru/articles/1038412/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡3
Ускоряем выполнение запросов к Room с помощью индексов базы данных
В мире Android-разработки библиотека Room Persistence Library служит мощной абстракцией над SQLite. Однако по мере роста вашей базы данных стандартные запросы могут стать медленными. Для поддержания плавной работы пользовательского интерфейса крайне важно понимать и внедрять индексы.
В этой статье рассматривается, как работают индексы Room, их структурные вариации и технические компромиссы, которые необходимо учитывать для обеспечения производительности вашего приложения.
Статья: https://apptractor.ru/info/articles/uskoryaem-vypolnenie-zaprosov-k-room-s-pomoschyu-indeksov-bazy-dannyh.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В мире Android-разработки библиотека Room Persistence Library служит мощной абстракцией над SQLite. Однако по мере роста вашей базы данных стандартные запросы могут стать медленными. Для поддержания плавной работы пользовательского интерфейса крайне важно понимать и внедрять индексы.
В этой статье рассматривается, как работают индексы Room, их структурные вариации и технические компромиссы, которые необходимо учитывать для обеспечения производительности вашего приложения.
Статья: https://apptractor.ru/info/articles/uskoryaem-vypolnenie-zaprosov-k-room-s-pomoschyu-indeksov-bazy-dannyh.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
MarkdownDisplayView - представление для отображения Markdown с поддержкой стриминга
MarkdownDisplayView - мощный компонент рендеринга Markdown для iOS, созданный на основе TextKit 2, обеспечивает плавную работу рендеринга и широкие возможности настройки. Он также позволяет осуществлять потоковый рендеринг Markdown формата в сценариях чатов с использованием ИИ (как в приложениях ChatGPT или Claude).
Фичи:
• Высокопроизводительный рендеринг — на основе TextKit 2, поддерживает асинхронный рендеринг, инкрементальные обновления, потоковый рендеринг и т. д. Мгновенная загрузка со сверхбыстрым рендерингом первого экрана.
• Низкое использование ЦП — потоковый режим поддерживает рендеринг вложенных стилей с пиковой загрузкой ЦП < 56% на симуляторе iPhone 17 Pro, в среднем всего 30%.
• Полная поддержка Markdown — формулы протокола LaTeX, заголовки, списки, таблицы, блоки кода (с горизонтальной прокруткой), цитаты, изображения и многое другое.
• Подсветка синтаксиса — поддерживает подсветку синтаксиса для более чем 20 языков программирования (Swift, Python, JavaScript и др.).
• Автоматическое оглавление — автоматически извлекает заголовки для создания интерактивного оглавления.
• Широкие возможности настройки — Комплексная конфигурация шрифтов, цветов, отступов и т. д.
• Пользовательские расширения — Поддержка пользовательского анализа синтаксиса и рендеринга блоков кода (например, диаграмм Mermaid).
• Колбеки событий — Нажатия на ссылки, нажатия на изображения, навигация по оглавлению.
• Нативная iOS-версия — Создано с использованием UIKit и TextKit 2 для превосходной производительности.
• Темный режим — Встроенные настройки светлой и темной тем.
• Тактильная обратная связь — Поддержка синхронизированной тактильной обратной связи во время потоковой передачи для улучшения взаимодействия.
MarkdownDisplayView на GitHub: https://github.com/zjc19891106/MarkdownDisplayView
Платформа: iOS
⭐️: 174
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
MarkdownDisplayView - мощный компонент рендеринга Markdown для iOS, созданный на основе TextKit 2, обеспечивает плавную работу рендеринга и широкие возможности настройки. Он также позволяет осуществлять потоковый рендеринг Markdown формата в сценариях чатов с использованием ИИ (как в приложениях ChatGPT или Claude).
Фичи:
• Высокопроизводительный рендеринг — на основе TextKit 2, поддерживает асинхронный рендеринг, инкрементальные обновления, потоковый рендеринг и т. д. Мгновенная загрузка со сверхбыстрым рендерингом первого экрана.
• Низкое использование ЦП — потоковый режим поддерживает рендеринг вложенных стилей с пиковой загрузкой ЦП < 56% на симуляторе iPhone 17 Pro, в среднем всего 30%.
• Полная поддержка Markdown — формулы протокола LaTeX, заголовки, списки, таблицы, блоки кода (с горизонтальной прокруткой), цитаты, изображения и многое другое.
• Подсветка синтаксиса — поддерживает подсветку синтаксиса для более чем 20 языков программирования (Swift, Python, JavaScript и др.).
• Автоматическое оглавление — автоматически извлекает заголовки для создания интерактивного оглавления.
• Широкие возможности настройки — Комплексная конфигурация шрифтов, цветов, отступов и т. д.
• Пользовательские расширения — Поддержка пользовательского анализа синтаксиса и рендеринга блоков кода (например, диаграмм Mermaid).
• Колбеки событий — Нажатия на ссылки, нажатия на изображения, навигация по оглавлению.
• Нативная iOS-версия — Создано с использованием UIKit и TextKit 2 для превосходной производительности.
• Темный режим — Встроенные настройки светлой и темной тем.
• Тактильная обратная связь — Поддержка синхронизированной тактильной обратной связи во время потоковой передачи для улучшения взаимодействия.
MarkdownDisplayView на GitHub: https://github.com/zjc19891106/MarkdownDisplayView
Платформа: iOS
⭐️: 174
Please open Telegram to view this post
VIEW IN TELEGRAM
Прекращаем использовать .onAppear для API-вызовов: осваиваем .task и конечный автомат
Когда я наконец-то углубился в оптимизацию производительности и начал изучать, как настоящие опытные инженеры проектируют свои сетевые уровни, это стало для меня настоящим откровением. Я понял, что
Это осознание изменило для меня всё. Оно высветило ту самую грань, которая отделяет хорошего разработчика от отличного:
Если вы всё ещё помещаете вызовы API внутрь
Статья: https://apptractor.ru/info/articles/prekraschaem-ispolzovat-onappear-dlya-api-vyzovov-osvaivaem-task-i-konechnyy-avtomat.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Когда я наконец-то углубился в оптимизацию производительности и начал изучать, как настоящие опытные инженеры проектируют свои сетевые уровни, это стало для меня настоящим откровением. Я понял, что
.onAppear — это не сетевой инструмент, а событие жизненного цикла пользовательского интерфейса. Использование его для получения данных приводило к гонкам, утечкам памяти и невозможным состояниям интерфейса.Это осознание изменило для меня всё. Оно высветило ту самую грань, которая отделяет хорошего разработчика от отличного:
Начинающий разработчик пишет работающий код. Опытный разработчик пишет код, который безопасно масштабируется и уважает системные ресурсы.
Если вы всё ещё помещаете вызовы API внутрь
.onAppear, пора обновить архитектуру. Вот предельно честная правда о том, почему это ломает ваше приложение изнутри, и как это исправить с помощью .task и машины состояний.Статья: https://apptractor.ru/info/articles/prekraschaem-ispolzovat-onappear-dlya-api-vyzovov-osvaivaem-task-i-konechnyy-avtomat.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
ReduxKotlin - реализация Redux для Kotlin
ReduxKotlin - контейнер предсказуемого состояния для приложений Kotlin. Миссия проекта: Предоставить стандартную реализацию Redux для Kotlin.
Фичи:
• Многоплатформенность. ReduxKotlin разработан с учетом приоритета многоплатформенности. Поддерживает все платформы, на которые ориентирован Kotlin (JVM, нативные приложения, JS, WASM), что позволяет совместно использовать код.
• Предсказуемость. Redux помогает писать приложения, которые ведут себя согласованно и легко тестируются.
• Централизация. Централизация состояния и логики вашего приложения позволяет легко обмениваться состоянием между компонентами и событиями жизненного цикла.
• Портирование Redux для JavaScript. ReduxKotlin имеет тот же API, что и Redux для JavaScript. Если вы работаете с JavaScript или взаимодействуете с разработчиками JavaScript, использующими Redux, вы почувствуете себя как дома.
ReduxKotlin на GitHub: https://github.com/reduxkotlin/redux-kotlin
Платформа: Android
⭐️: 499
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
ReduxKotlin - контейнер предсказуемого состояния для приложений Kotlin. Миссия проекта: Предоставить стандартную реализацию Redux для Kotlin.
Фичи:
• Многоплатформенность. ReduxKotlin разработан с учетом приоритета многоплатформенности. Поддерживает все платформы, на которые ориентирован Kotlin (JVM, нативные приложения, JS, WASM), что позволяет совместно использовать код.
• Предсказуемость. Redux помогает писать приложения, которые ведут себя согласованно и легко тестируются.
• Централизация. Централизация состояния и логики вашего приложения позволяет легко обмениваться состоянием между компонентами и событиями жизненного цикла.
• Портирование Redux для JavaScript. ReduxKotlin имеет тот же API, что и Redux для JavaScript. Если вы работаете с JavaScript или взаимодействуете с разработчиками JavaScript, использующими Redux, вы почувствуете себя как дома.
ReduxKotlin на GitHub: https://github.com/reduxkotlin/redux-kotlin
Платформа: Android
⭐️: 499
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Gradle под капотом: как перестать страдать и заставить сборку летать
Gradle дает нам единый источник правды, повторяемые сборки и масштабируемость: от пет-проекта до огромных многомодульных монорепозиториев. Давайте разберем его по косточкам, чтобы настройка билдов больше не была болью.
Статья: https://habr.com/ru/articles/1038946/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Gradle дает нам единый источник правды, повторяемые сборки и масштабируемость: от пет-проекта до огромных многомодульных монорепозиториев. Давайте разберем его по косточкам, чтобы настройка билдов больше не была болью.
Статья: https://habr.com/ru/articles/1038946/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
SmartTube - нативный клиент YouTube на Swift/SwiftUI
SmartTube - нативный клиент YouTube на Swift/SwiftUI для iPhone, iPad, macOS и Apple TV. Никакой рекламы. Автоматический пропуск спонсорских объявлений. Заголовки сообщества DeArrow. Вход через Google. До 8K.
SmartTube на GitHub: https://github.com/milika/SmartTubeIOS
Платформа: iOS
⭐️: 131
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
SmartTube - нативный клиент YouTube на Swift/SwiftUI для iPhone, iPad, macOS и Apple TV. Никакой рекламы. Автоматический пропуск спонсорских объявлений. Заголовки сообщества DeArrow. Вход через Google. До 8K.
SmartTube на GitHub: https://github.com/milika/SmartTubeIOS
Платформа: iOS
⭐️: 131
Please open Telegram to view this post
VIEW IN TELEGRAM
KeepLiveService - 35+ стратегий работы сервиса в фоне
KeepLiveService - самая полная библиотека способов поддержания сервиса Android в рабочем состоянии. Она реализует все известные стратегии keep-alive - более 35 стратегий фоновых служб, нативный демон на C++, унифицированные внешние стратегии запуска Активити, поддержка Android 7.0–16, совместимость с более чем 10 версиями прошивок от разных производителей.
KeepLiveService на GitHub: https://github.com/Pangu-Immortal/KeepLiveService
Платформа: Android
⭐️: 211
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
KeepLiveService - самая полная библиотека способов поддержания сервиса Android в рабочем состоянии. Она реализует все известные стратегии keep-alive - более 35 стратегий фоновых служб, нативный демон на C++, унифицированные внешние стратегии запуска Активити, поддержка Android 7.0–16, совместимость с более чем 10 версиями прошивок от разных производителей.
KeepLiveService на GitHub: https://github.com/Pangu-Immortal/KeepLiveService
Платформа: Android
⭐️: 211
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
•
(iOS En) Customizing Native Tab Bar With FAB Buttons•
(iOS En) Manage Complex SwiftUI List Updates without Breaking your Data Flow•
(iOS En) SwiftUI Shape Morphing View•
(And En) Connect to the intelligence system•
(And En) Introducing Android Performance Analyzer - The Next Evolution in Profiling for Android•
(And En) Develop faster with AI in Android Studio•
(And En) Build intelligent Android apps with Google's AI•
(And En) Adaptive development for the expanding Android ecosystem•
(And En) Google I/O 2026 Recap with Logan Kilpatrick, Josh Woodward and Tulsee Doshi•
(And En) Bring the power of on-device AI to life with Google AI Edge and Gemma•
(And En) Kotlin CLI, Kotlin 2.4, KMP Changes & More - KotlinConf 2026 News Special•
(And En) These Android News Are INSANE - Google IO 2026 Special•
(And En) Everything you need to know about Styles API in Jetpack Compose•
(Dev Ru) Zed – редактор кода на Rust | AI агент, CRDT, GPUI•
(Mrk Ru) Где покупать установки мобильного приложения, когда основные каналы исчерпаныПрошлогодние видео:
•
(iOS Ru) Ускоряем приложение эффективно•
(iOS Ru) Swift Concurrency в iOS SDK Яндекс Доставки•
(iOS Ru) Как мы доверили качество наших приложений AI•
(iOS Ru) Мок-собеседование iOS-разработчика. SwiftUI (+ все собеседования)•
(iOS Ru) Макросы Swift: проще, чище, быстрее•
(And Ru) История одного бизнес-желания•
(And Ru) Наглядный пример, когда не следовать best practices for coroutines от Google•
(And Ru) Кто является Senior разработчиком?•
(And Ru) Мы решили все проблемы работы в модульном проекте. Хотите так же?•
(And Ru) Оптимизация Compose: проблемы, опыт, тактика, стратегияPlease open Telegram to view this post
VIEW IN TELEGRAM
Книга: «System Design. Проектирование мобильных систем. Подготовка к сложному интервью»
Практическое руководство MSD превращает сложные собеседования в предсказуемый процесс. Вы получаете 5-шаговую схему эффективного прохождения интервью и разбор 7 реальных кейсов (лента новостей, мессенджер, YouTube, Google Drive, трейдинговая платформа и др.), позволяющих проектировать архитектуру клиента, API, офлайн-режим, кэширование и масштабируемость. Здесь вы найдете готовые шаблоны, trade-off’ы и шпаргалки — всё, чтобы уверенно проходить интервью в топ-компаниях и расти от мидла до стафф+.
Статья: https://habr.com/ru/companies/piter/articles/1039648/
Платформа: разработка
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Практическое руководство MSD превращает сложные собеседования в предсказуемый процесс. Вы получаете 5-шаговую схему эффективного прохождения интервью и разбор 7 реальных кейсов (лента новостей, мессенджер, YouTube, Google Drive, трейдинговая платформа и др.), позволяющих проектировать архитектуру клиента, API, офлайн-режим, кэширование и масштабируемость. Здесь вы найдете готовые шаблоны, trade-off’ы и шпаргалки — всё, чтобы уверенно проходить интервью в топ-компаниях и расти от мидла до стафф+.
Статья: https://habr.com/ru/companies/piter/articles/1039648/
Платформа: разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Pine - нативный для Mac редактор кода
Pine — это редактор кода для разработчиков, которым нужно быстрое нативное приложение для Mac без накладных расходов Electron. Создан с использованием SwiftUI и AppKit, разработан для macOS 26 Liquid Glass. Открывается мгновенно, не мешает работе.
Архитектура: MVVM с представлениями SwiftUI, поддерживаемыми AppKit через NSViewRepresentable. Ядро редактора использует нативный стек NSTextStorage/NSLayoutManager/NSTextContainer. Подсветка синтаксиса выполняется асинхронно в фоновой очереди с токенами генерации для предотвращения появления устаревших результатов. Операции Git выполняются параллельно через GCD. Поиск по проекту использует параллелизм Swift с использованием скользящего окна.
Pine на GitHub: https://github.com/batonogov/pine
Платформа: macOS/iOS
⭐️: 13
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Pine — это редактор кода для разработчиков, которым нужно быстрое нативное приложение для Mac без накладных расходов Electron. Создан с использованием SwiftUI и AppKit, разработан для macOS 26 Liquid Glass. Открывается мгновенно, не мешает работе.
Архитектура: MVVM с представлениями SwiftUI, поддерживаемыми AppKit через NSViewRepresentable. Ядро редактора использует нативный стек NSTextStorage/NSLayoutManager/NSTextContainer. Подсветка синтаксиса выполняется асинхронно в фоновой очереди с токенами генерации для предотвращения появления устаревших результатов. Операции Git выполняются параллельно через GCD. Поиск по проекту использует параллелизм Swift с использованием скользящего окна.
Pine на GitHub: https://github.com/batonogov/pine
Платформа: macOS/iOS
⭐️: 13
Please open Telegram to view this post
VIEW IN TELEGRAM
AppFiles - Mobile Development
Pine - нативный для Mac редактор кода Pine — это редактор кода для разработчиков, которым нужно быстрое нативное приложение для Mac без накладных расходов Electron. Создан с использованием SwiftUI и AppKit, разработан для macOS 26 Liquid Glass. Открывается…
Defer в Swift: уберитесь перед уходом
Возможно, вы считаете ключевое слово
Ключевое слово
Статья: https://apptractor.ru/info/articles/defer.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Возможно, вы считаете ключевое слово
defer одной из самых неоднозначных особенностей языка Swift, но в некоторых случаях оно очень полезно. Его можно использовать целенаправленно, и это обеспечит вам безопасность. На этой неделе мы поговорим о некоторых лучших практиках использования defer в Swift.Ключевое слово
defer в Swift позволяет выполнить блок кода в конце текущего скоупа. Что означает текущий скоуп (область видимости)? Обычно это ближайшая пара фигурных скобок. Давайте рассмотрим несколько примеров.Статья: https://apptractor.ru/info/articles/defer.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Обертки свойств в Swift: сокращаем шаблонный код
Раньше я везде копировал и вставлял один и тот же код валидации.
Каждый раз, когда мне нужно было ограничить значение от 0 до 100, я писал один и тот же геттер и сеттер. Каждый раз, когда я хотел сохранить что-то в UserDefaults, — один и тот же шаблонный код. Каждый раз, когда мне нужен был потокобезопасный доступ, — одна и та же процедура блокировки/разблокировки.
Затем я открыл для себя обертки свойств и почувствовал себя по-настоящему глупым, что не изучил их раньше.
Обертки свойств позволяют вынести эту повторяющуюся логику свойств в многоразовый компонент. Напишите один раз, используйте везде. Синтаксис чистый, цель понятна, и ваш код значительно сокращается.
SwiftUI использует их повсюду.
Статья: https://apptractor.ru/info/articles/swift-property-wrappers.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Раньше я везде копировал и вставлял один и тот же код валидации.
Каждый раз, когда мне нужно было ограничить значение от 0 до 100, я писал один и тот же геттер и сеттер. Каждый раз, когда я хотел сохранить что-то в UserDefaults, — один и тот же шаблонный код. Каждый раз, когда мне нужен был потокобезопасный доступ, — одна и та же процедура блокировки/разблокировки.
Затем я открыл для себя обертки свойств и почувствовал себя по-настоящему глупым, что не изучил их раньше.
Обертки свойств позволяют вынести эту повторяющуюся логику свойств в многоразовый компонент. Напишите один раз, используйте везде. Синтаксис чистый, цель понятна, и ваш код значительно сокращается.
SwiftUI использует их повсюду.
@State, @Binding, @Published, @Environment. Вы все это время использовали обертки свойств. Но вот в чем дело: вы можете создать свои собственные. И как только вы это научитесь это делать, вы будете удивляться, как вы вообще жили без них.Статья: https://apptractor.ru/info/articles/swift-property-wrappers.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Jetpack Compose New Style API - пример использования нового Style API
Небольшой экран для умного дома, созданный для изучения нового Jetpack Compose Foundation Style API.
Приложение целенаправленно сфокусировано: один экран управления кондиционером, чистая визуальная система в стиле Material 3 и несколько интерактивных состояний, демонстрирующих, как стили могут существовать вне обычной композиции, при этом сохраняя правильные значения темы в нужное время.
Что демонстрирует этот пример:
• Централизованный слой
• Токены стилей обрабатываются внутри
• Состояния нажатия, выбора и отключения с помощью
• Компактная область управления климатом с селектором режимов, скоростью вентилятора и чипом Eco
• Пользовательский индикатор температуры, созданный с помощью Compose Canvas
• Простой поток состояний в стиле MVVM с использованием
Jetpack Compose New Style API на GitHub: https://github.com/ardakazanci/JetpackCompose-New-Style-API
Платформа: Android
⭐️: 19
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Небольшой экран для умного дома, созданный для изучения нового Jetpack Compose Foundation Style API.
Приложение целенаправленно сфокусировано: один экран управления кондиционером, чистая визуальная система в стиле Material 3 и несколько интерактивных состояний, демонстрирующих, как стили могут существовать вне обычной композиции, при этом сохраняя правильные значения темы в нужное время.
Что демонстрирует этот пример:
• Централизованный слой
AppTheme.styles для многократно используемых стилей компонентов• Токены стилей обрабатываются внутри
StyleScope с помощью CompositionLocal.currentValue• Состояния нажатия, выбора и отключения с помощью
rememberUpdatedStyleState• Компактная область управления климатом с селектором режимов, скоростью вентилятора и чипом Eco
• Пользовательский индикатор температуры, созданный с помощью Compose Canvas
• Простой поток состояний в стиле MVVM с использованием
ViewModel и StateFlowJetpack Compose New Style API на GitHub: https://github.com/ardakazanci/JetpackCompose-New-Style-API
Платформа: Android
⭐️: 19
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Потоко-защищённая шина событий в Swift
В крупных приложениях для iOS взаимодействие между компонентами зачастую оказывается сложнее, чем сам компонент. Сервис завершает операцию, координатор должен отреагировать, возможно, потребуется обновить несколько экранов, и передача каждой зависимости по всему дереву навигации быстро начинает казаться излишней «рутинной» работой. Внедрение зависимостей и управление состоянием по-прежнему имеют своё место. Шина (данных) событий предоставляет нам ещё один инструмент для слабосвязанных уведомлений, где прямое управление добавило бы ненужную сложность. Цель этого компонента проста: позволить одной части приложения публиковать событие, а другим частям приложения — подписываться на события определенного типа. Реализация сосредоточена на типовой безопасности, потокобезопасном хранении, автоматической очистке при деаллокации владельца, явной отмене отдельных подписок, доставке MainActor для кода пользовательского интерфейса и поддержке AsyncStream для потребителей async/await.
Статья: https://habr.com/ru/articles/1042258/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В крупных приложениях для iOS взаимодействие между компонентами зачастую оказывается сложнее, чем сам компонент. Сервис завершает операцию, координатор должен отреагировать, возможно, потребуется обновить несколько экранов, и передача каждой зависимости по всему дереву навигации быстро начинает казаться излишней «рутинной» работой. Внедрение зависимостей и управление состоянием по-прежнему имеют своё место. Шина (данных) событий предоставляет нам ещё один инструмент для слабосвязанных уведомлений, где прямое управление добавило бы ненужную сложность. Цель этого компонента проста: позволить одной части приложения публиковать событие, а другим частям приложения — подписываться на события определенного типа. Реализация сосредоточена на типовой безопасности, потокобезопасном хранении, автоматической очистке при деаллокации владельца, явной отмене отдельных подписок, доставке MainActor для кода пользовательского интерфейса и поддержке AsyncStream для потребителей async/await.
Статья: https://habr.com/ru/articles/1042258/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM