Łatwy sposób na zobaczenie zapisanych NSUserDefaults?
Czy istnieje sposób, aby zobaczyć, co zostało zapisane NSUserDefaults
bezpośrednio? Chciałbym sprawdzić, czy moje dane są poprawnie zapisane.
19 answers
Możesz znaleźć plik pList dla swojej aplikacji w symulatorze, jeśli przejdziesz do:
/ użytkownicy / Twoja nazwa użytkownika / Biblioteka / Obsługa aplikacji / symulator iPhone ' a /
Ten katalog ma kilka katalogów nazwanych GUID. Jeśli pracujesz nad kilkoma aplikacjami, będzie ich kilka. Więc musisz znaleźć swój plik binarny aplikacji:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Następnie przejdź do katalogu Library / Preferences w katalogu GUID. Więc:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
Powinieneś znaleźć plik, który wygląda jak:
<Bundle Identifier>.foo.pList
Otwórz to w edytorze pList i przeglądaj wartości do treści twojego serca.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-24 15:53:04
Możesz wydrukować wszystkie bieżące NSUserDefaults do dziennika:
Tylko klucze:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
Klucze i wartości:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-25 15:12:41
W języku Swift możemy użyć:-
Swift 3.x i 4.x
Aby uzyskać wszystkie klucze i wartości:
for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
print("\(key) = \(value) \n")
}
Do pobrania pełnej reprezentacji słownikowej domyślnych wartości użytkownika:
print(Array(UserDefaults.standard.dictionaryRepresentation()))
Do pobierania kluczy:
// Using dump since the keys are an array of strings.
dump(Array(UserDefaults.standard.dictionaryRepresentation().keys))
Do pobierania wartości:
Możemy również użyć dump, ale zwróci to kompletną hierarchię dziedziczenia każdego elementu w tablicy wartości. Jeżeli wymagane jest więcej informacji o obiektach, należy użyć dump, w przeciwnym razie wykonaj normalną instrukcję print.
// dump(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(Array(UserDefaults.standard.dictionaryRepresentation().values))
Swift 2.x
Do pobrania pełnej reprezentacji słownikowej domyślnych wartości użytkownika:
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation())
Do pobierania kluczy:
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array)
Do pobierania wartości:
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-26 01:58:21
Możesz sprawdzić wartości dla każdego klucza w tablicy, zwracanego przez
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-20 02:52:53
Czasami używam poniższego fragmentu, aby wydrukować lokalizację mojego pliku NSUserDefaults podczas uruchamiania w symulatorze
NSArray *path = NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, YES); NSString *folder = [path objectAtIndex:0]; NSLog(@"Your NSUserDefaults are stored in this folder: %@/Preferences", folder);
Daje ścieżkę do folderu preferencji
W tym folderze znajdują się: /Users/castle/Library/Application Support/iPhone Simulator/User/Applications/BC5056A0-F46B-4AF1-A6DC-3a7dab984960/Library/Preferences
Twój plik NSUserDefaults znajduje się w folderze preferences i jest nazwany zgodnie z Twoim przedrostek i nazwa aplikacji, np.
dk.castleandersen.dreamteam.grid.plist
Spodziewam się, że to samo będzie prawdziwe dla rzeczywistego urządzenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 07:33:35
Użyj poniższego kodu.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-05 07:12:32
W Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
Ponieważ dictionaryreprezentacja NSUserDefaults.standardUserDefaults () zwraca [String: AnyObject]
Wrzucamy go do NSDictionary
. Następnie otaczając go w nawiasie '() ' pozwoli nam na wywołanie .allKeys or .allValues tak jak na każdym NSDictionary
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-16 11:31:24
Łatwe, ponieważ nazwa pliku plist to <app-bundle-identifier>.plist
, możesz użyć polecenia find
, aby znaleźć jego ścieżkę. Ale zajmie to bardzo długo, jeśli przeszukasz cały komputer, więc musisz wybrać dobry zakres, jak {[2] } dla Xcode 6.
Przykład:
find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist
Wyjście będzie mniej więcej takie...
/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
I stamtąd możesz użyć komendy open
. Lub jeśli używasz iTerm2 , po prostu kliknij polecenie na ścieżce, aby ją otworzyć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-01 12:03:54
Dla Xcode 7
NSUserDefaults standardDefaults są przechowywane tutaj:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
NSUserDefaults dla a suite / app group są przechowywane tutaj:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
Polecam użycie https://github.com/scinfu/NCSimulatorPlugin ponieważ w dzisiejszych czasach wszystko jest za UUIDs i są ból do znalezienia. Umożliwia łatwy dostęp do katalogów aplikacji symulatora.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-03 21:06:52
Zbudowałem tę metodę w oparciu o sugestię Moriona dla lepszej prezentacji. Użyj go przez wywołanie [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]);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-11 10:46:23
Poszukaj aplikacji na Maca o nazwie SimPholders2 . Znajduje się na pasku menu i zawiera listę wszystkich używanych symulatorów, a następnie pokazuje każdą z Twoich aplikacji. Wybierz jeden, a otrzymasz nowe okno Findera, już otwarte do katalogu aplikacji. To sprawia, że bardzo łatwo znaleźć aplikację i wszystkie jego katalogi. Jest to ogromna oszczędność czasu (i chętnie ofiarowałem autorowi).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-19 05:54:58
Simulator App
Ten skrypt powłoki wyszukuje nazwęaplikacji, uzyskuje identyfikator pakietui otwiera foldery zawierające pliki 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
Rozszerzona wersja skryptu
Użycie: 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
Found app My App (com.organizacja.MyApp) /Users/organisation/Library/Developer/CoreSimulator/Devices/3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83/data/Containers/Bundle/Application/960A5232-219D-4C46-8CA3-01E259D8DDAD/Moja aplikacja.app
UserDefaults found for My App
Mac App
defaults read com.bundleid.app
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-09 14:20:21
Możesz zapisać każdą ustawioną wartość, np.:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-02 10:35:26
W Swift 2.2
let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
Wyświetli lokalizację folderu plist pliku NSUserDefaults w konsoli debugowania Xcode. Skopiuj łańcuch ścieżki. Otwórz Finder, wybierz Przejdź do folderu w menu Przejdź, Wklej ciąg ścieżki. Kliknij dwukrotnie plik plist. Zobaczysz zawartość w edytorze Xcode.
Działa tylko w symulatorze
Thanks @ Niels Castle
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-05 09:16:08
Trzymam skrót na pulpicie do folderu symulatora, gdzie przechowuje aplikacje, czyli:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
Posortowane według najnowszej daty, a następnie przejdź do najnowszej Biblioteki folderów aplikacji / preferencji i zobacz plik w edytorze plist.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 07:33:45
Swift 3
print(UserDefaults.standard.dictionaryRepresentation())
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-09 18:02:05
Dla aplikacji MacOS
Przejdź do: / Users / {User} / Library / Containers / com.{Twoja firma}.{Twoja aplikacja} / Dane / Biblioteka / preferencje i otwórz pList aplikacji za pomocą Xcode.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-25 11:48:36
Po przeczytaniu zaakceptowanej odpowiedzi na to pytanie, ułożyłem ten prosty skrypt, który otwiera pliki plist używane przez symulator iOS do przechowywania preferencji NSUserDefaults
, i chociaż zakłada pewną konfigurację (pasuje idealnie do mojej), może działać jako punkt wyjścia dla innych.
$ 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
Przykładowe umieszczenie:
$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-02 06:44:24
Dla aplikacji OS X zamiast znajdować domyślny plik plist aplikacji, prostsze jest użycie narzędzia linii poleceń defaults
.
Nazwa
defaults -- access the Mac OS X user defaults system
SYNOPSIS
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 }
Opis
defaults
umożliwia użytkownikom Odczyt, Zapis i usuwanie domyślnych ustawień użytkownika systemu Mac OS X z powłoki wiersza poleceń. Mac Aplikacje OS X i inne programy używają domyślnego systemu do rejestrowania preferencji użytkownika i innych informacje, które muszą być zachowane, gdy aplikacje nie są uruchomione (takie jak domyślna czcionka dla new dokumenty, lub Położenie panelu informacyjnego). Wiele z tych informacji jest dostępnych za pośrednictwem aplikacji- panel preferencji cation, ale niektóre z nich nie są, np. Położenie panelu Info. Możesz dostęp do tych informacji za pomocądefaults
Przykład:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-06 20:55:44