iOS7でユーザ辞書が表示されない状況になったときに試す復旧方法(暫定公開版)

【はじめに】

自分のユーザ辞書はいつからかおかしくなって、以下のような症状がでていました。

  • ちまたにあるユーザ辞書がおかしくなったときの手順(iCloudをオフにする、再起動する、自動修正、スペルチェックをオフにするなど)ではどうにもならない
  • 設定アプリ-[一般]-[キーボード]を選ぶと固まる。しばらくするとユーザ辞書が表示される。
  • ユーザ辞書の編集(削除)するたびに固まる(自分は20秒ぐらい)。
  • ユーザ辞書の読みをいれても候補に出てこない。しばらくして(読み)+1文字を入力すると単語が出てくることがある。

例)単語:(;o;) よみ:なき で登録していたとして、
「なき」と入力しても出てこないが、しばらくして「なきは」と入れると「(;o;)は」とでてくることがある。時間がかかるのと追加する1文字が一定していない。

  • フリック左下の顔文字ボタン ^_^ を押しても顔文字の登録単語が全く出てこない
  • 設定アプリ-[一般]-[情報]-[診断/使用状況]-[診断データと使用状況データ]でclashレポートが文字入力のたびに作られている。kbdプロセスがクラッシュしている。

こんな状態を改善すべくApple サポートコミュニティや色々な人のブログからヒントをいただき以下の手順で何とか復旧しました。

本手順は、iTunesで作成されたバックアップを書き換えるという方法ですので、最悪バックアップからの復元が自分で出来る人を対象としています。とりあえず画面のハードコピーなどを省略して書いていますので、手取り足取りの手順がないと不安な人は少し待ったほうが良いかも。

【この手順で復旧できる可能性について】

  • 過去にiOSバージョンアップなどでバックアップが残っている人
  • 過去のバックアップの時にユーザ辞書が正常でその時点の辞書にもどってもOKな人
  • Windowsユーザ(対象ソフトのMac版もあります。同じ方法でMacでも復旧できた人はぜひ教えてください)

【対象アプリのインストール】

使用するアプリは以下の2つです。
iBackupBot
iBackupBot - iTunes Backup Manager for iPhone, iPod Touch, iPad
PupSQLite
Vector PupSQLiteの詳細情報 : Vector ソフトを探す!
窓の杜 「PupSQLite」SQLiteのデータベースをGUIで操作できる高機能管理ソフト - 窓の杜
→作者のページ Pup's Atelier-Software

iBackupBotでバックアップのなかからユーザ辞書のファイルを取り出します
PupSQLiteではユーザ辞書の中身を確認します。

【まずはバックアップ】

iTunesiPhoneを接続して、iPhoneの「概要」にある「手動でバックアップ/復元」の[今すぐバックアップ]で作業前のバックアップをとっておきます。

【バックアップの確認】

iBackupBotをインストールして起動すると、iTunesでとったバックアップの一覧が表示されます。
過去のバックアップとともに,先ほどとったバックアップも表示されるはずです。
まずは最新のバックアップを選択して右クリックで Duplicateでバックアップのバックアップとります(保存先のフォルダを適当に指定して)。失敗したときこのバックアップのバックアップから復元することになるとおもいます(自分は幸いにも使いませんでした)。
これはかなり時間がかかります(本体容量にもよると思います。自分は3〜40分かかりました)。

Duplicate蛾終わったら、バックアップファイル一覧から先ほどとったバックアップ(日付と時間で判断)の中身をツリー表示から展開していきます。

System Files
  -HomeDomain
   -Library
     -Keyboad
       -CoreDataUbiquitySupport
         -mobile〜XXXXXXXXX(何かのID??)
           -UserDictionary

この中にフォルダが複数あり自分の場合は
3516xxxx-xxxx-xxxx(以下略)
D05exxxx-xxxx-xxxx(以下略)
EB79xxxx-xxxx-xxxx(以下略)
local
の4つでした。
さらにその階層を開いていくと、storeというフォルダに
CloudUserDictionary.sqlite
というファイルが入っています(入っていないフォルダもあるみたい)
とりあえずこのファイルが肥大化しているはずです。
通常ユーザ辞書なら大きくても数十〜数百kBだとおもいますが、自分の場合は18MBとか15MBというものがありました。とりあえずそれぞれのフォルダの
CloudUserDictionary.sqlite
を抽出します。
iBackBotの右側のウインドでCloudUserDictionary.sqliteを選択し、上にあるExportのボタンを押すと保存するフォルダを聞いてきます。自分の場合は4つあったのでそれぞれのフォルダを作って区別がつくように抽出・保存しました。

【抽出したファイルの確認】※省略してもよい

抽出した CloudUserDictionary.sqliteをPupSQLiteで中身を確認します。
自分の場合は一番大きい18MBのファイルは壊れていて表示できませんでした。
(どうやらこれが原因)

【古いバックアップから正常なファイルの抽出】

自分の古いバックアップは2012年12月のものでした。確かこの頃ならユーザ辞書は正常だったはずです。
このときのバックアップはiOS7以前(iOS6.0.1)ですので格納場所が微妙に違います。

System Files
  -HomeDomain
   -Library
     -Keyboad

このKeyboadフォルダ内に CloudUserDictionary.sqlite がありました。56kBでした。
これを同様にExportで別フォルダに保存します。

【抽出した正常な辞書の確認】

先ほどと同様に古いバックアップから抽出したCloudUserDictionary.sqliteの中身をPupSQLiteで確認すると、見慣れた登録内容がずらり。
[ファイル]-[開く]でCloudUserDictionary.sqliteを開いて、ZUSERDICTIONARYENTRYのテーブルを開くとZPHRASEとZSHORTCUTに単語と読みが並んでいます。

この内容で大丈夫なようなので、PupSQLiteを終了させます。

【正常な辞書で上書き】

もう一度iBackupBotに戻り、最新のバックアップのCloudUserDictionary.sqliteを正常だったCloudUserDictionary.sqliteで上書きします。
自分の場合は4つあったstoreフォルダに移動しImportボタンを押して、正常なCloudUserDictionary.sqliteを指定します。上書きの確認ダイアログに対しYesボタンを押します。(Press Yes to replase the file ;Yesボタンを押すと上書きします)
自分は4つあるうちどれが有効なのかわからなかったのですべて同じファイルで上書き(Import)しました。

iTunesで復元】

復元前にiCloudでの書類とデータの同期をOFFにしておきます。
またiCloutd.comで書類とデータのリセットをしておきます。
iCloud:iCloud の書類とデータサービスをリセットする方法 - Apple サポート

iTunesiPhoneを接続して、同期が始まっても中断してたうえで「手動でバックアップ/復元」からバックアップを復元を選びます。
iPhoneを探す”をオフにするダイアログが出た場合は、指示に従って本体のiPhoneを探すをオフにして復元を進めてください。
バックアップから復元のダイアログで先ほど書き換えたバックアップ(最新のもの)を選択します。

あとは復元手順にしたがって復元します。

自分は復元後、写真の同期で時間がかかりましたが、この方法でユーザ辞書が戻ってきました。
iPhoneの設定アプリ-[一般]-[キーボード]を選んでも固まりませんし、一番したもちゃんとユーザ辞書が表示されるようになりました\(^O^)/
登録内容の追加削除もさくさく!(以前は20秒ぐらい固まっていた)

最後にiPhoneを探すをオフにしたひとはオンに戻しておきましょう。

ユーザ辞書でお困りの方はお試しください。
(ただし自己責任で試してくださいね)