【问题标题】:Xcode using FIXME, TODO, ???,?Xcode 使用 FIXME、TODO、???,?
【发布时间】:2011-08-18 23:18:12
【问题描述】:

我已经开始在 XCode 中使用 FIXMETODO???!!! 标签,但是当标签在函数中时,我发现它无法识别标签很痛苦。标签只能在给定函数之外被识别。

如何在函数中识别这些标签(因为这是错误所在)?

【问题讨论】:

  • 也许是因为我还在 Xcode 3.2.6 上,但那些在函数列表中显示得很好……您是否正在寻找某种缩进来显示函数中的成员资格?
  • 您能否指出您使用的 Xcode 版本以及(如果不是 Obj-C)您正在使用哪种语言编写代码?
  • 如果您还没有请求此功能,我建议您向 Apple 提交错误报告:bugreport.apple.com
  • 这是一个已知问题,正在考虑在 bug 中:Bug ID# 7604687
  • 这在 4.3 中还没有修复,我觉得他们不太在意

标签: xcode tags xcode4 comments todo


【解决方案1】:

在 xcode 4.1 中(不知道这是否适用于以前的版本)我写

#warning TODO: fix this later...

获得编译警告或

#error FIXME: fix now!

得到一个编译错误。

我还将这些添加到代码 sn-p 库中,以便真正轻松地添加待办事项。

【讨论】:

  • 哦,怎么添加到sn-p库中?
  • 不幸的是,如果您在构建设置中设置“将警告显示为错误”,这并不好 - 因为一切都会变成错误!
  • @RaffiKhatchadourian - 要添加一个 sn-p,只需拖动您的源代码。 stackoverflow.com/questions/6784627/…
【解决方案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/"

归功于Benjamin Ragheb

【讨论】:

  • 脚本由 Benjamin Ragheb 找到 here
  • 如果您的代码存储在包含带有空格的目录的文件路径中,则此脚本将失败。例如“/Home/John/iPhone 应用程序/代码”。简单的修复,在第二行,在 ${SRCROOT} 周围加上引号
  • 我将它放在 Xcode 中的运行脚本中,但不知何故它没有接收到我的任何 TODO。知道为什么
  • 将此与项目模板结合起来:stackoverflow.com/questions/5550958/…
  • 为了支持 .swift 文件,应该更改第二行:find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | \
【解决方案3】:

于 2016 年 2 月 2 日编辑

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


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

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

这将在您的项目中搜索所有这些特殊标记。您甚至可以添加任何您想要的标记,例如“//审查:请审查以下代码”。这将是以下搜索字符串:

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

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

【讨论】:

    【解决方案4】:

    FIXME:、TODO:、???: 和 !!!: 适用于 4.3.3 内部和外部的函数。

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

    只是说清楚 - 所有这些工作:

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

    【讨论】:

    • Gatada,你能详细说明你仍然发现的错误吗?
    【解决方案5】:

    这个 Xcode 插件怎么样? --> https://github.com/trawor/XToDo

    【讨论】:

    • 没关系,它在 XCode 5.0.2 中让我崩溃了几次。如果您还没有插件文件夹,则必须在 XCode 5 中手动创建插件文件夹。这是非常基本的,它创建了 4 个默认标记的列表:TODO、FIXME、??? & !!!并将用这些标记的任何内容放入单独的 XCode 窗口中的下拉列表中:但是,我希望能够创建自己的标记,例如“BOOKMARK:”和“WATCH:”并让它们显示出来 -使用插件没有简单的方法。
    • @OverToasty 检查新的提交,fork 做了一些很大的改变
    【解决方案6】:

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

    Xcode 现在支持 //MARK:, //TODO: 和 //FIXME 地标来注释您的代码和 在跳转栏中列出它们。 (14768427)!

    【讨论】:

      【解决方案7】:

      只是提醒一下,但我注意到 TODO: 不适用于任何类型的块。只需将其移至您的方块上方或下方即可。

      【讨论】:

        【解决方案8】:

        这是我用作附加构建阶段的脚本,注意它不包括通过 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/"
        

        在带有 Swift 4 的 xCode 9.3 上运行良好

        【讨论】:

          【解决方案9】:

          如果您想继续开发但需要确保您的应用不会在发布时留下剩余的//FIXME:,您可以执行以下操作作为替代方案。

          在您的某个标题中的某处定义它:

          #if DEBUG
          #define FIXME 0;
          #endif
          

          此定义允许您的应用为调试而构建,但阻止它被存档以供发布。

          现在你可以在任何你会使用评论的地方使用FIXME

          例如:NSNumber *magicNumber = 7; FIXME

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-05
            • 2015-03-25
            • 2011-05-22
            • 2015-07-02
            • 1970-01-01
            • 1970-01-01
            • 2012-01-22
            • 2011-08-28
            相关资源
            最近更新 更多