Как отметить свои TODO, FIXME и ERROR в Xcode

в 10:05, , рубрики: swift, xcode, xcode tips, разработка под iOS

Этот пост является вольным переводом статьи «How to highlight your TODOs, FIXMEs, & ERRORs in Xcode» за авторством Hector Matos.

Как отметить свои TODO, FIXME и ERROR в Xcode - 1

Это был самый обычный день: я писал код, устранял баги и вообще все было прекрасно. Именно тогда я написал блок кода, к которому нужно было вернуться позже. Это обычный случай, с которым вы тоже вероятно сталкивались: нужно было взаимодействовать с API, который еще не был готов. Я знал общую структуру объекта, который получу по API, но я еще не мог протестировать работу с ним. Как и любой другой разработчик, я написал комментарий, который выглядит так:

Как отметить свои TODO, FIXME и ERROR в Xcode - 2

В этот момент я хотел бы создать предупреждение в Xcode, такое же как мы привыкли делать в Objective-C с помощью директив компилятора:

Как отметить свои TODO, FIXME и ERROR в Xcode - 3

Но увы, так не получилось и я загрустил.

Как человек действия, я сделал то, что и следовало: я действовал. Оказывается, вы можете добавить run-скрипт, чтоб получить необходимый функционал.

RUN SCRIPT BUILD PHASES

Xcode поддерживает внутренние bash-команды или скрипты в различных фазах вашего цикла разработки. Вы можете запустить bash-скрипт в любое время до или после сборки, запуска, тестирования, профилирования, анализа или даже архивирования.

Чтобы сделать это, перейдите в «Build Phases» своего проекта в Xcode, нажмите на "+" слева вверху и затем из выпадающего меню выберите «New Run Script Phase»:

Как отметить свои TODO, FIXME и ERROR в Xcode - 4

Затем вы увидите новый раздел, в котором можете написать bash-скрипт. Если вы уже эксперт по написанию Swift-скриптов после прочтения поста scripting in swift, вы можете просто положить файл со скриптом в корневой каталог проекта и вызвать его из своего нового run-скрипта.

Как отметить свои TODO, FIXME и ERROR в Xcode - 5

# Отмечаем ваши TODO, FIXME и ERROR с помощью «родных» предупреждений Xcode

В тело вашего run-скрипта поместите вот этот замечательный код:
```bash
TAGS=«TODO:|FIXME:»
find "${SRCROOT}" ( -name "*.h" -or -name "*.m" -or -name "*.swift" ) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*$" | perl -p -e «s/($TAGS)/ warning: $1/»
```

С этого момента вы будете видеть предупреждения когда поставите метку TODO: или FIXME: в комментарии! Посмотрите, как работает эта магия:

Как отметить свои TODO, FIXME и ERROR в Xcode - 6

Не будем останавливаться на достигнутом и исправим скрипт таким образом, чтобы подсвечивать ошибки используя //ERROR: в комментариях. Как вы знаете, бывают ситуации, когда мы хотим обратить особое внимание, выделив ошибку с помощью //ERROR:. Чтобы сделать это, измените ваш bash-скрипт вот так:
```bash
TAGS=«TODO:|FIXME:»
ERRORTAG=«ERROR:»
find "${SRCROOT}" ( -name "*.h" -or -name "*.m" -or -name "*.swift" ) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*$|($ERRORTAG).*$" | perl -p -e «s/($TAGS)/ warning: $1/» | perl -p -e «s/($ERRORTAG)/ error: $1/»
```

Не знаю, как вы, но я, наверное — самый забывчивый человек в мире. В конце дня у меня не всегда закончен текущий фрагмент кода и мне нравится использовать //ERROR: чтобы напомнить самому себе над чем работать завтра.

Как отметить свои TODO, FIXME и ERROR в Xcode - 7

Когда моя IDE выглядит так, я сразу чувствую, что необходимо закончить уже начатое. И не переживайте, ошибки генерируемые этим скриптом не препятствуют сборке проекта.

ЗАКЛЮЧЕНИЕ

В своей повседневной работе вы всегда столкнетесь с блоком кода, к которому нужно будет вернуться позже, но сейчас вы вынуждены поставить «заплатку» и двигаться дальше. К сожалению, даже простого //TODO:, //FIXME: или //ERROR: в комментарии, просто недостаточно. Вы удивитесь сколько людей забывают о своих //TODO:, //FIXME: и //ERROR: в проекте. Использование run-скрипта в этой ситуации — отличный способ, чтобы убедиться, что не упустите ничего в своем цикле разработки. Надеюсь, это поможет.

Счастливого кодинга, товарищи ботаники!

П.С. Из комментариев к оригинальному посту извлечена еще одна модификация скрипта, на случай если вам все-таки нужно препятствовать сборке проекта при наличии пометок //ERROR: в коде:
```bash
TAGS=«TODO:|FIXME:»
ERRORTAG=«ERROR:»
OUTPUT=$(find "${SRCROOT}" ( -name "*.h" -or -name "*.m" -or -name "*.swift" ) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*$|($ERRORTAG).*$" | perl -p -e «s/($TAGS)/ warning: $1/» | perl -p -e «s/($ERRORTAG)/ error: $1/»)
ECHO "$OUTPUT"

if [[ $OUTPUT == *" error: "* ]]
then
exit 1
fi
```

Автор: s_suhanov

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js