當前位置: 華文問答 > 數碼

下面這段文字為什麽會讓 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日晚修改,補充了問題解決方案。