99
バグと修正: iPhone アプリの「循環ループ」問題を解決する

それは、私のiPhoneアプリの一つに現れた厄介な症状から始まりました。そして、やがて「もしも」のシナリオとその対処法という迷路に迷い込んでしまいました。

問題のアプリはGoodiwareのGoodReaderで、全体的に優れたファイルビューアアプリです。GoodReaderの初期ファイルリストから文書を表示すると、画面にコントロールがオーバーレイ表示されます。コントロールには、ファイルリストに戻るための「戻る」ボタンも含まれています。数秒後、オーバーレイは消え、文書を遮るものなく全画面で表示できるようになります。オーバーレイを再び表示するには、画面をタップします。

iPhone用GoodReader

私が抱えていた問題は、特定の文書(特にPDF)をタップしてもオーバーレイが再表示されないことでした。さらに悪いことに、GoodReaderは前回終了した場所から自動的に開くように設定されていました。つまり、GoodReaderを終了して再起動すると、すぐに問題の文書(オーバーレイなし)に戻ってしまいます。この循環ループから抜け出す方法はなく、GoodReaderのファイルリストに再びアクセスする方法もありませんでした。

バックドアソリューション

Goodiwareの開発者たちは、まさにこのようなジレンマを賢く予測していたようです。そこで、裏口の出口を用意しました。解決策は、GoodReaderを終了し、iPhoneの設定アプリを開くことです。そこから下にスクロールしてGoodReaderの項目を選択します。「最後に開いたファイルを再度開く」オプションをオフにする方法があります。これをオフにしてください。これで、次回GoodReaderを起動したときに、問題のある文書にジャンプすることはなくなり、ファイルリストが表示された状態になります。成功です!

これは優れた回避策ですが、まだいくつかの未回答の疑問が残ります。

消えたオーバーレイを再び表示するにはどうすればよいでしょうか?

この回避策は、オーバーレイが再表示されなくなるという初期の症状を解決するものではありません。ただ、すぐに必要になるのを回避するだけです。Goodiwareに連絡してアドバイスを求めました。開発者は、画面の中央を1回タップしてみるように勧めてくれました。オーバーレイは端の方に表示されるため、少し直感に反するように感じました。私はそこを集中してタップしていたのです。それでも試してみたところ、うまくいきました。オーバーレイは再び表示されました。

これは良いことです。しかし、症状にはまだ解決されていない部分があります。1回のタップでオーバーレイが復帰する画面領域は、ドキュメントによって大きく異なります。私のテストでは、PDFファイルの場合のみ、中央の小さな部分しかタップできませんでした。他の種類のドキュメントでは、ほぼどこでもタップできました。そのため、当初PDFファイルには解決策がないと考えていました。

最悪のシナリオはどうでしょうか?

GoodReader(あるいは類似のアプリ)がバックドアの「緊急復旧」設定を提供していなかったらどうなっていたでしょうか?画面中央をタップしてもオーバーレイが戻らなかったらどうなっていたでしょうか?そうなったらどうなるでしょうか?起動するたびにドキュメントが自動的に開くという循環ループから抜け出し、アプリを再び使えるようにするにはどうすればいいのでしょうか?

解決策の一つは、問題のある文書をiPhoneから削除することです。開く文書がなければ、アプリは起動時にデフォルトでファイルリストを表示するはずです。また、アプリ内であらゆる設定にアクセスできるようになります。実際、この方法を試した際にGoodReaderはまさにそのように反応しました。

どうやって文書を削除したのでしょうか?iPhoneをMacに接続し、DiskAidを起動しました。(PhoneViewを使うこともできました。)USB経由で転送したファイルにアクセスしていたので、関連するPDFファイル(メディア -> DCIMフォルダ内)を含むフォルダを簡単に見つけ、削除することができました。もしファイルをワイヤレスで転送していたら、これは不可能だったでしょう(この記事で説明するように、これらのファイルは別の場所に保存されており、デフォルトではこれらのアプリからはアクセスできないためです)。

iPhoneを脱獄すれば、成功率は飛躍的に高まります。iPhone上のどこにフォルダがあっても、同じDiskAidアプリやPhoneViewアプリを使って該当フォルダを見つけることができます。あるいは、Macを使わずにiFile(脱獄後にiPhoneにダウンロードできるFinder風アプリ)を使ってフォルダを探し、書類を削除することも可能です。例えば、iFileを使って「GoodReader」と検索すると、ワイヤレス転送されたファイルの保存場所がすぐに見つかりました。

完全かつ永続的な修正はどうでしょうか?

問題の文書を削除したり、ファイル表示アプリを再び操作できるようになったとしても、問題は解決していない可能性があります。ほとんど、あるいはすべての文書で症状が再発する場合はどうすればよいでしょうか?この場合、自動起動をオフにしても理想的な解決策にはなりません。別の文書を表示するたびに、アプリを終了して再起動する必要があります。この問題を完全に解決するにはどうすればよいでしょうか?

問題の原因がプログラム コードのバグである場合は、開発者に連絡してバグが修正されたアップデートが発行されるのを待つ以外に、おそらく何もできることはありません。

ただし、Macintoshアプリケーションと同様に、問題は設定ファイル(.plist)の破損など、二次的な原因による可能性があります。特に、アプリを初めて使用したときに症状が発生しなかった場合は、この可能性が高くなります。その場合は、アプリの.plistファイルを削除することが解決策です。ジェイルブレイクされたiPhoneをお持ちの場合は、iFileを使用して関連するライブラリ/Preferencesフォルダに移動し、アプリの.plistファイルを削除できます。

それ以外の場合は、iPhoneからアプリを削除して再インストールするのが最善策です。これを行うには、まずホーム画面のアイコンを長押しして×印を表示させ、該当するアプリの×印を選択します。すると、「この操作によりアプリのデータもすべて削除されます」という警告メッセージが表示されます。そのまま進めてください。アプリが削除されるだけでなく、「アプリのデータ」の一部として.plistファイルも削除されます。次に、アプリを再インストールします(iTunes Storeから新しいコピーをダウンロードするか、MacのiTunesライブラリにある既存のコピーを使用できます)。これらのいずれかの方法で、新しく作成されたデフォルトの.plistファイルが作成され、症状が解消されているはずです。