Ответ 1
(первый бит этого - это то, что вы уже сделали, или что-то в этом роде)
Вывод TODO и т.д. в качестве предупреждений.
Выберите проект, откройте вкладку "Сборка фаз" и выберите "Добавить этап сборки" > "Добавить запуск" Script "Фаза сборки" в меню "Редактор".
В поле Script используйте Script что-то вроде этого:
KEYWORDS="TODO:|FIXME:|\?\?\?:|\!\!\!:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/ warning: \$1/"
(любезно предоставлено: http://deallocatedobjects.com/posts/show-todos-and-fixmes-as-warnings-in-xcode-4)
Регулярное выражение KEYWORDS
соответствует TODO:
, FIXME:
, ???:
и !!!:
, но может быть скорректировано для поиска нужных индикаторов.
Выполнение этого вывода в файл.
Script в настоящее время выводит на stdout
, который подбирается XCode и анализируется. Чтобы сделать это также для входа в файл, используйте tee
как часть Script (см. Конец строки 2 для изменения):
KEYWORDS="TODO:|FIXME:|\?\?\?:|\!\!\!:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/ warning: \$1/" | tee "${SRCROOT}/NOTICES.txt"
Этот подход может быть как можно более сложным, как вам нравится, а также tee
в файл, мы можем увеличить Script, чтобы делать все, что мы выбираем:
KEYWORDS="TODO:|FIXME:|\?\?\?:|\!\!\!:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/ warning: \$1/" | tee ${SRCROOT}/NOTICES.txt
mail -s NOTICES [email protected] < ${SRCROOT}/NOTICES.txt
Это письмо мне.
Я подтвердил, что это работает с XCode 5.0.2, включая отправку по электронной почте.
Обратите внимание, что это не экспортирует все предупреждения из сборки в файл, что строго то, что вы просили. Я не могу найти способ автоматизировать это в XCode 5.0.2, хотя вы можете сделать это с помощью xcodebuild
. Похоже, что в пользовательском интерфейсе единственный вариант - скопировать текст журнала из навигатора журнала в буфер обмена.