2009-07-17 8 views
0

私のiPhoneアプリケーションにplistファイルが含まれています。バイナリ形式です(plutilを使用してxmlからバイナリに変換します)。実行時にMD5チェックサム(またはSHA-1)を実行して、内容が期待どおりであることを確認します。残念ながら、私はいつも私が最初に含まれていたものとは異なるチェックサムを取得します。私がMD5の合計を間違って計算していると仮定して1時間以上過ごした後、テストを実行してバイトが実際に同じであることを確認することにしました。彼らはそうではありません。ファイルのサイズは同じですが、バイト30から開始し、ファイル全体(最後の32バイトを除く)では、ファイルの内容はまったく異なります。プロパティリストファイルが署名されているか、別のバイナリ形式にコンパイルされていて、iPhoneアプリに組み込む前に知っている人はいますか?もしそうなら、あなたはそのプロセスの詳細を提供することができますか?plist(プロパティリスト)ファイルmd5sumがiPhoneアプリケーションにコンパイルされると変更されます

ありがとうございます!

答えて

1

デフォルトでは、まっすぐなコピーを行うのではなく、Xcodeは小さなスクリプトを使用してplistファイルを処理してコピーします(実際には、自分のサーバーなどからコンテンツを取得する必要はありません)ターゲットを構築するとき。 Xcodeでターゲットの情報ウィンドウを開き、 "ルール"タブを選択すると、text.plistソースファイルを処理するために、CopyPlistFileという独自のツールが使用されていることがわかります。 plistが有効であることを確認するための基本的なチェックを行い、デフォルトでは変換が実行されていないように見えますが、オプションで別の形式に変換することもできます。

これはplistファイルの変更を引き起こしているのかどうかはわかりませんが、プロジェクト内のplistファイル自体の情報を取得し、そのファイルタイプを "text.plist"から単に"テキスト"。そのため、Xcodeはプロパティリストファイルではなくプレーンテキストファイルとして扱い、CopyPlistFileツールではなくストレートコピーを作成する必要があります。

+0

これは本当に役に立ちました。先端に感謝します。私はplutilを使ってバイナリプロパティリストに切り替えましたが、Xcodeにはまだtext.plist.xmlのタイプがありました。周りを見回すと、file.bplistの次の論理的選択のように見えました。私はそれに切り替えて、私のファイルはもはや変更されていません。不思議なことに(あるいはそうではなく)、変更前はバイナリ形式のままで、正しい内容を持っていました。ちょうど別のmd5チェックサムを使っていました。 – Aaron

0

私はこの質問に理由スタックをポップします。私はあなたの質問に対する答えを知らないが、なぜあなたがそれに時間を費やしているのか不思議だ。

アプリはデジタル署名されているので、なぜPListの完全性が心配ですか?誰かがそれを変更した場合、電子署名がもはや有効ではないため、アプリケーションはインストールされません。

もう1つの理由は、アプリがハッキングされている可能性があるからです。完全に合理的ですが、誰かがアプリをハックする可能性がある場合は、PListを変更して、コード内のチェックサムを変更して実行することもできます。

+0

これは非常に正当な質問です。 MD5合計の理由は、プロパティリストファイルの更新が利用可能かどうかを私のサーバーに送信するのに使用します。合計がサーバー上のものと一致する場合、サーバーはその内容を保持します。そうでない場合、サーバーは新しいコピーを送信し、ファイル全体が正しく受信されたことを確認するために合計が使用されます。だから、私は誰かがそれを変更するかどうかについて心配するのではなく、ちょうど更新を引き出すための基礎と同じです。 私がバンドルしていたバージョンは、アプリケーションに終わったバージョンではなかったので、それは私の最初の混乱につながった。 – Aaron

+1

これは私が把握しようとしている機能です。ファイル上でそのmd5を取得する方法についていくつかのコードを残しておきたいと思います。 –

関連する問題