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

时间:2013-12-21 04:11:21

标签: xcode macos spotlight symbolicate

今天是我第一次尝试 - 并且失败 - 象征着新购买的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中文件和文件夹的权限(一切正常,文件夹为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。

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

  1. 在MB2上启动Xcode,创建新存档,然后运行mdfind。这会在.dSYM构建文件夹中找到中间DerivedData包。
  2. 删除中间.dSYM捆绑包并再次运行mdfind。这次没有结果,即找不到.dSYM文件夹中的Archives包!
  3. 制作在步骤1中创建的.xcarchive捆绑包的副本,并将副本放在用户主目录的根目录中。运行mdfind。这会在复制的.dSYM包中找到.xcarchive子包!
  4. 此时,我得出的结论是,因为~/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的升级安装(以前已安装。

1 个答案:

答案 0 :(得分:13)

窥视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/Archives指向此文件夹, 也会对mdimport中的包进行索引。

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


修改

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

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

总之,故障排除过程中我发现,您可以通过运行mdimport -L(注意,不同的用户可以在同一时间不同的活跃焦点进口商)检查活动的焦点进口商的名单。不出所料,现在列出了重新启动uuid.mdimporter,而在重启之前它不是。

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


最终解决方案

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