2

現在の Swift モジュール内にプライベート データ(現在のセッション チケットまたは設定)を保存する必要があります。単純なアプリの場合、オプションは通常、またはディスク上のファイルであるため、外部からこのデータにアクセスする (少なくとも変更する) ためにNSUserDefaultsmy を使用するアプリは必要ありません。Cocoa Touch Framework理由と開発者は、ここに保存されている私のデータについて単に知らないかもしれません。と同じ状況NSUserDefaults

モジュールには独自のドキュメント フォルダがありますか?

私はちょうど疑問に思っています、それを行う正しい方法は何ですか?

どんな助けでも素晴らしいでしょう、ありがとう!

4

1 に答える 1

2

Swift モジュールはフレームワークを定義します。フレームワークは独自のバンドル (フレームワークに付属する静的アセットに使用できます) を取得しますが、フレームワークがアプリから隠したいデータを保持する場所を定義する API ガイダンスや規則はないと思います。

Apple のFile System Programming Guideを見ると、データを永続化するための「アプリ固有の」場所を定義するセクションしかありません。フレームワーク プログラミング ガイドでは、フレームワークごとに場所を定義することについて何も述べていないようです。

それを考えると、フレームワークコードで行うことは、アプリ固有のストレージの場所を使用するだけですが、フレームワークのすべてのデータを、フレームワークの名前で明確にマークされたサブディレクトリまたは固有のキー文字列の下に配置することです。個性的。したがって、Application Support/ ディレクトリに保存する代わりに、Application Support/MyFramework/ に保存します。

これにより、フレームワークがホスティング アプリケーションのデータを踏みにじることがなくなります。フレームワークが保存しているものを悪意のあるホスティング アプリケーションが検査するのを止めることはできませんが、これは解決するのがはるかに難しい問題です。また、不器用に作成されたホスティング アプリケーションは、ワイルドカードを使用して独自のデータをすべて消去すると、データを消去する可能性がありますが、それが意図されている可能性があります。

アップデート:

コメンターが示唆したように、キーチェーンも妥当な場所です。しかし、キーチェーンのセキュリティ インフラストラクチャは、実際には暗号化によってホスティング アプリからユーザーを保護するわけではありません (私は信じています)。それでも、ホスティング アプリが誤って完全に消去する可能性が低いのは、キー バリュー ストアです。

フレームワークの大量のデータをホスティング アプリから隠そうとする場合は、別の方法として、URLForDirectory(_:inDomain:appropriateForURL:create:)(アプリ固有ではなく) システム全体の一時ディレクトリを検索し、そこにフレームワークのデータを隠すこともできます。 . しかし、これらのディレクトリはすべてシステムによって自由に削除される可能性があると思います。そのため、フレームワークが後で再生成できるデータを保存している場合にのみ機能します。おそらく、キーチェーンのような場所に保存された小さなデータのシードに基づいています。 .

肝心なのは、他の人が使用できるようにフレームワークを出荷している場合、フレームワークを使用しているアプリケーション開発者から何かを隠すことはできないということです。デバッガーをアタッチできます。それからあなたは負けます。(これについて深く掘り下げたい場合は、操作を完全に監視できる敵からデータを保護することを説明する「ホワイト ボックス暗号化」と呼ばれる領域全体があります。これは、最新の DRM システムの基礎です。)

于 2015-09-02T15:17:18.970 に答える