Gibt es eine Möglichkeit zu sehen, was direkt in NSUserDefaults
gespeichert wurde? Ich würde gerne sehen, ob meine Daten korrekt gespeichert wurden.
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.
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]);
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 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))
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]
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.
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)
Verwenden Sie den folgenden Code.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
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.
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.
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]);
}
}
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).
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.
Swift 3
print(UserDefaults.standard.dictionaryRepresentation())
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.
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
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
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
defaults read com.bundleid.app
Sie können jeden Wert, den Sie setzen, mit NSLog wie:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
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 mitdefaults
Beispiel:
$ defaults read com.Apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Sie können dies verwenden, um den vollständigen Pfad zu Benutzereinstellungen, Cache und vielen anderen Daten abzurufen
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
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