Об этом проекте

Tic — это бесплатное macOS-приложение с открытым исходным кодом, которое выносит ваши списки дел из строки меню на рабочий стол в виде плавающих стикеров. Каждый стикер — это независимый чек-лист, который можно перетаскивать, изменять в размере и настраивать, что позволяет держать задачи на виду во время работы. ## Ключевые возможности - **Плавающие стикеры** — панели без рамок, которые можно перетаскивать и изменять в размере. При желании стикер можно закрепить поверх других окон или показывать на всех Spaces. Позиции и состояния сохраняются между запусками. - **Несколько списков** — создавайте новые списки из строки меню, сочетанием ⌘N, кнопкой + внутри стикера или через меню в Dock. Новые списки автоматически получают имена List 1, List 2 и т. д. - **Расширенные задачи** — поддержка подзадач до 3 уровней вложенности (завершение родительской задачи завершает дочерние), многострочных заметок (Shift-Return) и встроенного форматирования Markdown (жирный, курсив, код, зачёркивание, ссылки). Нажмите для редактирования, перетащите для изменения порядка или перетащите вправо для вложения. - **Сплошные или Liquid-Glass стикеры** — выбирайте цветовые темы для каждого стикера отдельно или полупрозрачный материал, сквозь который виден рабочий стол. - **Сворачивание** — двойной щелчок по заголовку стикера сворачивает его до одной шапки. - **Палитра поиска в стиле Raycast** — плавающая центрированная командная палитра для поиска, открытия или удаления любого списка с полной навигацией с клавиатуры. - **Запуск при входе** — опциональный автозапуск, а также настраиваемая иконка в строке меню и нативная идентичность в Dock. ## Требования - macOS 14 (Sonoma) или новее. ## Установка 1. Скачайте последний `Tic-vX.Y.Z.zip` со [страницы релизов](https://github.com/kasvith/tic/releases), распакуйте его и переместите `Tic.app` в `/Applications`. 2. Tic подписан ad-hoc (без нотаризации), поэтому Gatekeeper может заблокировать его при первом запуске. Снимите флаг карантина командой: ```sh xattr -c /Applications/Tic.app ``` Затем откройте его обычным способом. Либо щёлкните правой кнопкой по `Tic.app` → Открыть → Открыть. 3. Чтобы Tic запускался автоматически, включите **Launch at Login** в меню строки меню. ## Сборка из исходного кода Tic — это Swift Package, поэтому `.xcodeproj` не нужен. ```sh swift run # сборка + запуск (dev) swift build -c release # релизная сборка swift test # запуск набора тестов (Swift Testing) ./scripts/package.sh # собрать dist/Tic.app (добавьте --open для запуска) open Package.swift # редактировать в Xcode ``` ## Использование - Иконка в строке меню показывает недавние списки (с подменю **More Lists** для остальных) и даёт быстрый доступ к **Search Lists…**, **New List** (⌘N) и **Launch at Login**. - Наведите курсор на стикер, чтобы показать его элементы управления: цвет, сплошной/стекло, поверх всех окон, сворачивание, **+** новый список и закрытие. Щёлкните по заголовку, чтобы переименовать; нижнее поле добавляет задачи (Return сохраняет фокус). - Наведите курсор на задачу, чтобы показать **✕** (удалить) и строку **+** под ней — щёлкните по ней, чтобы добавить подзадачу, вложенную под эту строку. Пустые задачи исчезают, когда вы щёлкаете в другом месте. ## Сочетания клавиш | Сочетание | Действие | | --- | --- | | **Return** | Завершить редактирование задачи / добавить введённую задачу | | **Shift-Return** (или **⌥ Return**) | Новая строка внутри той же задачи | | **Shift-Tab** | Сделать задачу подзадачей (вложить на один уровень глубже) | | **⌃ Shift-Tab** | Вынести подзадачу из вложенности (переместить обратно) | | **⌘N** | Новый список | | **Двойной щелчок** по заголовку | Свернуть / развернуть стикер | Вы также можете перетаскивать задачу для изменения порядка или перетащить её вправо для вложения — индикатор сброса показывает, куда (и на какой уровень) она попадёт. Во время редактирования в поле появляется небольшая подсказка с клавишами (⇧⏎ строка, ⇧⇥ вложить), чтобы не запоминать таблицу. ## Архитектура Tic использует представления SwiftUI, размещённые внутри AppKit `NSPanel` (единственный способ добиться настоящего поведения настольного стикера), с хранением в SQLite через GRDB. Координатор `AppModel` связывает строку меню с оконным слоем. Полный разбор см. в `CLAUDE.md`. **Стек:** Swift 6 · SwiftUI + AppKit · GRDB (SQLite) · `SMAppService` (элемент входа). ## Разработка и релизы - **CI** (`.github/workflows/ci.yml`) собирает, тестирует и линтит при каждом push/PR. - **Changelog** генерируется из [Conventional Commits](https://www.conventionalcommits.org) с помощью [git-cliff](https://git-cliff.org) (`cliff.toml`) и хранится в `CHANGELOG.md`. - **Релизы основаны на тегах:** отправьте тег `v*`, и рабочий процесс релиза соберёт `Tic.app`, сгенерирует примечания к релизу и опубликует GitHub Release с заархивированным приложением. ```sh git tag v0.1.0 && git push origin v0.1.0 ``` Исходные изображения иконок находятся в `Assets/` (AppIcon / Flat / MenuBar). ## Лицензия Выпущено под [лицензией MIT](LICENSE). © 2026 Kasun Vithanage.