wake-up-neo.com

Einfache Möglichkeit, gespeicherte NSUserDefaults zu sehen?

Gibt es eine Möglichkeit zu sehen, was direkt in NSUserDefaults gespeichert wurde? Ich würde gerne sehen, ob meine Daten korrekt gespeichert wurden. 

206
Ethan

Sie finden die pList-Datei für Ihre App im Simulator unter:

/ users / Ihr Benutzername / Bibliothek/Anwendungssupport/iPhone Simulator/<Sim Version>/Applications

Dieses Verzeichnis verfügt über eine Reihe von GUID benannten Verzeichnissen. Wenn Sie an einigen Apps arbeiten, gibt es einige davon. Sie müssen also Ihre App binär finden:

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

Wechseln Sie dann in das Verzeichnis Library/Preferences im Verzeichnis GUID. So:

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

Sie sollten eine Datei finden, die wie folgt aussieht:

<Bundle Identifier>.foo.pList

Öffnen Sie dies im pList-Editor, und durchsuchen Sie die persistenten Werte nach Herzenslust.

154
RedBlueThing

Sie können alle aktuellen NSUserDefaults im Protokoll ausdrucken:

Nur Schlüssel:

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

Schlüssel und Werte:

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

In Swift können wir Folgendes verwenden:

Swift 3.x & 4.x

Um alle Schlüssel und Werte zu erhalten:

for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
    print("\(key) = \(value) \n")
}

So rufen Sie die vollständige Wörterbuchdarstellung der Benutzervorgaben ab:

print(Array(UserDefaults.standard.dictionaryRepresentation()))

Zum Abrufen der Schlüssel:

// Using dump since the keys are an array of strings.
dump(Array(UserDefaults.standard.dictionaryRepresentation().keys))

Um die Werte abzurufen:

Wir können auch dump hier verwenden, aber dies gibt die vollständige Vererbungshierarchie jedes Elements im Werte-Array zurück. Wenn weitere Informationen zu den Objekten erforderlich sind, verwenden Sie dump, andernfalls fahren Sie mit der normalen Druckanweisung fort.

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

Swift 2.x

So rufen Sie die vollständige Wörterbuchdarstellung der Benutzervorgaben ab:

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

Zum Abrufen der Schlüssel:

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

Um die Werte abzurufen:

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

Sie können die Werte für jeden Schlüssel im Array überprüfen, der von zurückgegeben wird

[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
38
Morion

Manchmal verwende ich den folgenden Ausschnitt, um den Speicherort meiner NSUserDefaults-Datei auszudrucken, wenn er im Simulator ausgeführt wird

 NSArray * path = NSSearchPathForDirectoriesInDomains (
 NSLibraryDirectory, NSUserDomainMask, YES); 
 NSString * Ordner = [Pfad objectAtIndex: 0]; 
 NSLog (@ "Ihre NSUserDefaults werden gespeichert./Voreinstellungen ", Ordner); 

Es gibt den Pfad zum Voreinstellungsordner

Ihre NSUserDefaults werden in diesem Ordner gespeichert:/Benutzer/Schloss/Bibliothek/Anwendungssupport/iPhone Simulator/Benutzer/Anwendungen/BC5056A0-F46B-4AF1-A6DC-3A7DAB984960/Bibliothek/Voreinstellungen

Ihre NSUserDefaults-Datei befindet sich im Ordner "Preferences" und wird nach Ihrem Präfix und Anwendungsnamen benannt, z.

dk.castleandersen.dreamteam.grid.plist

Ich erwarte, dass dasselbe für das tatsächliche Gerät gilt.

21
Niels Castle

In Swift 4.0

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

weil dictionaryRepresentation von NSUserDefaults.standardUserDefaults () [String: AnyObject] zurückgibt

Wir gießen es in eine NSDictionary. Durch das Umschließen in Klammern '()' können wir dann .allKeys oder .allValues ​​aufrufen, genau wie in jedem NSDictionary

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

Verwenden Sie den folgenden Code.

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

Da der Name der Plist-Datei <app-bundle-identifier>.plist lautet, können Sie mit dem Befehl find den Pfad finden. Es kann jedoch sehr lange dauern, wenn Sie Ihren gesamten Computer durchsuchen. Daher müssen Sie einen geeigneten Bereich auswählen, beispielsweise ~/Library/Developer/CoreSimulator für Xcode 6.

beispiel:

find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist

die Ausgabe wird so etwas sein ...

/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

Und von dort aus können Sie den Befehl open verwenden. Wenn Sie iTerm2 verwenden, klicken Sie einfach mit dem Befehl auf den Pfad, um ihn zu öffnen.

4
Hlung

Für Xcode 7

NSUserDefaults standardDefaults werden hier gespeichert:

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

NSUserDefaults für a suite/app group werden hier gespeichert:

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

Ich würde die Verwendung von https://github.com/scinfu/NCSimulatorPlugin empfehlen, da in diesen Tagen alles hinter UUIDs steckt und ein Schmerz zu finden ist. Es ermöglicht den einfachen Zugriff auf die Verzeichnisse Ihrer Simulator-App.

3
user1270061

Ich habe diese Methode basierend auf Morions Vorschlag zur besseren Darstellung erstellt. Verwenden Sie es, indem Sie [self logAllUserDefaults] aufrufen.

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

Suchen Sie nach der Mac-App namens SimPholders2. Es befindet sich in der Menüleiste und listet alle verwendeten Simulatoren auf. Anschließend werden alle Ihre Apps angezeigt. Wählen Sie eines aus und Sie erhalten ein neues Finder-Fenster, das bereits im Verzeichnis der App geöffnet ist. Dadurch ist es sehr einfach, Ihre App und alle Verzeichnisse zu finden. Es ist eine große Zeitersparnis (und ich habe dem Autor gerne gespendet).

2
Jeff

Für MacOS-Apps
Gehen Sie zu: /Users/{User}/Library/Containers/com.{your company}. {Ihre App}/Data/Library/Preferences und öffnen Sie die pList Ihrer App mit Xcode.

1
Uwe

Swift 3

print(UserDefaults.standard.dictionaryRepresentation())
1
Ego Slayer

Ich behalte auf meinem Desktop eine Verknüpfung zum Ordner des Simulators, in dem die Apps gespeichert werden.

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

Nach aktuellem Datum sortiert, gehen Sie in den neuesten App-Ordner Library/Preferences und zeigen Sie die Datei im Plist-Editor an.

1
progrmr

In Swift 2.2

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

druckt den Speicherort des NSUserDefaults-Verzeichnisses in der Xcode-Debug-Konsole aus. Kopieren Sie die Pfadzeichenfolge. Öffnen Sie Ihren Finder, wählen Sie im Menüeintrag Gehe zu Gehe zu Ordner, und fügen Sie die Pfadzeichenfolge ein. Doppelklicken Sie auf die Plist-Datei. Sie sehen den Inhalt in Ihrem Xcode-Editor.

Nur im Simulator arbeiten

Danke @Niels Castle

1
charles.cc.hsu

Simulator App

Dieses Shell-Skript sucht nach dem name der App, ermittelt die bundle id und open-Ordner, die die Plist-Dateien enthalten .

#!/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

Erweiterte Skriptversion

Verwendung: 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

App gefunden Meine App (com.organisation.MyApp) /Benutzer/Organisation/Bibliothek/Entwickler/CoreSimulator/Geräte/3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83/data/Container/Bundle/Anwendung/960A5232-219D-4C46-8CA3-01E259D8DDAD/Meine App.app

UserDefaults für Meine App gefunden

Mac-App

defaults read com.bundleid.app
1
Atika

Sie können jeden Wert, den Sie setzen, mit NSLog wie:

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

Bei OS X-Anwendungen ist es nicht einfacher, die Plist-Datei der Standardanwendung der Anwendung zu finden, sondern das Befehlszeilenprogramm defaults.

NAME

 defaults -- access the Mac OS X user defaults system

&UUML;BERSICHT

 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 }

BESCHREIBUNG

defaults ermöglicht Benutzern das Lesen, Schreiben und Löschen von Mac OS X-Benutzerstandards über eine Befehlszeilen-Shell. Mac OS X-Anwendungen und andere Programme verwenden das Standardsystem, um Benutzereinstellungen und andere .__ aufzuzeichnen. Informationen, die beibehalten werden müssen, wenn die Anwendungen nicht ausgeführt werden (z. B. Standardschriftart für neue -Dokumente oder Position eines Infofensters). Viele dieser Informationen sind über eine Anwendung -.__ verfügbar. Einstellungsfenster des Kations, einige davon jedoch nicht, z. B. die Position des Infofensters. Sie können Zugriff auf diese Informationen mit defaults

Beispiel:

$ defaults read com.Apple.Safari
{
    AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
    AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
    DefaultBrowserPromptingState2 = 4;
    ...
0
weevilgenius

Sie können dies verwenden, um den vollständigen Pfad zu Benutzereinstellungen, Cache und vielen anderen Daten abzurufen

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

0
Ahmed M. Hassan

Nachdem ich die akzeptierte Antwort dieser Frage gelesen hatte, stellte ich dieses einfache Skript zusammen, das die Plist-Dateien öffnet, die vom iOS-Simulator zum Speichern der NSUserDefaults-Voreinstellungen verwendet werden, und obwohl es ein bestimmtes Setup voraussetzt (passt meines perfekt zu mir), kann es als Ausgangspunkt dienen Andere.

$ 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

Beispielplatzierung:

$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh
0
Ernesto MB