在XCode中导出文件中的所有警告

Swa*_*nil 10 shell xcode objective-c ios

我编写了显示Xcode警告的脚本.例如TODO警告.该脚本将在每个XCode版本上运行.(我在"运行阶段"选项中编写了脚本).

现在我想收集并将所有这些警告导出到文本文件.有没有办法将所有警告或构建错误导出到文本文件?

Ian*_*Ian 4

(第一部分是你已经做过的事情,或者类似的事情)

输出 TODO 等作为警告。

选择您的项目,单击“构建阶段”选项卡,然后从“编辑器”菜单中选择“添加构建阶段 > 添加运行脚本构建阶段”。

在脚本框中使用如下脚本:

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/"
Run Code Online (Sandbox Code Playgroud)

(由:http://deallocatedobjects.com/posts/show-todos-and-fixmes-as-warnings-in-xcode-4提供)

KEYWORDS则表达式匹配TODO:FIXME:和,但可以进行调整以查找您想要的任何指示符???:!!!:

将此输出保存到文件中。

该脚本当前输出到stdout,由 XCode 获取并解析。要使其也记录到文件,请tee作为脚本的一部分使用(请参阅第 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"
Run Code Online (Sandbox Code Playgroud)

当然,这种方法可以像您喜欢的那样复杂,除了tee写入文件之外,我们还可以扩展脚本来执行我们选择的任何操作:

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 idmillington@example.com < ${SRCROOT}/NOTICES.txt
Run Code Online (Sandbox Code Playgroud)

那通过电子邮件将其发送给我。

我已经确认这适用于 XCode 5.0.2,包括电子邮件。


请注意,这不会将构建中的所有警告导出到文件中,这正是您所要求的。我找不到在 XCode 5.0.2 中自动执行此操作的方法,尽管您可以使用xcodebuild. 在 UI 中,唯一的选择似乎是将日志文本从日志导航器复制到剪贴板。