今天是我第一次尝试在新购买的 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
(无效) 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 的行为会很有趣,因此我执行了以下操作:DerivedData
。这会在 mdfind
构建文件夹中找到中间的 .dSYM
包。 DerivedData
bundle 并再次运行 .dSYM
。这次没有结果,即未找到 mdfind
文件夹中的 0x25181231343141 包! .dSYM
包的副本,并将副本放在用户主目录的根目录中。运行 Archives
。这会在复制的 .xcarchive
包中找到 mdfind
子包! 在这一点上,我得出结论,因为
.dSYM
是一个隐藏文件夹,这就是阻止 Spotlight 索引其中内容的原因。这可以通过在 .xcarchive
内创建一个常规文件并搜索它(没有命中),然后将文件移到 ~/Library
之外并再次搜索(1 次命中)来轻松确认。不幸的是,由于以下两个原因,这个理论完全落空了:~/Library
已经隐藏在 10.9 之前的 Mac OS X 版本中,但这从未阻止 Spotlight 索引 ~/Library
文件 0x29191242133411111~/Library
中的内容的全部原因:如果我使用 .dSYM
取消隐藏文件夹,这不会使 Spotlight 看到常规文件。 回到 MB1:我尝试从上面重复第 3 步,即在用户主目录的根目录中复制
~/Library
包,然后运行 chflags nohidden ~/Library
。令人惊讶的是,在 MB1 上,结果与 MB2 不同:.xcarchive
仍然找不到 mdfind
包!在这一点上我放弃并希望得到你的帮助。我的结论是 Mac OS X 10.9 以某种方式对我的问题负责,但对于我的生活,我无法弄清楚为什么会这样。如果有帮助,这里有一些额外的配置细节:
mdfind
)。还安装了 Homebrew。该系统是 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
之外的存档包。我需要重新启动的原因可能是这样的:无论如何,在故障排除期间,我发现您可以通过运行
mdimport -L
来检查事件的 Spotlight 导入器列表(请注意,不同的用户可以同时激活不同的 Spotlight 导入器)。不出所料,重新启动后 uuid.mdimporter
现在被列出,而在重新启动之前它没有。这是我在谷歌搜索后找到的一个有用的 Apple 文档: Troubleshooting Spotlight Importers 。
最终解决方案
配置 Xcode,以便存档文件夹位于
~/Library
之外。在 Xcode 6 中,您可以在“位置”选项卡下的“首选项”对话框中执行此操作。关于xcode - 如何让 Spotlight 为我的 .dSYM 包建立索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20715303/