ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

iOS 6の日本語入力に関係したアプリのクラッシュを防ぐ方法(Jailbreak環境限定)

   

ひとりぶろぐのmoyashi (@hitoriblog) です。

何ともiPhone 5使いを不愉快にさせるiOS 6の不具合が発覚しました。

iOS 6に日本語入力に関係した深刻な不具合 | ひとりぶろぐ iOS 6に日本語入力に関係した深刻な不具合 | ひとりぶろぐ

この不具合には、backboarddというiOS 6に常駐しているプログラムが介在。

ロック状態へ移行する際、backboarddが機能。

最前面にあるアプリの日本語入力の学習辞書ファイルへのアクセスを検知し、アクセスをやめさせるため、アプリを強制終了させることによって起きている模様です。


2012-10-10 09:59:48 +0000 backboardd Tweetbot[3512] was suspended with locked system files:
/private/var/mobile/Library/Keyboard/PhraseLearning_ja_JP.db/sqlite.db
2012-10-10 09:59:48 +0000 backboardd Forcing crash report of Tweetbot[3512]...
2012-10-10 09:59:48 +0000 backboardd Finished crash reporting.
2012-10-10 09:59:48 +0000 backboardd Application 'UIKitApplication:com.tapbots.Tweetbot[0x4ce4]' exited abnormally with signal 9: Killed: 9

学習辞書ファイルとは、具体的には以下のファイルのことです。


/var/mobile/Library/Keyboard/PhraseLearning_ja_JP.db/sqlite.db

Homeボタンを押すなどでアプリをバックグラウンドに回すときには、このファイルへのアクセスは解除されるようなのですが、アプリが最前面にあったままロックする場合は、日本語キーボードがこのファイルを開きっぱなしにしているようです。

日本語キーボードがsqlite.dbへのアクセスを終了し終わる前にロック状態への移行処理が始まってしまうといった感じでしょうか。

学習辞書へのアクセスをシャットアウトする

こうしたメカニズムで起きているため、アプリからsqlite.dbへのアクセスができない状態を作ればひとまず回避できそうです。

JailbreakしたiOS 6にSSHでログインし、sqlite.dbがあるフォルダ、PhraseLearning_ja_JP.dbのパーミッションを全閉してみます。


sudo chown root:wheel /var/mobile/Library/Keyboard/PhraseLearning_ja_JP.db/
sudo chmod 000 /var/mobile/Library/Keyboard/PhraseLearning_ja_JP.db/

これでアプリはsqlite.dbにアクセスできなくなり、今回のメカニズムで起きる不具合を回避できるはずです。

僕の環境で不具合再現率100%だった標準アプリのメモで処置前、処置後で比較してみましたが、処置後はクラッシュしなくなりました。

こうすることで新たな不具合を呼び起こす可能性もあります。

当然、学習はできなくなります。

予想外に、登録した単語での変換も、自動修正をオン&住所録への単語登録での変換もできなくなるようでした。

学習辞書へのアクセスが最初で、そこへアクセスできないと次なる単語辞書、住所録へのアクセスもしないって感じなんでしょうね。

だめじゃん。

 - iPhone