今天是我第一次尝试在新购买的 MacBook(我们称这台机器为 MB1)上表示崩溃日志,但失败了。 MB1 预装了 Mac OS X 10.9。我将失败的符号问题跟踪到 Spotlight 没有索引我的任何 .dSYM 包(没有 Spotlight 索引,Apple 的 symbolicatecrash 脚本无法找到与崩溃日志包匹配的 .dSYM 包)。我得出我的结论是因为

mdfind "com_apple_xcode_dsym_uuids == *"

不打印任何东西,尽管我的 .xcarchive 文件夹中有几个 ~/Library/Developer/Xcode/Archives 包,它们肯定包含 .dSYM 子包,我可以用 0x2518131211 打印其 UUID我的项目的构建文件夹( dwarfdump --uuid )中还有几个 .dSYM 包,但它们都没有被索引。

因此,一个简短而简单的问题是:如何让 Spotlight 为我的 .dSYM 包建立索引?

如果这个简单的问题没有简单的答案,这里是我已经在 MB1 上尝试过的:
  • 检查DerivedData中文件和文件夹的权限(都OK,文件夹755,文件644)
  • 运行 ~/Library/Developer/Xcode/Archives(无效)
  • 在“系统偏好设置 > Spotlight > 隐私”中先添加然后删除 mdimport ~/Library/Developer/Xcode/Archives 文件夹(也没有效果)
  • 检查 ~/Library/Developer/Xcode/Archives 是否为卷启用索引(它是)
  • 删除并重建整个索引 mdutil -s /(可能需要 10-15 分钟,但仍然没有效果)


  • 更详细地说:在我切换到 MB1 之前,我有一台较旧的 MacBook(我们称这台机器为 MB2),它是我的开发机器。在 MB2 上,我从来没有遇到过符号化问题。 MB2 安装了 Mac OS X 10.8,而我仍在积极开发它,但我最近将 MB2 升级到 Mac OS X 10.9。

    今天,在 MB2 上运行 mdutil -E / 仍然给了我很多 mdfind 包,都来自 .dSYM 文件夹和项目的 Archives 构建文件夹这些都是来自 Mac OS X 10.8 天的旧文件,但显然 Spotlight 在操作系统升级时保持其索引。我认为看到创建新文件时 Spotlight 的行为会很有趣,因此我执行了以下操作:
  • 在 MB2 上启动 Xcode,创建一个新存档,然后运行 ​​DerivedData 。这会在 mdfind 构建文件夹中找到中间的 .dSYM 包。
  • 删除中间的 DerivedData bundle 并再次运行 .dSYM。这次没有结果,即未找到 mdfind 文件夹中的 0x25181231343141 包!
  • 制作在步骤 1 中创建的 .dSYM 包的副本,并将副本放在用户主目录的根目录中。运行 Archives 。这会在复制的 .xcarchive 包中找到 mdfind 子包!

  • 在这一点上,我得出结论,因为 .dSYM 是一个隐藏文件夹,这就是阻止 Spotlight 索引其中内容的原因。这可以通过在 .xcarchive 内创建一个常规文件并搜索它(没有命中),然后将文件移到 ~/Library 之外并再次搜索(1 次命中)来轻松确认。不幸的是,由于以下两个原因,这个理论完全落空了:
  • ~/Library 已经隐藏在 10.9 之前的 Mac OS X 版本中,但这从未阻止 Spotlight 索引 ~/Library 文件 0x29191242133411111
  • “隐藏”标志并不是阻止 Spotlight 索引 ~/Library 中的内容的全部原因:如果我使用 .dSYM 取消隐藏文件夹,这不会使 Spotlight 看到常规文件。


  • 回到 MB1:我尝试从上面重复第 3 步,即在用户主目录的根目录中复制 ~/Library 包,然后运行 ​​chflags nohidden ~/Library 。令人惊讶的是,在 MB1 上,结果与 MB2 不同:.xcarchive 仍然找不到 mdfind 包!

    在这一点上我放弃并希望得到你的帮助。我的结论是 Mac OS X 10.9 以某种方式对我的问题负责,但对于我的生活,我无法弄清楚为什么会这样。如果有帮助,这里有一些额外的配置细节:
  • MB1:安装了 Xcode 5.0.2 和 Xcode 4.6,默认为 5.0.2(设置为 mdfind)。还安装了 Homebrew。该系统是 Mac OS X 10.9 的全新安装。
  • MB2: Xcode 4.5、4.6 和 5.0 已安装,4.6 是默认值。还安装了 MacPorts。系统是Mac OS X 10.9的升级安装(之前安装的.
  • 最佳答案

    查看 Xcode 应用程序包会发现以下 Spotlight 导入器:

    caradhras:~ --> find /Applications/Xcode-5.0.2.app -name \*.mdimporter
    /Applications/Xcode-5.0.2.app/Contents/Applications/Application Loader.app/Contents/Library/Spotlight/MZSpotlight.mdimporter
    /Applications/Xcode-5.0.2.app/Contents/Library/Spotlight/uuid.mdimporter
    

    运行这个命令
    mdimport -g /Applications/Xcode-5.0.2.app/Contents/Library/Spotlight/uuid.mdimporter ~
    

    最后索引位于用户主目录根目录中的 .xcarchive 包。尽管如此,它确实 NOT 索引了 ~/Library/Developer/Xcode/Archives 中的包,即使我明确地将 mdimport 指向这个文件夹。

    问题仍然存在:为什么 uuid.mdimporter 没有自动运行?

    编辑

    解决方案是重新启动机器(注销/登录可能就足够了),现在可以正确索引 ~/Library 之外的存档包。我需要重新启动的原因可能是这样的:
  • 我使用特权管理员用户 (A) 安装软件,但我使用不同的非特权用户 (U) 进行正常工作,例如使用 Xcode 进行开发。
  • 在我使用用户 A 安装 Xcode 时,我使用用户 U 登录
  • 从那时起我就再也没有重新启动过,也没有进行过任何登录(我更喜欢让我的机器过夜而不是关闭它)。据推测,只有在注销/登录或重新启动后,事件 Spotlight 导入器的列表才会更新(可能通过启动服务)。

  • 无论如何,在故障排除期间,我发现您可以通过运行 mdimport -L 来检查事件的 Spotlight 导入器列表(请注意,不同的用户可以同时激活不同的 Spotlight 导入器)。不出所料,重新启动后 uuid.mdimporter 现在被列出,而在重新启动之前它没有。

    这是我在谷歌搜索后找到的一个有用的 Apple 文档: Troubleshooting Spotlight Importers

    最终解决方案

    配置 Xcode,以便存档文件夹位于 ~/Library 之外。在 Xcode 6 中,您可以在“位置”选项卡下的“首选项”对话框中执行此操作。

    关于xcode - 如何让 Spotlight 为我的 .dSYM 包建立索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20715303/

    10-13 07:24