Apple の脅威の通知と金銭目当てのスパイウェアへの対策について

NSUserDefaults はどこにファイルを保存するのか?

macOS mojave 10.14.6 / Xcode Version 11.3.1 (11C505) / Objective-C を使用しています.

XcodeのプロジェクトをArchiveで書き出した同OS向けアプリケーション内でNSUserDefaultsクラスのメソッドsetInteger: forKey:を使用して値を書き込みました.反映させるにはメソッドsynchronizeを呼び出す必要があるとのことで、それも実行しました.その戻り値が「YES」だったことから書き込み自体は成功しているはずなのですが、そのplistファイルが見つかりません.

いくつかのサイトを見ていると/Users/ユーザ名/Library/Preferencesの中にバンドルIDと同じ名前のファイル(*.plist)として保存されているとのことですが見つかりません.それとも、またどこか別の場所に違った名前で保存されているのでしょうか?

実際のコードとしては以下のような感じです.

NSUserDefaults *nUserDefaults;
BOOL b;
nUserDefaults = [NSUserDefaults standardUserDefaults];
[nUserDefaults setInteger:15 forKey:@"IVAL"];
b = [nUserDefaults synchronize]; // b = 1


Mac mini, macOS 13.3

投稿日 2023/05/30 00:08

返信
返信: 4

2023/05/30 09:12 品川地蔵 への返信

>SandBoxアプリケーションの場合は

当方もSandBoxアプリケーションです(ファイル「*.entitlements」にて確認済み).


>/Users/ユーザ名/Library/Containers/バンドルID/Data/Library/Preferences/

>です。バンドルIDのところはFinderで見るとアプリケーション名になっています。

こちらの環境では(Finderウインドウのパスバーを見るかぎり)アプリケーション名でなくバンドルIDとなっていますが、環境によって違ってくるのでしょうか.


>追記:synchronizeは実行しなくともプログラム終了時には書き出されます。

そうなのですね、ありがとうございます.ドキュメントには「このメソッドは不必要です.使われるべきではありません」とまで書かれているのですが、だったらとっととDeprecatedにしてくれれば良いのにと思います…….


解決しました.ありがとうございます.

2023/05/30 09:39 light289 への返信

> こちらの環境では(Finderウインドウのパスバーを見るかぎり)アプリケーション名でなくバンドルID

> となっていますが、環境によって違ってくるのでしょうか.


あ、最初にMojaveと書かれていますね。機種のところに13.3となっているのでVenturaかと思っていました。

最近はアプリ名で表示するようになっています。Mojave以降かなと思っていましたがCatalina以降かもしれません。

2023/06/01 00:29 品川地蔵 への返信

>最近はアプリ名で表示するようになっています。Mojave以降かなと思っていましたがCatalina以降かもしれません。

文書化せずにちょくちょくいろいろ変えてくる人たちのすることですから、まあ、そういうこともあるのかなぁ程度にしか思っていませんでした.とはいえ、使わなくなったアプリケーションの初期設定ファイル(今回の場合はNSUserDefaultsが生成するplistファイル)を消したいと思うことは十分ありますし、こういった違いがわかることはとても有益です.

2023/05/30 07:19 light289 への返信

SandBoxアプリケーションの場合は

/Users/ユーザ名/Library/Containers/バンドルID/Data/Library/Preferences/

です。バンドルIDのところはFinderで見るとアプリケーション名になっています。

新規プロジェクト作成する際のデフォルトはSandBox適用です。


追記:synchronizeは実行しなくともプログラム終了時には書き出されます。

NSUserDefaults はどこにファイルを保存するのか?

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple ID を使ってご参加ください。