首页 文章

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

提问于
浏览
11

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

mdfind "com_apple_xcode_dsym_uuids == *"

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

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


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

  • 检查 ~/Library/Developer/Xcode/Archives 中文件和文件夹的权限(它们都没问题,文件夹为755,文件为644)

  • 运行 mdimport ~/Library/Developer/Xcode/Archives (无效)

  • 在"System Preferences > Spotlight > Privacy"首先添加然后删除 ~/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 build文件夹 . 这些都是来自Mac OS X 10.8天的旧文件,但显然Spotlight在操作系统升级时保持其索引 . 我认为在创建新文件时看看Spotlight的行为会很有趣,所以我做了以下事情:

  • 在MB2上启动Xcode,创建新存档,然后运行 mdfind . 这会在 DerivedData build文件夹中找到中间 .dSYM 包 .

  • 删除中间 .dSYM 包并再次运行 mdfind . 这次没有结果,即找不到 Archives 文件夹中的 .dSYM 包!

  • 制作在步骤1中创建的 .xcarchive 包的副本,并将副本放在用户主目录的根目录中 . 运行 mdfind . 这会在复制的 .xcarchive 包中找到 .dSYM 子包!

在这一点上,我得出结论,因为 ~/Library 是一个隐藏的文件夹,这是阻止Spotlight索引其中的东西的原因 . 这可以通过在 ~/Library 中创建常规文件并搜索它(无命中),然后将文件移到 ~/Library 之外并再次搜索(1次点击)来轻松确认 . 不幸的是,由于两个原因,这个理论在它的鼻子上落空了:

  • ~/Library 已经隐藏在10.9之前的Mac OS X版本中,但这从未阻止Spotlight索引 .dSYM 文件


回到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 回答

  • 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 包 . 尽管如此,它确实 NOT 索引了 ~/Library/Developer/Xcode/Archives 中的包,即使我明确地将 mdimport 指向此文件夹 .

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


    EDIT

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

    • 我正在使用特权管理员用户(A)来安装软件,但我正在使用不同的非特权用户(U)进行正常工作,例如使用Xcode进行开发 .

    • 我在用户A安装Xcode时使用用户U登录

    • 从那时起,我从未重新启动,也没有进行任何登录(我更喜欢让我的机器过夜而不是关机) . 据推测,只有在注销/登录时或重新启动后,才会更新活动Spotlight导入程序列表(可能是通过启动服务) .

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

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


    FINAL SOLUTION

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

相关问题