13

今天是我第一次尝试——但失败了——在新买的 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我可以使用其 UUID 打印的子包dwarfdump --uuid.dSYM我的项目的构建文件夹 ( )中也有几个包DerivedData,但它们都没有被索引。

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


如果这个简单的问题没有简单的答案,这是我已经在 MB1 上尝试过的:

  • 检查文件和文件夹的权限~/Library/Developer/Xcode/Archives(他们都OK,文件夹755,文件644)
  • 运行mdimport ~/Library/Developer/Xcode/Archives(没有效果)
  • 在“系统偏好设置 > Spotlight > 隐私”中首先添加然后删除~/Library/Developer/Xcode/Archives文件夹(也没有效果)
  • 检查mdutil -s /是否为卷启用了索引(它是)
  • 擦除并重建整个索引mdutil -E /(可能需要 10-15 分钟,但仍然没有效果)

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

今天,mdfind在 MB2 上运行仍然为我提供了很多.dSYM捆绑包,无论是来自Archives文件夹还是来自项目的DerivedData构建文件夹。这些都是 Mac OS X 10.8 天以来的所有旧文件,但显然 Spotlight 会在操作系统升级期间保留其索引。我认为在创建新文件时查看 Spotlight 的行为会很有趣,所以我做了以下操作:

  1. 在 MB2 上启动 Xcode,创建一个新存档,然后运行mdfind​​. 这会在构建文件夹中找到中间.dSYM包。DerivedData
  2. 删除中间.dSYM包并mdfind再次运行。这次没有结果,即找不到文件夹.dSYM内的包!Archives
  3. 制作.xcarchive在步骤 1 中创建的包的副本并将副本放在用户主目录的根目录中。运行mdfind。这会.dSYM在复制的包中找到子.xcarchive包!

在这一点上,我突然得出结论,因为~/Library它是一个隐藏文件夹,所以这就是阻止 Spotlight 索引其中的内容的原因。这可以通过在内部创建一个常规文件~/Library并搜索它(没有命中),然后将文件移出~/Library并再次搜索(1 个命中)来轻松确认。不幸的是,由于两个原因,这个理论落空了:

  • ~/Library在 10.9 之前的 Mac OS X 版本中已经隐藏,但这从未阻止 Spotlight 索引.dSYM文件
  • “隐藏”标志并不能阻止 Spotlight 索引其中的内容~/Library:如果我使用 取消隐藏文件夹chflags nohidden ~/Library,则不会使常规文件对 Spotlight 可见。

回到 MB1:我尝试从上面重复步骤 3,即.xcarchive在用户主目录的根目录中复制捆绑包,然后运行mdfind​​. 令人惊讶的是,在 MB1 上,结果与 MB2 不同:mdfind仍然找不到任何.dSYM捆绑包!


在这一点上我放弃并希望得到你的帮助。我的结论是 Mac OS X 10.9 在某种程度上对我的问题负责,但对于我的生活,我无法弄清楚为什么会这样。如果有帮助,这里有一些额外的配置细节:

  • MB1:安装了 Xcode 5.0.2 和 Xcode 4.6,默认为 5.0.2(用 设置xcode-select)。还安装了 Homebrew。该系统是 Mac OS X 10.9 的全新安装。
  • MB2:已安装 Xcode 4.5、4.6 和 5.0,默认为 4.6。还安装了 MacPorts。该系统是 Mac OS X 10.9 的升级安装(之前安装的 .
4

1 回答 1

16

查看 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用户主目录根目录中的包。但是,即使我明确指向此文件夹,它也不会索引中的捆绑包。~/Library/Developer/Xcode/Archivesmdimport

问题依然存在:为什么uuid.mdimporter不自动运行?


编辑

解决方案是重新启动机器(注销/登录可能就足够了),~/Library现在可以正确索引外部的存档包。我需要重新启动的原因可能是这样的:

  • 我使用特权管理员用户 (A) 安装软件,但我使用不同的非特权用户 (U) 进行正常工作,例如使用 Xcode 进行开发。
  • 在我使用用户 A 安装 Xcode 时,我使用用户 U 登录
  • 从那时起,我就再也没有重新启动过,也没有进行过任何登录(我更喜欢让我的机器过夜而不是关闭它)。据推测,活动 Spotlight 导入器列表仅在注销/登录或重新启动后更新(可能通过启动服务)。

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

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


最终解决方案

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

于 2013-12-21T16:12:15.357 回答