iOS 14.5 で動作しなくなった古い iOS アプリからデータを抽出する

iOS 14.5 で動作しなくなった古い iOS アプリからデータを抽出する

お恥ずかしい話ですが、2013年に日記のようなアプリを探していて、Momentoに落ち着きました。しばらく使っていたのですが、ある時、有料版へのアップグレードを促されました。新機能はどれも必要なかったので、アップグレードの通知を無視しました。その後もアップグレードを促されることはなかったので、その後も問題なく使い続けていました。どうやら何年もそうだったようです。ところが、AppleがiOS 14.5をリリースした途端、どういうわけかMomento(現在はMomento Classicと呼ばれています)が起動しなくなってしまったのです。困ったものです。(この問題はMomentoに限ったことではありません。iOS 14.5にアップグレードしてから、他のいくつかのアプリでも同様の警告が表示されています。)

Momentoの現行バージョンに料金を支払うことに原則的には反対ではありませんでしたが、現在のアプリはフリーミアムモデルを採用しており、Momento Classicで使用していた機能を利用するには年間16.49ドルのサブスクリプションが必要でした。しかし、サブスクリプションに価値があるかどうかは、実際には問題ではありませんでした。現行バージョンのMomentoをダウンロードし、Momento Classicからデータをインポートしようとしたところ、iOS 14.5でMomento Classicを起動しようとしたときと同じエラーダイアログが表示されました。おそらく、新バージョンは旧バージョンと直接通信してデータをインポートする必要があるのでしょう。

Momento Classicが起動を拒否

Momentoの開発者にメールを送ると、Zendeskから自動返信が来ましたが、データの転送方法については何も説明がありませんでした。データを失うことは特に気になりませんでしたが、条件が同じであれば、データを保持しておいた方が良いと思いました。そこで3週間待った後、自分でできることを探してみることにしました。(Momentoのサポートはようやく最初のメッセージに返信し、Momento Classicのデータのバックアップがあれば(私は持っていませんが)、古いバージョンのiOSを搭載したiPhoneでそのバックアップを使って作業できるかもしれないとだけ提案してくれました。)

古いiPhoneに復元する

最初に考えたのは、iPhone 11 ProのバックアップからMomentoデータを復元し、iOS 12がまだ動作している古いiPhone 6s(Momento Classicが使える状態)に復元できないかということでした。古いiPhoneを消去して再度セットアップし、最初はiCloudバックアップから、次にFinderで作成したローカルバックアップから復元を試みましたが、どちらの場合もiPhoneはiOS 14.5.1へのアップグレードを要求してきました。アップグレードによってMomento Classicが再び動作しなくなると考えたため、どちらもブロックしましたが、結局、データを消去して最初からやり直すしか選択肢がありませんでした。

iPhone 5 を使用していたときに作成した 2014 年のバックアップを復元することができ、探していた Momento データもいくつか含まれていましたが、もちろん 2014 年以降のデータはありませんでした。つまり、理論的には Momento Classic を再び動作させることはできますが、現在のデータでは不可能です。

面白半分で、iOS 14.5.1のiPhone 11 Proのバックアップを、iOS 12.4が動作する古いiPhone 6に復元してみました。予想通りこれも失敗しましたが、うまくいかなかったという事実は覚えておく価値があります。現在のiOSバージョンが動作しない古いiPhoneは、何年前であろうと最後に使用した時点のデータしか保存できないため、バックアップデバイスとしてはあまり役に立ちません。

iOSの古いバージョンに復元できません

iPhoneのバックアップからデータを抽出する

バックアップを操作しているうちに、iPhone 11 Proの最近のバックアップからデータを抽出できるかもしれないと思いつきました。普段はiCloudにのみバックアップしていますが、iOS 14.5.1にアップグレードせずに復元できないか試すため、Macにローカル(暗号化されていない)バックアップを作成していました。そのバックアップは少なくとも最新の状態であり、データの抽出は驚くほど簡単でした。

iExplorerのデモ版をダウンロードして起動し、バックアップエクスプローラーを開いて「momento」で検索してみました。すると、ドキュメントフォルダとライブラリフォルダが表示され、数秒後には、/Library/Application Support/Momento Data/Database.momentodb最近更新された を発見しました。ファイルをデスクトップにドラッグすると、データが復元されました。やったー!(その後、iPhone Backup Extractorも試してみましたが、これも問題なくファイルを抽出できました。iMazingとAnyTransも同様に便利だったと思います。)

iExplorerを使用してファイルを抽出する

次の疑問は、Momentoのデータベースにどんなフォーマットが使われているかでした。ほぼ何でも表示できるBBEditにファイルをドロップすると、すぐに答えが返ってきました。SQLite 3です。また、ファイルをスクロールダウンして、確かにテキストが含まれていることを確認しました。少なくとも、grep検索をいくつか書いてファイルをクリーンアップすれば、テキストを復元できるはずです。

BBEditでSQLiteファイルを見る

でも、もっといい方法はないでしょうか?私はデータベースの専門家ではありませんが、古いTidBITS Publishing Systemと現在のWordPressコンテンツ管理システムでMySQLデータベースをいじる必要があったので、データベース操作に使えるMacアプリがあることは知っていました。Setappを開いて「sqlite」で検索し、どんなアプリがあるのか​​見てみました。まさに宝庫!

Setapp の SQLite 対応アプリ

適当にBaseを選んで起動し、データベースを開いて数分間探し回った後、やっと目的のデータが見つかりました。「ファイル」>「エクスポート」と素早く操作すると、区切りテキストファイルでデータが復元されました。(後で確認したところ、少なくともSQLPro for SQLiteならMomentoデータベースファイルのオープンとエクスポートに同様の機能があるようです。)

というわけで、ようやく、Momento の美しいインターフェースではないにせよ、データが戻ってきました。

バックアップにデータを挿入できますか?

暗号化されていないローカルのiPhoneバックアップからこんなに簡単にデータを抽出できたという事実に、私は考えを巡らせました。Momento Classicの外にデータがあるということは、Momento Classicか新しいバージョンのMomentoにデータを復元する方法があるかもしれない、と。そのためには、Macで暗号化されていないバックアップのデータを変更し、そのバックアップをiPhoneに復元する必要があるでしょう。

端的に言うと、私はiPhoneのローカルバックアップから不可解な名前の必要なファイルを見つけ出し、それを抽出したSQLiteデータベースの同名バージョンに置き換えるという極めて巧妙な手腕を発揮したにもかかわらず、失敗に終わりました。あるテストではデータベースに少し手を加え、別のテストでは2014年版を2021年版に置き換えました。修正版のデータベースを新しいバージョンのMomentoに注入すると、エントリが全くない状態で起動しました。2014年版のデータベースを2021年版に置き換えたところ、バックアップが破損したようです。復元にはサードパーティ製アプリが1つしか含まれておらず、本来含まれているはずの膨大なコレクションが含まれていなかったためです。

バックアップにデータを挿入して復元してもうまくいかないのは、セキュリティ上の脆弱性になりかねないと思うので、当然かもしれません。この記事を公開した後、iPhone Backup Extractorの開発者は、バックアップ内のデータを更新した後に必要なチェックサムを再計算できたはずだと述べました。しかし、実際にはその必要はありませんでした。

幸運な逆転

iPhone 6sがiOS 12からiOS 14.5.1にアップグレードするのをどうやって阻止したか覚えていますか?Momento ClassicがiOS 14.5で動作しなくなったので、そうしたのです。しかし、テストに使えるものを探しているうちに、iOS 14.0を実行しているiPhone 7もクローゼットから引っ張り出してきました。Momento Classicのデータの最新バージョンは入っていませんでしたが、アプリは起動しました。バックアップにデータを挿入できるかどうかのテストの一環として、iPhone 7を使って、変更したiPhone 11 Proのバックアップを復元できると考えました。前回と同様に、iOS 14.5.1にアップグレードする必要性に阻まれましたが、今回は自動的にアップグレードさせました。挿入テストは失敗しましたが、データが入っていないのにMomento Classicが起動したときの私の驚きはご想像の通りです。え、何ですか?

どうやら、iOS 14.5でMomento Classicが起動しなかった原因は、iPhone 11 Proでの動作にも関係していたようです。iPhone 7で試してみると、基盤となる要素が変更され、起動できるようになりました。

iPhone 7のデータを再度消去しました(もう何度繰り返したか分かりませんが)。そして、前夜にiPhone 11 Proで作成したiCloudバックアップから復元しました。動作確認が取れた後、Momento Classicを再度確認してみると、やはり正常に動作し、別のバックアップを作成し、データをテキストファイルとしてエクスポートすることもできました。次に、新しいバージョンのMomentoを開き、古いバージョンのデータをインポートしました。そして最後に、iPhone 7で新しいバージョンからバックアップを作成し、iPhone 11 Proのバージョンに復元することができました。成功です!

iPhone 7で動作するMomento Classic

終わりよければすべてよし、ですが、たとえ一時的に先延ばしにできたとしても、アップグレードは完全には選択の余地がない、とよく言いますよね?(もしそうでないなら、2015年9月4日の「なぜアップグレードすべきか(自分の条件で)」をお読みください。)今回の経験は、アップグレードを後回しにしてはいけない理由の1つです。私はずっと前にアップグレードしないと一度決めたのですが、その後、改めて考えるのを忘れてしまいました。もしかしたら、その後Momentoから警告があったのかもしれません。その記憶はありませんが。いずれにせよ、古いアプリを使っていたことは分かっていたので、今回の出来事は自分のせいだと断言できます。

遅ればせながらのより良い解決策と手がかり

この記事を公開した後(ただし、TidBITS 号に掲載される前。掲載後は変更しません)、Steve Nicolai 氏がコメントを残し、iOS 14.5 で古いアプリが起動しなくなるという同様の問題を、アプリをオフロードして再ロードすることで解決したと述べていました。最初は、アプリを削除して再インストールするという意味だと解釈しました。iPhone 11 Pro で Momento Classic を使って試したところ、彼の言う通りであることが確認できましたが、アプリを削除するとデータも消去されました。データの損失はさておき、これは大きな前進でした。これまでアクセスできなかったアプリが元の状態に戻ったのですから。

するとスティーブが教えてくれました。彼が言っていたのは、容量を節約するためにアプリをオフロードするプロセスのことです。これは「設定」>「一般」>「iPhoneストレージ」で実行できます。画面上部の虫眼鏡アイコンをタップして必要なアプリを検索し、「Appをオフロード」をタップし、プロンプトでもう一度「Appをオフロード」をタップします。iPhoneからアプリが削除されたら、「Appを再インストール」をタップします。NME Digitalアプリでこれを実行したら、無事に復活しました!

アプリをオフロードして再インストールして修正する

この状況では、他のいくつかのアプリではこの方法がうまくいきませんでした。App Storeでダウンロードできなくなっていたからです。どれも私にとって重要ではなかったので、そのまま削除しました。もし有用なデータが含まれていたら、抽出を試みたかもしれません。なぜ古いアプリだけがApp Storeに残っているのかは分かりません。おそらく開発者の責任でしょう。

スティーブの洞察は、iOS 14.5で動作しなくなったMomento Classicなどのアプリが、iPhone 11 Proのバックアップから復元した後、iPhone 7で起動できた理由を説明しています。iOSのバックアップと復元のプロセスにはアプリ自体は含まれず、代わりにApp Storeから最新の(そして機能する)コピーをダウンロードします。(この戦略は、Appleが世界中のiPhoneにインストールされている何百万ものアプリのコピーをバックアップするのではなく、App Storeにアプリのコピーを1つだけ保存すれば済むため、非常に理にかなっています。)

アプリをリロードするだけで起動できるという事実は、実際の問題は破損やiOS 14.5との非互換性ではなく、何らかの証明書の期限切れにあったことを示唆しています。期限切れの証明書を持つアプリを起動しようとすると、iOS 14.5は、新しい証明書が提供されるため、開発者によるアップデートが必要であると表示します。私の推測では、App Store自体が古いアプリを再ダウンロードする際に自動的に新しい証明書を適用しているため、リロードやバックアップからの復元によって影響を受けたアプリが復活すると考えられます。

いずれにせよ、iOS 14.5 で突然動作しなくなった古いアプリの少なくとも一部を復活させるために何をすべきかがわかりました。

Idfte
Contributing writer at Idfte. Passionate about sharing knowledge and keeping readers informed.