2016-09-29 15 views
3

私はiOSアプリを持っていて、いつものようにユーザーの設定をNSUserDefaultsに保存しています(またはSwiftで呼ばれているのでUserDefaults)。NSUserDefaults - アプリのキー名を完全修飾する必要がありますか?

let ud = UserDefaults.standard 
let foo = 123 
ud.set(foo, forKey: "foo") 
ud.integer(forKey: "foo") 

は、キー名は、システムとの競合から守るために、長くなければならない、またはあなたは自分のアプリケーションの名前を考えて安全ですか?

let fooKey = "com.mycompany.myapp.foo" 
// or... 
let fooKey = "foo" 
+0

アプリのユーザーデフォルトは一意です。もちろん、共有されたコンテナを使用して、基本的にキーの名前空間を_explicticly_にしておく必要はありませんが、とにかく_implicitly_に起こります。 – holex

答えて

1

アプリがサンドボックス化され、実際に他のアプリに属する​​UserDefaults値にアクセスすることはできませんので、あなたは、自分のアプリケーションの名前を考えて安全です。 NSUserDefaultsのためのドキュメントから

サンドボックスアプリがアクセスしたり、他の アプリのプリファレンスを変更することはできません。 (あなたが addSuiteNamed使用して別のアプリのドメインを追加した場合たとえば、:。方法を、あなたはそのアプリの 好みにアクセスすることはありません)

別のアプリの設定にアクセスまたは変更しようとすると、 結果が誤っていませんが、 MacOSは、他のアプリケーションの実際の 環境設定ファイルではなく、実際にアプリケーションのコンテナ内にある ファイルを読み書きします。

https://developer.apple.com/reference/foundation/nsuserdefaults?language=objc

5

アプリのユーザーのデフォルト値は、あなただけのアプリで使用されています。ただし、アプリにはユーザーのデフォルト設定が多用されることがあります。これには、独自のコード、第三者によるコード、Appleのフレームワークなどがあります。

キー名の衝突の可能性を避けるために、すべてのサードパーティ製コードで完全修飾キー名を使用する必要があります。 Appleが追加した鍵はすでにこれを実行していると私は信じている。

アプリの開発者として、少なくとも安全のために自分のキーの前に自分のアプリの名前を付けます。完全修飾名は正常ですが、おそらく必要ありません。

"MyApp.foo"を使用します。

+0

さて、サードパーティのライブラリは、私がデバッガでこれを打ち込んだときに他の多くの値が表示される理由を説明します: 'p UserDefaults.standard.dictionaryRepresentation()'。 –

関連する問題