export all warnings in file in XCode export all warnings in file in XCode shell shell

export all warnings in file in XCode


(the first bit of this is what you've already done, or something like it)

Outputting TODO, etc, as warnings.

Select your project, click the Build Phases tab, and select 'Add Build Phase > Add Run Script Build Phase' from the 'Editor' menu.

In the script box use a script something like this:

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/"

(courtesy of: http://deallocatedobjects.com/posts/show-todos-and-fixmes-as-warnings-in-xcode-4)

The KEYWORDS regular expression matches TODO:, FIXME:, ???: and !!!:, but could be adjusted to find whichever indicators you want.

Making this output to a file.

The script currently outputs to stdout, which is picked up by XCode and parsed. To make it also log to a file, use tee as part of the script (see the end of line 2 for the change):

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"

This approach can be as complex as you like, of course, as well as teeing to a file, we can augment the script to do anything we choose:

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.txtmail -s NOTICES idmillington@example.com < ${SRCROOT}/NOTICES.txt

That emails it to me.

I've confirmed this works with XCode 5.0.2, including emailing.


Note that this does not export all warnings from the build to a file, which is strictly what you asked. I can't find a way to automate this in XCode 5.0.2, though you can do it with xcodebuild. From within the UI, the only option is to copy the log text from the log navigator to the clipboard, it seems.