Guide

Контрибьютинг и баг-репорты

Как сообщать об ошибках, предлагать фичи и вносить вклад в LangSwitcher.

LangSwitcher — бесплатный проект с открытым исходным кодом под лицензией MIT. Контрибьюты любого рода приветствуются!

Сообщение об ошибках

Нашли баг? Создайте issue на GitHub.

Что включить в баг-репорт

  1. Описание — что произошло и что ожидалось
  2. Шаги воспроизведения — как вызвать баг
  3. Версия macOS — например, macOS 15.2 Sequoia
  4. Версия LangSwitcher — видна в Настройках → О программе
  5. Раскладки клавиатуры — какие раскладки включены
  6. Журнал преобразований — экспортируйте через Настройки → Журнал → Экспорт 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. Опишите:

  • Что хотите реализовать
  • Почему это будет полезно
  • Идеи по реализации (если есть)

Контрибьютинг кода

Начало работы

  1. Сделайте форк репозитория
  2. Клонируйте форк
  3. Откройте LangSwitcher.xcodeproj в Xcode
  4. Внесите изменения
  5. Запустите тесты:
xcodebuild test \
  -project LangSwitcher.xcodeproj \
  -scheme LangSwitcher \
  -destination 'platform=macOS' \
  CODE_SIGN_IDENTITY="-" \
  CODE_SIGNING_REQUIRED=NO \
  CODE_SIGNING_ALLOWED=NO
  1. Закоммитьте и запушьте
  2. Откройте Pull Request

Правила

  • Все тесты должны проходить перед отправкой PR
  • Новые фичи требуют тестов — добавьте юнит-тесты для нового функционала
  • Следуйте существующему стилю — чистый Swift, без внешних зависимостей
  • Локализация — все новые строки интерфейса через LocalizationManager.shared.t("key"), добавляйте в оба файла Strings_en.swift и Strings_ru.swift

Добавление новой раскладки

  1. Создайте новый LayoutCharacterMap в Sources/Services/LayoutMapper.swift
  2. Добавьте карту символов между новой раскладкой и английской
  3. Зарегистрируйте карту в allMaps
  4. Добавьте тесты в LangSwitcherTests/LayoutMapperTests.swift
  5. Обновите документацию

Сообщество

Спасибо за помощь в развитии LangSwitcher!

Copyright © 2026