NSUserDefaults
に保存されているものを直接確認する方法はありますか?データが正しく保存されたかどうかを確認したいのですが。
以下にアクセスすると、シミュレーターでアプリのpListファイルを見つけることができます。
/ users/ユーザー名/Library/Application Support/iPhone Simulator/<Sim Version>/Applications
このディレクトリには、GUIDという名前のディレクトリの束があります。いくつかのアプリで作業している場合、それらのいくつかがあります。そのため、アプリのバイナリを見つける必要があります。
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
次に、GUIDディレクトリのLibrary/Preferencesディレクトリに移動します。そう:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
次のようなファイルが見つかります。
<Bundle Identifier>.foo.pList
これをpListエディターで開き、永続化された値を参照してください。
現在のすべてのNSUserDefaultsをログに出力できます。
キーのみ:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
キーと値:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
print("\(key) = \(value) \n")
}
print(Array(UserDefaults.standard.dictionaryRepresentation()))
// Using dump since the keys are an array of strings.
dump(Array(UserDefaults.standard.dictionaryRepresentation().keys))
ここでもダンプを使用できますが、values配列の各要素の完全な継承階層が返されます。オブジェクトに関する詳細情報が必要な場合は、ダンプを使用します。それ以外の場合は、通常の印刷ステートメントを使用します。
// dump(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation())
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array)
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)
配列内の各キーの値を確認できます。
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
NS
NSArray * path = NSSearchPathForDirectoriesInDomains( NSLibraryDirectory、NSUserDomainMask、YES); NSString * folder = [path objectAtIndex:0]; NSLog(@ "Your NSUserDefaultsこのフォルダーに保存されます:%@/Preferences "、folder);
プリファレンスフォルダーへのパスを生成します
NSUserDefaultsは次のフォルダーに保存されます:/ Users/castle/Library/Application Support/iPhone Simulator/User/Applications/BC5056A0-F46B-4AF1-A6DC-3A7DAB984960/Library/Preferences
NSUserDefaultsファイルは設定フォルダーにあり、プレフィックスとアプリケーション名に従って名前が付けられます。
dk.castleandersen.dreamteam.grid.plist
同じことが実際のデバイスにも当てはまると思います。
Swift 4.0で
//func dictionaryRepresentation() -> [String : AnyObject]
nSUserDefaults.standardUserDefaults()のdictionaryRepresentationが[String:AnyObject]を返すため
NSDictionary
にキャストします。次に、括弧( ')で囲むことにより、NSDictionaryの場合と同じように.allKeysまたは.allValuesを呼び出すことができます。
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
以下のコードを使用してください。
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Plistファイル名は<app-bundle-identifier>.plist
なので、簡単にfind
コマンドを使用してそのパスを見つけることができます。ただし、コンピューター全体を検索する場合は非常に時間がかかるため、Xcode 6の~/Library/Developer/CoreSimulator
などの適切なスコープを選択する必要があります。
例:
find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist
出力は次のようになります...
/Users/hlung/Library/Developer/CoreSimulator/Devices/B61913F6-7D7C-4E45-AE2F-F45220A71823/data/Containers/Data/Application/E4CC51CF-11E5-4168-8A74-6BAE3B89998F/Library/Preferences/com.awesome.app.plist
そしてそこからopen
コマンドを使用できます。または、iTerm2を使用する場合は、コマンドを押しながらパスをクリックして開きます。
Xcode 7の場合
NSUserDefaultsstandardDefaultsはここに保存されます:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
aスイート/アプリグループのNSUserDefaultsは次の場所に保存されます。
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
https://github.com/scinfu/NCSimulatorPlugin を使用することをお勧めします。最近ではすべてがUUIDの背後にあり、見つけるのが苦痛だからです。シミュレーターアプリのディレクトリに簡単にアクセスできます。
OS Xアプリケーションの場合、アプリケーションのデフォルトのplistファイルを見つける代わりに、defaults
コマンドラインユーティリティを使用する方が簡単です。
NAME
defaults -- access the Mac OS X user defaults system
概要
defaults [-currentHost | -Host hostname] read [domain [key]] defaults [-currentHost | -Host hostname] read-type domain key defaults [-currentHost | -Host hostname] write domain { 'plist' | key 'value' } defaults [-currentHost | -Host hostname] rename domain old_key new_key defaults [-currentHost | -Host hostname] delete [domain [key]] defaults [-currentHost | -Host hostname] { domains | find Word | help }
説明
defaults
を使用すると、ユーザーはMac OS Xユーザーのデフォルトをコマンドラインシェルから読み取り、書き込み、削除できます。 Mac OS Xアプリケーションおよびその他のプログラムは、デフォルトシステムを使用して、アプリケーションが実行されていないときに維持する必要があるユーザー設定およびその他の情報(新しいドキュメントのデフォルトフォント、情報パネルの位置など)を記録します。この情報の多くは、アプリケーションの設定パネルからアクセスできますが、情報パネルの位置など、アクセスできないものもあります。defaults
でこの情報にアクセスできます
例:
$ defaults read com.Apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
より良いプレゼンテーションのためのMorionの提案に基づいて、このメソッドを作成しました。 [self logAllUserDefaults]
を呼び出して使用します
- (void) logAllUserDefaults
{
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
NSArray *values = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allValues];
for (int i = 0; i < keys.count; i++) {
NSLog(@"%@: %@", [keys objectAtIndex:i], [values objectAtIndex:i]);
}
}
SimPholders2というMacアプリを探します。メニューバーにあり、使用したすべてのシミュレーターをリストし、各アプリを表示します。いずれかを選択すると、アプリのディレクトリにすでに開いている新しいFinderウィンドウが表示されます。これにより、アプリとそのすべてのディレクトリを簡単に見つけることができます。 膨大な時間の節約です(そして、著者にすぐに寄付しました)。
MacOSアプリの場合
:/Users/{User}/Library/Containers/com.{your company}。{your app}/Data/Library/Preferencesに移動し、XcodeでアプリのpListを開きます。
スイフト3
print(UserDefaults.standard.dictionaryRepresentation())
デスクトップに、アプリを保持するシミュレーターのフォルダーへのショートカットを保持します。
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
最新の日付で並べ替えてから、最新のアプリフォルダーLibrary/Preferencesに移動し、plistエディターでファイルを表示します。
Swift 2.2で
let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
nSUserDefaultsのplistファイルフォルダーの場所をXcodeデバッグコンソールに出力します。パス文字列をコピーします。 Finderを開き、[移動]メニュー項目の[フォルダーに移動]を選択し、パス文字列を貼り付けます。 plistファイルをダブルクリックします。 Xcodeエディターに内容が表示されます。
シミュレーターでのみ動作します
ありがとう@Niels Castle
このシェルスクリプトは、アプリの名前を検索し、バンドルIDを取得し、Plistファイルを含むフォルダーを開くを取得します。
#!/bin/bash
appname="$1"
[ -z $appname ] && read -p "Application name : " appname
apppath=$(find ~/Library/Developer/CoreSimulator/Devices/ -name "$appname.app" -print -quit)
if [[ ! -z $apppath ]]; then
appbundle=$(osascript -e "id of app \"$apppath\"")
find ~/Library/Developer/CoreSimulator/Devices/ -name "$appbundle.plist" -exec bash -c 'open "$(dirname "$1")"' -- {} \;
else
echo "No application found by that name: $appname.app"
fi
使用法:iphone-app-folder "My App"
#!/bin/bash
appname="$1"
[ -z "$appname" ] && read -p "Application name : " appname
apppath=$(find ~/Library/Developer/CoreSimulator/Devices -name "$appname.app" -print -quit)
if [[ ! -z $apppath ]]; then
appbundle=$(osascript -e "id of app \"$apppath\"")
echo "Found app $appname (${appbundle})"
echo -e "\033[1;30m$apppath\033[0m"
plists=$(find ~/Library/Developer/CoreSimulator/Devices -name "$appbundle.plist" -print -quit)
count=$(echo plists | wc -l | sed "s/ //g")
if [[ $count -eq 1 ]] && [[ -f "$plists" ]]; then
echo -e "\033[1;32mUserDefaults found for $appname\033[0m"
echo -e "\033[1;30m$plists\033[0m"
plistutil -i "$plists"
/usr/bin/open $(dirname "$plists")
Elif [[ ${#plists} -gt 0 ]]; then
echo -e "\033[1;32mUserDefaults found for $appname\033[0m"
i=1
while read line; do
echo "[${i}] ${line} "
i=$((i+1))
done < <(echo "$plists")
echo
read -p "Select defaults to read: [1-${count}] " choice
plist=$(echo ${plists} | sed -n "${choice}p")
plistutil -i "$plist"
/usr/bin/open $(dirname "$plist")
else
echo -e "\033[31mNo UserDefaults plist found for $appname\033[0m"
fi
else
echo -e "\033[31mNo application found by that name: $appname.app\033[0m"
fi
見つかったアプリMy App(com.organisation.MyApp)/ Users/organisation/Library/Developer/CoreSimulator/Devices/3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83/data/Containers/Bundle/Application/960A5232-219D-4C46-8CA3- 01E259D8DDAD/My App.app
My AppのUserDefaultsが見つかりました
defaults read com.bundleid.app
次のように、設定した各値をNSLogできます。
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
これを使用して、ユーザー設定、キャッシュ、その他の多くのデータの完全なパスを取得できます。
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
この質問の受け入れられた答えを読んだ後、NSUserDefaults
の設定を保存するためにiOSシミュレーターによって使用されるplistファイルを開くこの簡単なスクリプトをまとめました。他の人にとっての出発点。
$ cat open-prefs-plist.sh
#!/bin/sh
# The project name based on the workspace path, e.g. "MyProject" from "./MyProject.xcworkspace"
WORKSPACE_NAME=$(echo `find . -name *.xcworkspace -type d -exec basename {} \;` | cut -d'.' -f1)
SIMULATOR_PATH="$HOME/Library/Application Support/iPhone Simulator"
# The App's bundle ID taken from its info plist, e.g "com.myproject" from "./MyProject/MyProject-Info.plist"
BUNDLE_ID=`/usr/libexec/PlistBuddy -c Print:CFBundleIdentifier $WORKSPACE_NAME/$WORKSPACE_NAME"-Info.plist"`
# Open all plist files in the simulator path that match the app's bundle ID
# normally one per iOS version
find "$SIMULATOR_PATH" -name $BUNDLE_ID".plist" -type f -print0 \
| while IFS= read -r -d '' PLIST; do
echo $PLIST
open "$PLIST"
done
配置例:
$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh