Xcode使用FIXME、TODO、???、!等标记吗?

42

我开始在XCode中使用 FIXMETODO???!!! 标签,但发现在函数内部使用时无法被识别,只有在函数外部才能被识别。

我该如何让这些标签在函数内部被识别(因为这里才是出现bug的地方)?


1
也许是因为我还在使用Xcode 3.2.6,但这些函数在函数列表中显示得很好...你是想要一些缩进来显示函数的成员关系吗? - Richard
1
请问您使用的是哪个版本的Xcode,以及(如果不是Objective-C)您正在使用哪种编程语言进行编写? - jscs
4
这是一个已知问题,正在Bug编号为7604687的问题中进行考虑。 - Ben
1
这在4.3版本中仍未得到修复,我认为他们并不太关心。 - Aram Kocharyan
相关:https://dev59.com/Z2Qn5IYBdhLWcg3wVF7i - Steve Melnikoff
显示剩余3条评论
9个回答

51
在Xcode 4.1中(不知道在之前的版本中是否有效),我写下了:
#warning TODO: fix this later...

获取编译警告或

#error FIXME: fix now!

获取编译错误。

我还将它们添加到代码片段库中,以使添加待办事项变得非常容易。


哦,你怎么将它添加到代码片段库中? - khatchad
2
不幸的是,如果您在构建设置中设置“将警告显示为错误”,那么这种方法就不起作用了 - 因为所有警告都会变成错误! - Ashley Mills
@RaffiKhatchadourian - 要添加代码片段,只需拖动您的源代码即可。https://dev59.com/eVnUa4cB1Zd3GeqPa31l - Basil Bourque

37
一个解决方法是使用一个构建脚本,将它们标记为警告:
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/"

感谢Benjamin Ragheb提供的帮助。


11
此脚本由Benjamin Ragheb编写,可在此处找到:http://www.benzado.com/blog/post/329/make-xcode-nag-you-about-unfinished-todos。 - KDaker
3
如果你的代码存储在路径中包含有空格的目录中,这个脚本将会失败。例如 "/Home/John/iPhone Apps/Code"。简单的解决方法是,在第二行的 ${SRCROOT} 周围加上引号。 - john
我把这个放在Xcode的运行脚本中,但它似乎没有捕捉到我的任何TODO。你有什么想法为什么会这样? - khatchad
将此与项目模板结合使用:https://dev59.com/mlXTa4cB1Zd3GeqP5-fV - basvk
1
为了支持.swift文件,需要更改第二行代码: find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | \ - art-divin
如果您想要排除 Carthage 组件,可以使用以下命令:find "${SRCROOT}" ( -name ".swift" ) -not -path "${SRCROOT}/Carthage/" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*$" | perl -p -e "s/($TAGS)/ warning: $1/" - HixField

20

编辑于 2016-02-02

Xcode现在支持使用//MARK:、//TODO:和//FIXME:标记来注释您的代码,并将它们列在跳转栏中。


要查找这些特殊标记(以及实际上您指定的任何标记),您可以使用搜索导航器,输入以下字符串,然后选择“在项目中,匹配正则表达式“...”,忽略大小写”:

(//FIXME|//!!!|//\?\?\?|//TODO)

这将会在你的项目中搜索所有这些特殊标记。你可以添加任何你想要的标记,例如"//REVIEW: 请审核以下代码"。那么这将成为以下搜索字符串:

(//FIXME|//!!!|//\?\?\?|//TODO|//REVIEW)

我在我的工作区创建了一个选项卡,其中搜索导航器始终打开,并填充着这个字符串。不幸的是,XCode有时会从搜索框中删除此字符串,因此您需要在需要时随时准备好复制并粘贴它。


8

FIXME:, TODO:, ???: 和 !!!: 在4.3.3中在函数内外都可用。

您可以在双斜杠前后使用任意数量的空格,但必须使用大写,并在标签后加上冒号。

只是为了明确 - 所有这些都可以使用:

//          FIXME: This works.
  //TODO: This works.
    //                  !!!: Working.
// // //???: Works as well.

Gatada,你能详细说明你仍然发现的错误吗? - Ben

4

没关系,在XCode 5.0.2中它曾经崩溃过几次。如果您还没有插件文件夹,您必须在XCode 5中手动创建它。它非常基础,它创建了一个包含4个默认标记的列表:TODO、FIXME、???和!!!,并将任何标记为这些标记的内容放入单独的XCode窗口中的下拉列表中。但是,我想能够创建自己的标记,比如“BOOKMARK:”和“WATCH:”,并让它们也显示出来——使用该插件没有简单的方法来实现这一点。 - OverToasty
@OverToasty,请查看新的提交,分支进行了一些很棒的更改。 - Travis Worm

4

xCode 6 beta 4应该支持MARK、TODO和FIXME标记。

Xcode现在支持//MARK:、//TODO:和//FIXME:标记来注释你的代码,并将它们列在跳转栏中。(14768427)!


2

提醒一下,我注意到TODO:在任何块中都不起作用。请将其移到块的上方或下方。


0
如果您想继续开发,但需要确保您的应用程序不会发布带有剩余//FIXME:的代码,您可以采取以下替代方法。
在您的头文件中的某个位置定义如下内容:
#if DEBUG
#define FIXME 0;
#endif

这个定义允许你的应用程序进行调试构建,但防止其被归档以供发布。

现在你可以在任何你原本会使用注释的地方使用 FIXME

例如:NSNumber *magicNumber = 7; FIXME


0
这是我用作附加构建阶段的脚本,注意它排除了通过Carthage引入的文件(如果不是“你”的代码,获取这些文件非常麻烦):
TAGS="WARNING:|TODO:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -not -path "${SRCROOT}/Carthage/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"

在 xCode 9.3 上使用 Swift 4 很好用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接