バッチもん研究所 blog このページをアンテナに追加 RSSフィード Twitter

2014-04-27 iOS7でユーザ辞書がどうにもならない状況になったときに試す復旧方法

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

【はじめに】

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

例)単語:(;o;) よみ:なき で登録していたとして、

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

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

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


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


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

使用するアプリは以下の2つです。

iBackupBot

iBackupBot - iTunes Backup Manager for iPhone, iPod Touch, iPad

PupSQLite

Vector PupSQLiteの詳細情報 : Vector ソフトを探す!

窓の杜 PupSQLite - 窓の杜ライブラリ

→作者のページ 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を探すをオフにしたひとはオンに戻しておきましょう。

ユーザ辞書でお困りの方はお試しください。

(ただし自己責任で試してくださいね)

2013-08-08

[]コマンドプロンプトワイルドカード想定外のものがヒットする

残念ながら締め切りになってしまってOkwaveには回答できませんでした。

MS-DOSワイルドカードの扱いについて 質問者:treelock


Windows 7環境で、MS-DOSのバッチファイルを作っています。

MS-DOS上でのワイルドカードの扱いに疑問がわいたので質問させてください。

C:\直下に

TEST - 01、TEST - 02、…、TEST - 12

というディレクトリを作ったのですが、

dir *04*

コマンド

TEST - 04

TEST - 09

の両方がヒットしてしまいます。

TEST - 04のみヒットすることを期待したのですが、09のほうまでヒットするのはなぜでしょうか。



以下、テキスト貼り付けですが、画面のコピーです。

C:\>dir *04*

ドライブ C のボリューム ラベルがありません。

ボリューム シリアル番号は ****-**** です

C:\ のディレクトリ

2013/08/03 22:40 <DIR> TEST - 09

2013/08/03 22:39 <DIR> TEST - 04

0 個のファイル 0 バイト

MS-DOSのワイルドカードの扱いについて - その他(Windows) | 【OKWAVE】

一番わかりやすいのがこの例。

C:\Users\xxx>cd \

C:\>dir *1
 ドライブ C のボリューム ラベルは ABCDEFG004 です
 ボリューム シリアル番号は 1234-ABCD です

 C:\ のディレクトリ

2013/07/20  13:21    <DIR>          Program Files
               0 個のファイル                   0 バイト

ですかね。それで答えは dir /x ってやるとわかると思います。

2013/07/20  13:21    <DIR>          PROGRA~1     Program Files

8.3型式のファイル名にはまらない(文字数や空白が入ってる)場合に、8.3形式のファイル自動的に割り当てられるんです。

短いファイル名とも言われます。ワイルドカードはこれにも引っかかるんですね。

2011-11-27

[]ファイル名に記号が含まれるか判定する(ファイルドロップ

ツイッター検索でみつけたツイート

あなたの天然記念物さんのツイート

@yrntrlmnmnt: 【挑戦者求む】「記号入りファイル名!@#$%^&()_+~-=`{}[]'.txt」(@は半角に読み替え)という名前のファイルドロップして、ファイル名に記号があることを判定できるバッチファイル存在するか?

普通に"%~nx1"で取り出そうとしたらうまくいかなかった。

イコール "=" が引数の区切りとして扱われてしまうみたい。しかもファイルドロップしたときだけうまくいかないという不思議挙動

そこで "%*" をつかって、for /f "delims=" %%F で取り出したあと、%%~nxF を使う方法にしてみたらうまくファイル名だけ取り出せた。

あとは、findstr で検索すればなんとかなるはず。という感じでつくったのがこれ。

echo off
for /f "delims=" %%F in ('echo %*') do echo "%%~nxF">$$tmp.txt
:pause
findstr /R "[-!@#$%^&()_+~=`{}[\]']" $$tmp.txt
if errorlevel 1 goto notfound
echo 記号がありました
goto end
:notfound
echo 記号はありませんでした

:end
pause
del $$tmp.txt

一通り試してみたけど、うまく動いているかな?

ドロップするファイルのパスによる変化に対応するよう一部修正しました。