235

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

4

24 に答える 24

359

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

キーだけ:

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

キーと値:

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
于 2009-12-04T18:59:37.317 に答える
166

You can find the pList file for your app in the simulator if you go to:

/users/your user name/Library/Application Support/iPhone Simulator/<Sim Version>/Applications

This directory has a bunch of GUID named directories. If you are working on a few apps there will be a few of them. So you need to find your app binary:

find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app

Then go to the Library/Preferences directory in the GUID directory. So:

cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences

You should find a file that looks like:

<Bundle Identifier>.foo.pList

Open this up in the pList editor and browse persisted values to your heart's content.

于 2009-11-04T22:26:55.940 に答える
84

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 を使用できますが、値の配列内の各要素の完全な継承階層が返されます。オブジェクトに関する詳細情報が必要な場合は、dump を使用します。それ以外の場合は、通常の print ステートメントを使用します。

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

スウィフト 2.x

ユーザーデフォルトの完全な辞書表現を取得するには:

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

キーを取得する場合:

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

値を取得するには:

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)
于 2014-12-17T20:47:02.643 に答える
40

によって返される配列内の各キーの値を確認できます。

[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
于 2009-11-04T22:12:30.463 に答える
23

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

NSArray *パス = NSSearchPathForDirectoriesInDomains(
   NSLibraryDirectory、NSUserDomainMask、はい);
NSString *folder = [path objectAtIndex:0];
NSLog(@"あなたの NSUserDefaults はこのフォルダに保存されています: %@/Preferences", フォルダ);

設定フォルダーへのパスが生成されます

NSUserDefaults は次のフォルダーに保存されます: /Users/castle/Library/Application Support/iPhone Simulator/User/Applications/BC5056A0-F46B-4AF1-A6DC-3A7DAB984960/Library/Preferences

NSUserDefaults ファイルは設定フォルダーにあり、プレフィックスとアプリケーション名に従って名前が付けられます。

dk.castleandersen.dreamteam.grid.plist

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

于 2009-11-04T22:37:09.873 に答える
7

Swift 4.0 では

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

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

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

 print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
于 2015-09-21T16:30:26.833 に答える
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を使用することをお勧めします。これにより、シミュレーター アプリのディレクトリに簡単にアクセスできます。

于 2016-11-03T21:06:52.630 に答える
2

私は、より良いプレゼンテーションのために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]);
    }
}
于 2012-04-02T21:47:09.907 に答える
2

スウィフト 2.2 では

let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")

Xcode デバッグ コンソールで NSUserDefaults の plist ファイル フォルダーの場所を出力します。パス文字列をコピーします。Finder を開き、[移動] メニュー項目で [フォルダーに移動] を選択し、パス文字列を貼り付けます。plist ファイルをダブルクリックします。Xcode エディターに内容が表示されます。

シミュレータでのみ動作

ありがとう @Niels Castle

于 2016-04-05T09:16:08.270 に答える
2

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

于 2015-09-19T05:54:58.763 に答える
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

見つかったアプリ マイ アプリ (com.organisation.MyApp) /Users/organisation/Library/Developer/CoreSimulator/Devices/3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83/data/Containers/Bundle/Application/960A5232-219D-4C46-8CA3- 01E259D8DDAD/マイアプリ.app

My App の UserDefaults が見つかりました

Mac アプリ

defaults read com.bundleid.app
于 2015-11-10T17:44:17.543 に答える
1

デスクトップに、アプリを保持するシミュレーターのフォルダーへのショートカットを保持します。

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

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

于 2009-11-05T00:40:19.503 に答える
1

スイフト3

print(UserDefaults.standard.dictionaryRepresentation())
于 2016-10-09T18:02:05.490 に答える
0

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

NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
于 2009-11-04T22:06:39.537 に答える
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 ファイルを直接見て、そこに何が保存されているかを確認できます。

于 2019-10-10T11:26:57.883 に答える
0

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
于 2014-09-02T06:44:24.547 に答える
0

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

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

于 2019-06-15T10:47:50.970 に答える
0

シミュレーターに保存された設定の新しい場所を探しているユーザー向け。これは、保存されている値を見つける場所です。

/Users/vikas/Library/Developer/CoreSimulator/Devices/CE5A0444-BD98-4FEE-A839-92728D6E9895/data/Containers/Data/Application/F7430839-ED2C-408A-8A8E-FE7FFAABA8E2/Library/Preferences

端末から推測するのが難しい大きな識別子があることがわかるので、端末またはファインダーでそれらを検索することをお勧めします。

たとえば、ファイル名は{bundle id}.plistcom.sellerbuddy.online.plistで終わる必要があるため、端末に移動して、以下のようにアプリ バンドル ID を入力して Enter キーを押します。

find ~/Library/Developer/CoreSimulator/Devices -type f -name "com.sellerbuddy.online.plist"

ここに画像の説明を入力

于 2021-03-14T09:57:48.560 に答える