AppleサポートAppおよびYouTubeチャンネルのお知らせ

* iOS向けAppleサポートAppのバージョン5.6.1が公開されました。

YouTube - Apple Japanチャンネルで有用なヒントや使い方を配信中です。

コミュニティでの投票方法と通知設定

コミュニティでの投票方法や通知の設定方法に関する記事を公開しました。

Apple Account(Apple ID)の不正利用を確認する方法

Apple Accountに関するよくある質問についてはこちらのページを、また不正利用を確認する方法についてはこちらのドキュメントをご参照ください。

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

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 Account を使ってご参加ください。