Gibt es eine Möglichkeit zu sehen, in was NSUserDefaults
direkt gespeichert wurde ? Ich würde gerne sehen, ob meine Daten korrekt gespeichert wurden.
Gibt es eine Möglichkeit zu sehen, in was NSUserDefaults
direkt gespeichert wurde ? Ich würde gerne sehen, ob meine Daten korrekt gespeichert wurden.
Antworten:
Sie finden die pList-Datei für Ihre App im Simulator unter:
/ users / Ihr Benutzername / Library / Application Support / iPhone Simulator / <Sim-Version> / Applications
Dieses Verzeichnis enthält eine Reihe von GUID-Verzeichnissen. Wenn Sie an einigen Apps arbeiten, gibt es einige davon. Sie müssen also Ihre App-Binärdatei finden:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Wechseln Sie dann in das Verzeichnis Library / Preferences im GUID-Verzeichnis. 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 dauerhafte Werte nach Herzenslust.
NSUserDefaults
, NSUserDefaults
werden diese nicht in einer .plist-Datei gespeichert, sondern im Speicher verwaltet: stackoverflow.com/questions/6193597/…
Sie können alle aktuellen NSUserDefaults in das Protokoll drucken:
Nur Schlüssel:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
Schlüssel und Werte:
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))
Wir können hier auch dump verwenden, aber das gibt die vollständige Vererbungshierarchie jedes Elements im Wertearray zurück. Wenn weitere Informationen zu den Objekten erforderlich sind, verwenden Sie dump, andernfalls fahren Sie mit der normalen print-Anweisung fort.
// 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)
Sie können die Werte für jeden Schlüssel im Array überprüfen, der von zurückgegeben wird
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
Ich verwende manchmal das folgende Snippet, um den Speicherort meiner NSUserDefaults-Datei auszudrucken, wenn ich im Simulator ausgeführt werde
NSArray * path = NSSearchPathForDirectoriesInDomains ( NSLibraryDirectory, NSUserDomainMask, YES); NSString * folder = [Pfad objectAtIndex: 0]; NSLog (@ "Ihre NSUserDefaults werden in diesem Ordner gespeichert:% @ / Preferences", Ordner);
Es gibt den Pfad zum Einstellungsordner an
Ihre NSUserDefaults werden in folgendem Ordner gespeichert: / Users / Castle / Library / Anwendungsunterstützung / iPhone Simulator / User / Applications / BC5056A0-F46B-4AF1-A6DC-3A7DAB984960 / Library / Preferences
Ihre NSUserDefaults-Datei befindet sich im Einstellungsordner und ist nach Ihrem Präfix und Anwendungsnamen benannt, z
dk.castleandersen.dreamteam.grid.plist
Ich erwarte, dass dies auch für das eigentliche Gerät gilt.
Da der Dateiname plist lautet <app-bundle-identifier>.plist
, können Sie find
den Pfad mit dem Befehl ermitteln. Es dauert jedoch sehr lange, wenn Sie Ihren gesamten Computer durchsuchen. Daher müssen Sie einen guten Bereich auswählen, z. B. ~/Library/Developer/CoreSimulator
für Xcode 6.
Beispiel:
find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist
Die Ausgabe wird ungefähr so 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 open
Befehl verwenden. Wenn Sie iTerm2 verwenden , klicken Sie einfach mit der Befehlstaste auf den Pfad, um ihn zu öffnen.
In Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
weil dictionaryRepresentation von NSUserDefaults.standardUserDefaults () [String: AnyObject] zurückgibt
Wir werfen es in eine NSDictionary
. Wenn wir es dann in Klammern '()' umgeben, können wir .allKeys oder .allValues wie in jedem NSDictionary aufrufen
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Verwenden Sie den folgenden Code.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Für OS X-Anwendungen ist es einfacher, das defaults
Befehlszeilenprogramm zu verwenden, als die Standard-Plist-Datei der Anwendung zu finden .
NAME
defaults -- access the Mac OS X user defaults system
ZUSAMMENFASSUNG
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 Informationen aufzuzeichnen, 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 das Einstellungsfeld einer Anwendung zugänglich, einige jedoch nicht, z. B. die Position des Infofelds. Sie können auf diese Informationen mit zugreifendefaults
Beispiel:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Für Xcode 7
NSUserDefaults standardDefaults werden hier gespeichert:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
NSUserDefaults für eine Suite / App-Gruppe werden hier gespeichert:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
Ich würde empfehlen, https://github.com/scinfu/NCSimulatorPlugin zu verwenden, da heutzutage alles hinter UUIDs steckt und schwer zu finden ist. Es ermöglicht den einfachen Zugriff auf Ihre Simulator-App-Verzeichnisse.
Ich habe diese Methode basierend auf Morions Vorschlag für eine bessere Präsentation erstellt. Verwenden Sie es, indem Sie anrufen[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]);
}
}
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] debugDescription]);
(Fast wie in der oben am besten
Suchen Sie nach der Mac-App namens SimPholders2 . Es befindet sich in der Menüleiste und listet alle von Ihnen 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. Dies macht es super einfach, Ihre App und alle ihre Verzeichnisse zu finden. Das spart viel Zeit (und ich habe dem Autor gerne gespendet).
Dieses Shell-Skript sucht nach dem Namen der App, ermittelt die Bundle-ID und öffnet Ordner mit den Plist-Dateien .
#!/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
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
Gefundene App Meine App (com.organisation.MyApp) / Benutzer / Organisation / Bibliothek / Entwickler / CoreSimulator / Geräte / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / Daten / Container / Bundle / Anwendung / 960A5232-219D-4C46-8CA3- 01E259D8DDAD / Meine App.app
UserDefaults für Meine App gefunden
defaults read com.bundleid.app
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 Ordner der plist-Datei von NSUserDefaults in der Xcode-Debug-Konsole aus. Kopieren Sie die Pfadzeichenfolge. Öffnen Sie Ihren Finder, wählen Sie im Menüelement Gehe zu Ordner wechseln und fügen Sie die Pfadzeichenfolge ein. Doppelklicken Sie auf die Plist-Datei. Sie sehen den Inhalt in Ihrem Xcode-Editor.
Arbeiten Sie nur im Simulator
Danke @Niels Castle
Ich behalte auf meinem Desktop eine Verknüpfung zum Ordner des Simulators, in dem die Apps gespeichert sind, z.
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
Sortiert nach dem letzten Datum, gehen Sie einfach in den neuesten App-Ordner Bibliothek / Einstellungen und zeigen Sie die Datei im Plist-Editor an.
Swift 3
print(UserDefaults.standard.dictionaryRepresentation())
Swift 5 Xcode 11.2 Lösung
Dies ist der gesamte Pfad, in dem sich Ihre UserDefaults-Schlüsselwerte in einer Plist-Datei befinden. Folgen Sie und finden Sie Ihre .plist-Datei zur App-Bundle-ID.
/ Benutzer / 'Ihr Benutzername' / Bibliothek / Entwickler / CoreSimulator / Geräte / 4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2 / Daten / Container / Daten / Anwendung / 56D7CE31-9A8B-4371-9B0F-9604E239423B0 / Bibliothek / Einstellungen
Hier ist "4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2" Ihre Geräte-ID
und "56D7CE31-9A8B-4371-9B0F-9604E239423B0" ist Ihre Anwendungs-ID
Normalerweise erhalte ich sie, indem ich Ordner nach dem letzten Änderungsdatum im Finder sortiere. Der zuletzt bearbeitete Ordner ist meine Geräte-ID und App-ID.
Genießen!
Sie können jeden von Ihnen festgelegten Wert wie folgt protokollieren:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
Nachdem ich die akzeptierte Antwort dieser Frage gelesen habe, habe ich dieses einfache Skript zusammengestellt, das die Plist-Dateien öffnet, die vom iOS-Simulator zum Speichern der NSUserDefaults
Einstellungen verwendet werden. Obwohl es ein bestimmtes Setup voraussetzt (passt perfekt zu meinem), kann es als Ausgangspunkt für andere dienen .
$ 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
Sie können dies verwenden, um den vollständigen Pfad zu Benutzereinstellungen, Cache und vielen anderen Daten abzurufen
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
Sie können den Pfad für das Voreinstellungsverzeichnis aus dem application:didFinishLaunchingWithOptions:
Rückruf in Ihrem AppDelegate ausdrucken:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
return true
}
Dann können Sie direkt in die Plist-Datei schauen, um zu sehen, was dort gespeichert ist.