Guide
Контрибьютинг и баг-репорты
Как сообщать об ошибках, предлагать фичи и вносить вклад в LangSwitcher.
LangSwitcher — бесплатный проект с открытым исходным кодом под лицензией MIT. Контрибьюты любого рода приветствуются!
Сообщение об ошибках
Нашли баг? Создайте issue на GitHub.
Что включить в баг-репорт
- Описание — что произошло и что ожидалось
- Шаги воспроизведения — как вызвать баг
- Версия macOS — например, macOS 15.2 Sequoia
- Версия LangSwitcher — видна в Настройках → О программе
- Раскладки клавиатуры — какие раскладки включены
- Журнал преобразований — экспортируйте через Настройки → Журнал → Экспорт JSON и приложите файл
Приложите журнал преобразований! Он содержит исходный текст, результат, раскладки и время — это значительно ускоряет отладку. Экспортируйте через Настройки → вкладка Журнал → Экспорт JSON.
Пример баг-репорта
**Баг:** Текст некорректно преобразуется для немецкой раскладки
**Шаги:**
1. Включить немецкую (QWERTZ) и английскую (QWERTY) раскладки
2. Набрать «hallo» в английской раскладке
3. Нажать ⇧⇧
4. Ожидалось: «hallo» (корректный немецкий) — Получено: «jzllo»
**macOS:** 15.2
**LangSwitcher:** 1.0.0
**Раскладки:** U.S., German
**Журнал приложен:** conversion-log-2026-03-01.json
Запросы фич
Есть идея? Создайте issue с меткой enhancement. Опишите:
- Что хотите реализовать
- Почему это будет полезно
- Идеи по реализации (если есть)
Контрибьютинг кода
Начало работы
- Сделайте форк репозитория
- Клонируйте форк
- Откройте
LangSwitcher.xcodeprojв Xcode - Внесите изменения
- Запустите тесты:
xcodebuild test \
-project LangSwitcher.xcodeproj \
-scheme LangSwitcher \
-destination 'platform=macOS' \
CODE_SIGN_IDENTITY="-" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO
- Закоммитьте и запушьте
- Откройте Pull Request
Правила
- Все тесты должны проходить перед отправкой PR
- Новые фичи требуют тестов — добавьте юнит-тесты для нового функционала
- Следуйте существующему стилю — чистый Swift, без внешних зависимостей
- Локализация — все новые строки интерфейса через
LocalizationManager.shared.t("key"), добавляйте в оба файлаStrings_en.swiftиStrings_ru.swift
Добавление новой раскладки
- Создайте новый
LayoutCharacterMapвSources/Services/LayoutMapper.swift - Добавьте карту символов между новой раскладкой и английской
- Зарегистрируйте карту в
allMaps - Добавьте тесты в
LangSwitcherTests/LayoutMapperTests.swift - Обновите документацию
Сообщество
- GitHub Issues — баг-репорты и запросы фич
- GitHub Discussions — общие вопросы и идеи
- Pull Requests — контрибьюты кода
Спасибо за помощь в развитии LangSwitcher!