保存されたNSUserDefaultsを簡単に確認する方法は?


225

NSUserDefaults直接保存されているものを確認する方法はありますか?データが正しく保存されたかどうかを確認したい。


3
これを使用してアプリディレクトリの場所を取得します。その場所からprint(NSHomeDirectory())に移動し、Library> Preferences> <yourAppsBundleName.plist>に移動します。これはNSUserDefaultsがデータを保存する場所です。
Bobby

回答:


162

以下に移動すると、シミュレーターでアプリのpListファイルを見つけることができます。

/ users / ユーザー名 /ライブラリ/ 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エディターで開いて、永続化された値を確認して内容を確認します。


12
XCodeの後のバージョンでこれが変更されたことがわかりました。現在では、ユーザーではなく、現在のiosバージョン番号の下のディレクトリにあります(例:/ users / your user name / Library / Application Support / iPhone Simulator / 4.3 / Applications
nevster

興味深い...あなたがOCMock / SenTestingKitユニットテストをしてやっている場合と思われNSUserDefaults、それからNSUserDefaults:の.plistファイルに永続化されるのではなく、メモリ内で管理stackoverflow.com/questions/6193597/...
ma11hew28

すでにインストールされているアプリケーションの表示方法を教えてください。クライアントがappstoreからアプリケーションをダウンロードしましたが、何かがおかしいです。NSUserDefaultsファイルをチェックする必要がある
Dejell

あなたのクライアントは-あなたが彼と話すことができ、彼が多少精通している場合-PhoneViewのようなツールを使用して彼の電話ファイルシステムにアクセスし、あなたに送るために電話からファイルをコピーすることができます。
ダニエルシュネラー

13
〜/ライブラリ/開発/ CoreSimulator /デバイス:パスがに変更されました
ブレインウェア

355

現在のすべてのNSUserDefaultsをログに出力できます。

ただキー:

NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);

キーと値:

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

1
THX、これはより効率的です
アコースティック

3
AppleはこのためにXCodeでシンプルなビューアを作成できます。plistビューアのように。しかし、いや、彼らはそれを簡単にしたくありません。
GeneCode

78

Swiftでは、以下を使用できます。

Swift 3.xおよび4.x

すべてのキーと値を取得する場合:

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))

値を取得するには:

ここでもダンプを使用できますが、値配列の各要素の完全な継承階層が返されます。オブジェクトに関する詳細情報が必要な場合は、ダンプを使用してください。それ以外の場合は、通常の印刷ステートメントを続行してください。

// dump(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(Array(UserDefaults.standard.dictionaryRepresentation().values))

Swift 2.x

ユーザーデフォルトの完全なディクショナリ表現を取得する場合:

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation())

キーを取得するには:

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array)

値を取得するには:

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)

40

配列の各キーの値を確認できます。

[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]

3
これは、デバッガーでも次のコマンドを使用して機能しました:(lldb) "po [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]"
Ethan Parker

21

シミュレーターで実行しているときに、次のスニペットを使用してNSUserDefaultsファイルの場所を出力することがあります

NSArray *パス= NSSearchPathForDirectoriesInDomains(
   NSLibraryDirectory、NSUserDomainMask、YES);
NSString * folder = [path objectAtIndex:0];
NSLog(@ "あなたの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

同じことが実際のデバイスにも当てはまると思います。


私はこの反応が好きです。安定していて、うまくいくと思います!
lucianoenrico 2016年

7

簡単です。plistファイル名はなので<app-bundle-identifier>.plistfindコマンドを使用してそのパスを見つけることができます。しかし、コンピューター全体を検索すると非常に時間がかかる~/Library/Developer/CoreSimulatorため、Xcode 6のように適切なスコープを選択する必要があります。

例:

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を使用している場合は、パスをコマンドキーを押しながらクリックして開きます。


7

Swift 4.0の場合

//func dictionaryRepresentation() -> [String : AnyObject]

NSUserDefaults.standardUserDefaults()のdictionaryRepresentationが[String:AnyObject]を返すため

それをにキャストしますNSDictionary。次に、括弧()で囲むことにより、NSDictionaryの場合と同じように、.allKeysまたは.allValuesを呼び出すことができます。

 print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)

6

以下のコードを使用してください。

NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

鮮やかさ!通常、最良の回答が最も短い方法が興味深いです。端末モードでディレクトリをナビゲートする必要はめったにありません。明らかに、バックドアアプローチのようなオタク、おそらく彼らの秘密のハッカーですか?
John

ありがとう、でもあなたを得ることができません。何を言いたいの?
Mr.Javed Multani 2017

5

OS Xアプリケーションではなく、アプリケーションのデフォルトのplistファイルを見つけるのではなく、使用する方が簡単であるdefaultsコマンドラインユーティリティを。

名前

 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;
    ...

4

Xcode 7の場合

NSUserDefaults standardDefaultsはここに保存されます:

/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}

スイート/アプリグループの NSUserDefaults は次の場所に保存されています:

/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist

最近はすべてがUUIDの背後にあり、見つけるのが面倒なので、https://github.com/scinfu/NCSimulatorPluginを使用することをお勧めします。シミュレータアプリディレクトリに簡単にアクセスできます。


2

私はこの方法を、より良いプレゼンテーションのためのモリオンの提案に基づいて作成しました。呼び出して使用してください[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]);
    }
}

2
実際にはデフォルトを「取得」しないため、その関数を「logAllUserDefaults」と呼ぶことをお勧めしますか?
markrickert

そう、@ markrickert。多分それから辞書を作成してそれを返すことができるでしょう。
ジュリアンF.ワイナート

1
または単に.. NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] debugDescription]);(上記のトップ投票の回答とほぼ同じです。)
matsr

2

SimPholders2というMacアプリを探します。これはメニューバーにあり、使用したすべてのシミュレーターをリストしてから、各アプリを表示します。いずれかを選択すると、新しいFinderウィンドウが表示され、すでにアプリのディレクトリが開いています。これにより、アプリとそのすべてのディレクトリを非常に簡単に見つけることができます。それはだ巨大な時間の節約(と私が容易に作者に寄付します)。


2

シミュレーターアプリ

このため、シェルスクリプトの検索名前のアプリの取得バンドル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 / organization / Library / Developer / CoreSimulator / Devices / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / data / Containers / Bundle / Application / 960A5232-219D-4C46-8CA3- 01E259D8DDAD / My App.app

マイアプリのUserDefaultsが見つかりました

Macアプリ

defaults read com.bundleid.app

1

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


これは、xcode 9.4のシミュレーターでuserdefaults plistを見つけるために機能した唯一のソリューションです
anoo_radha '27 / 07/17

1

私はデスクトップにシミュレータのフォルダへのショートカットを保持しています。

/Users/gary/Library/Application Support/iPhone Simulator/User/Applications

最新の日付で並べ替えて、最新のアプリフォルダーLibrary / Preferencesに移動し、plistエディターでファイルを表示します。



1

MacOSアプリの場合
:/Users/{User}/Library/Containers/com.{your company}。{your app} / Data / Library / Preferencesに移動し、Xcodeを使用してアプリのpListを開きます。


1

Swift 5 Xcode 11.2ソリューション

これは、UserDefaultsキー値がplistファイル内にある完全パスです。アプリバンドルIDの.plistファイルをフォローして見つけます。

/ Users / 'Your User Name' / Library / Developer / CoreSimulator / Devices / 4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2 / data / Containers / Data / Application / 56D7CE31-9A8B-4371-9B0F-9604E239423B0 / Library / Preferences

ここで「4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2」はデバイスIDです

そして「56D7CE31-9A8B-4371-9B0F-9604E239423B0」はあなたのアプリケーションIDです

私は通常、Finderで最後に変更された日付でフォルダを並べ替えることでそれらを取得します。そして、最近編集されたフォルダーは私のデバイスIDとアプリIDです。

楽しい!


0

次のように、設定した各値をNSLogできます。

NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);

0

この質問の受け入れられた回答を読んだ後、iOSシミュレーターがNSUserDefaults設定を保存するために使用する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

このスクリプトをフォークまたは手でどうやって食べるのですか?どこに置けばいいの?
Josh

1
@Joshプロジェクトファイルの横に配置する必要があります(この例では、スクリプトの名前はopen-prefs-plist.shです)。私はこれを最新のXcodeでテストしていません。Flexでこの情報を今すぐ確認することをお勧めします。github.com/Flipboard/FLEX
Ernesto MB

0

これを使用して、ユーザー設定、キャッシュ、その他の多くのデータの完全なパスを取得できます

print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))


0

application:didFinishLaunchingWithOptions:AppDelegateのコールバックから設定ディレクトリのパスを出力できます。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
    return true
}

次に、plistファイルを直接見て、そこに何が保存されているかを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.