问题 如何告诉Spotlight索引我的.dSYM包?


今天是我第一次尝试 - 并且失败 - 象征着新购买的MacBook上的崩溃日志(我们称这台机器为MB1)。 MB1预装了Mac OS X 10.9。我跟踪了Spotlight失败的问题,直到Spotlight没有索引我的任何一个 .dSYM 捆绑(没有Spotlight索引,Apple的 symbolicatecrash 脚本无法找到 .dSYM 与崩溃日志匹配的bundle)。我得出结论是因为

mdfind "com_apple_xcode_dsym_uuids == *"

不打印任何东西,虽然我有几个 .xcarchive 捆绑在我的 ~/Library/Developer/Xcode/Archives 文件夹,它们肯定包含 .dSYM 我可以打印UUID的子包 dwarfdump --uuid。我也有几个 .dSYM 捆绑在我项目的构建文件夹中(DerivedData),但它们都没有被编入索引。

因此,简单易行的问题是:如何告诉Spotlight索引我的.dSYM包?


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

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

详细说明:在我切换到MB1之前,我有一台较旧的MacBook(让我们称之为机器MB2),这是我的开发机器。在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的升级安装(之前已安装。

11649
2017-12-21 04:11


起源



答案:


窥视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 bundle位于用户主目录的根目录中。确实如此  索引包中的 ~/Library/Developer/Xcode/Archives但是,即使我明确指出 mdimport 到这个文件夹。

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


编辑

解决方案是重启机器(注销/登录可能已经足够),存档捆绑包以外 ~/Library 现在已正确编入索引。我需要重启的原因可能是:

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

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

这是一个有用的Apple文档,我在谷歌搜索后发现: Spotlight进口商疑难解答


最终解决方案

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


13
2017-12-21 16:12



+1工作。谢谢! - Kalle
最后的解决方案成功了。谢谢! - mbinna
你好我搜索了这么久,甚至去了谷歌搜索结果的第二页;) - teriiehina
亲爱的@herzbube。 。 。我无法得到你的最终解决方案。你会解释一下吗?如何配置xcode。 - Zeebok
@Zeebok编辑了我对Xcode 6(我安装的最新Xcode版本)的回答。我希望在较新版本的Xcode中设置是相同的,如果不是你必须自己解决它。 - herzbube


答案:


窥视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 bundle位于用户主目录的根目录中。确实如此  索引包中的 ~/Library/Developer/Xcode/Archives但是,即使我明确指出 mdimport 到这个文件夹。

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


编辑

解决方案是重启机器(注销/登录可能已经足够),存档捆绑包以外 ~/Library 现在已正确编入索引。我需要重启的原因可能是:

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

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

这是一个有用的Apple文档,我在谷歌搜索后发现: Spotlight进口商疑难解答


最终解决方案

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


13
2017-12-21 16:12



+1工作。谢谢! - Kalle
最后的解决方案成功了。谢谢! - mbinna
你好我搜索了这么久,甚至去了谷歌搜索结果的第二页;) - teriiehina
亲爱的@herzbube。 。 。我无法得到你的最终解决方案。你会解释一下吗?如何配置xcode。 - Zeebok
@Zeebok编辑了我对Xcode 6(我安装的最新Xcode版本)的回答。我希望在较新版本的Xcode中设置是相同的,如果不是你必须自己解决它。 - herzbube