当前位置: 华文问答 > 数码

下面这段文字为什么会让 Mac 上的多个软件闪退?

2015-07-17数码

最后一次修改答案:

我并不清楚最新版本的OS X是否修复了这个问题,也不知道这个bug是仅会发生在部分设备上还是如何,所以请不要在评论去反应「并不会崩溃啊」「根本什么都没发生啊」之类的内容,对于这类无聊问题我不会做任何回应。

对于已经确认可能导致严重后果,而且 不主动作死是不会发生 的问题,包括但不限于本文说的bug,iOS系统时间1970年白苹果bug,在高铁上吸烟,拉地铁上的安全拉杆,飞机上宣称自己带了炸药等等,

请不要尝试,

请不要尝试,

请不要尝试。

当然如果你真的去尝试,我无法阻止你。但在你做之前,请做好承担因为你自己作死导致的数据丢失,iPhone变砖,被罚款及刑事拘留的心理准备。

————————————

tl;dr(Too long, Don't read. 嫌太长不想看的,你只需要知道这一节的内容就可以了):

这是 OS X 的 bug ,与 iOS 无关,iPhone / iPad 用户请不要担心受到影响。根据其它回答里反馈的情况,并不是每台设备都会发生。

这段文字导致 App 发生崩溃的条件是:在文本框中出现;Mac 微信 / QQ 的对话中出现;选中。其它零散情况我没有统计。

解决方法请直接拉到回答最后。

————————————

下面是完整答案:

我搞崩溃了一堆软件后(。。), 检查崩溃时的软件调用栈,发现是 DataDectorsCore.framework 模块出了问题。

虽然之前苹果出过几次问题都是因为 CoreText,而 CoreText 是 iOS 和 OS X 公用的组件。不过这次并不是 CoreText 的锅,所以 iOS 用户不会受到影响。

DreamPiggy

提醒,我找了一下苹果的开发文档中关于 NSSpellChecker 和 NSDataDector 的章节,发现 OS X 自带的拼写检测和特殊格式的信息(比如电话号码,时间等)匹配都会触发 DataDectorsCore.framework。

所以可能导致崩溃情况,大致可以分为下面几种:

  1. 文本编辑区域,一般都会触发拼写检测,所以基本都会崩溃;
  2. 非文本编辑区域,一般不会触发拼写检测和特殊格式的信息匹配,所以不会发生崩溃;
  3. 有些软件,如 QQ 微信等,在展示文本时也会进行特殊格式信息匹配,因此会崩溃。需要指出,Safari 虽然不会自动检测,然而在选中文本后还是会发生这个操作,所以请不要随意选中这段文字。此外,在其它软件下选中这段文字并右键点击,也可能导致崩溃。

至于问题发生的具体原因,很抱歉,虽然不是 CoreText 的锅,然而 DataDectorsCore.framework 和 AppKit 也都是闭源的,我没办法知道,只能给苹果提交一个 bug report 了 (

radr://911556

)。不知道还有没有人记得在13年的时候有一个类似的 bug,在 10.8 Mountain Lion 下任意位置输入"File:///"也会导致软件崩溃,我比较了一下那个 bug 的崩溃调用栈,两个问题是因为同一个模块导致的问题。

最后再次警告,请大家 不要 给用 Mac 的小伙伴发这个内容。拿这个整人可能会导致比较严重的结果,比如某些软件一打开就崩溃之类的,而且 截止至2015年7月,没有解决方法 ,除非把出问题的软件的数据删除。

————————————

对于已经被坑而且一打开软件就会崩溃的,比较轻松愉快的解决方案是装个 cleanmymac,在 uninstaller 里选中出问题的软件,点"Application Reset",点下方"Reset",问题解决。

如果没有 cleanmymac 或类似软件,可以尝试如下方法:

  1. 对于微信,删除 ~/Library/Containers/com.tencent.xinWeChat 目录下所有文件
  2. 对于 QQ,删除 ~/Library/Containers/com.tencent.qq 目录下所有文件
  3. 其它软件同理,删除 ~/Library/Containers/ 下对应软件的数据一般可以解决问题

需要注意,不管是用 cleanmymac 还是手动删除文件的方法,该软件的 所有数据都会丢失 ,请千万慎重。

————————————

7月22日补充一个可能的完美解决方案,不会导致你丢失数据。

打开「终端」,输入下面的命令:

sudo mv -v /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/Resources/com.apple.datadetectorscore.cache.full.asia.system /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/Resources/com.apple.datadetectorscore.cache.full.asia.system.backup

回车后需要输入管理员密码,需要注意你输入的密码的时候是不会看到字符反馈的。输入完密码再回车,如果没有提示额外的信息那么崩溃问题应该不会再出现了。如果提示 "Operation not permitted",那很遗憾我也没找到解决的方法。如果其他人有更好的建议欢迎评论区补充。

————————————

感谢

DreamPiggy

的提醒,7月17日修改答案的错误原因部分。

7月17日晚修改,补充了问题解决方案。