Există o modalitate de a vedea ce's a fost salvat de la NSUserDefaults
direct? Am'd place să văd dacă-mi datele salvate corect.
Puteți imprima toate actual NSUserDefaults la jurnal:
Doar tastele:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
Chei și valori:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Puteți găsi pList pentru aplicația dvs. în simulator, dacă te duci la:
/users/numele dvs. de utilizator/Library/Application Support/iPhone Simulator/<Versiune Sim>/Aplicații
Acest director are o grămadă de GUID numită directoare. Dacă sunteți de lucru pe câteva aplicații vor fi cateva dintre ele. Deci, ai nevoie pentru a găsi aplicația binar:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Apoi du-te la Library/Preferences director în GUID-ul director. Deci:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
Ar trebui să găsiți un fișier care arata ca:
<Bundle Identifier>.foo.pList
Deschide asta în pList editor și răsfoiți persistat valori de inima ta's de conținut.
print(Array(UserDefaults.standard.dictionaryRepresentation()))
// 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)
Eu folosesc uneori următorul fragment pentru a imprima locația mea NSUserDefaults fișier atunci când rulează în simulator
NSArray *cale = NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, DA); NSString *folder = [cale objectAtIndex:0]; NSLog(@"Ta NSUserDefaults sunt stocate în acest director: %@/Preferințe", dosar);
Randamentele calea către folderul preferințe
NSUserDefaults sunt stocate în acest folder: /Users/castel/Library/Application Support/iPhone Simulator/Utilizator/Aplicații/BC5056A0-F46B-4AF1-A6DC-3A7DAB984960/Library/Preferences
Ta NSUserDefaults fișier se află în folderul preferințe și numit în funcție de prefix și appliation nume de ex.
dk.castleandersen.dreamteam.grid.plist
Mă aștept ca același lucru să fie valabil și pentru dispozitivul real.
În Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
pentru că dictionaryRepresentation de NSUserDefaults.standardUserDefaults() întoarce [Șir : AnyObject]
L-am aruncat într-un NSDictionary
. Apoi, acoperindu-l în paranteză '()' ne va permite pentru a apela .allKeys sau .allValues fel ca pe orice NSDictionary
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Folosiți codul de mai jos.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Pentru Xcode 7
NSUserDefaults standardDefaults sunt stocate aici:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
NSUserDefaults pentru un suite/app-grup sunt stocate aici:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
Mi-ar recomanda utilizarea https://github.com/scinfu/NCSimulatorPlugin pentru că în aceste zile tot ce este în spatele Uuid și sunt o durere pentru a găsi. Acesta permite accesul ușor la simulator app directoare.
Ușor, deoarece plist numele e <app-pachet-de identificare a>.plist
, puteți folosi "găsi" comandă pentru a găsi calea sa. Dar va dura foarte mult timp, dacă veți căuta computer, deci ar trebui să alegeți o bună aplicare, ca `~/Library/Producător/CoreSimulator pentru Xcode 6.
exemplu:
găsiți ~/Library/Producător/CoreSimulator -type f -name com.minunat.app.plist`
producția va fi ceva de genul asta...
/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 de acolo, puteți folosi comanda "open". Sau dacă utilizați iTerm2, doar command-clic pe cale să-l deschidă.
Pentru OS X aplicații, în loc de a găsi aplicația's implicite plist, este mai simplu de a utiliza implicit
command line utility.
NUMELE
implicit-acces la Mac OS X de utilizator implicite de sistem
REZUMAT
setările implicite [-currentHost | -gazdă gazdă] citește [domeniu [cheie]]
setările implicite [-currentHost | -gazdă gazdă] tip citit domeniu cheie
setările implicite [-currentHost | -gazdă gazdă] scrie domeniu { 'plist' | cheie 'valoare' }
setările implicite [-currentHost | -gazdă gazdă] redenumi domeniu old_key new_key
setările implicite [-currentHost | -gazdă gazdă] delete [domeniu [cheie]]
setările implicite [-currentHost | -gazdă gazdă] { domenii | găsi cuvântul | ajutor }
DESCRIERE
implicit
permite utilizatorilor să citească, să scrie și șterge utilizator de Mac OS X implicite dintr-o coajă de linie de comandă. Mac OS X aplicații și alte programe folosesc valorile implicite de sistem pentru a înregistra preferințele utilizatorului și alte informații care trebuie să fie menținută în cazul în care cererile sunt't de funcționare (cum ar fi fontul implicit pentru noi documente, sau poziția de un panou de Informații). Multe dintre aceste informații sunt accesibile printr-o apli- cationi's panoul Preferințe, dar unele dintre e't, cum ar fi poziția din panoul Informații. Puteți accesul la această informație cuimplicit
Exemplu:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Am construit această metodă, bazată pe Morion's sugestie pentru o mai bună prezentare. Folositi-l de asteptare [auto 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]);
}
}
Uita-te pentru Mac app numit SimPholders2. Trăiește în bara de meniu, și listează toate simulatoarele'am folosit, și apoi arată fiecare aplicație. Selectați una și veți obține o nouă fereastră Finder, deja deschisă aplicația's director. Acest lucru îl face foarte ușor de a găsi aplicația și toate l's directoare. L's a economizor de mare de timp (și imediat am donat pentru autor).
I a păstra un shortcut pe desktop-ul meu la simulator's folderul unde se păstrează aplicații, de exemplu:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
Clasificate în funcție de cea mai recentă data, apoi du-te în cea mai recentă aplicație folderul Library/Preferences și vizualiza fișierul în plist editor.
Acest script de shell căutare pentru numele a aplicației, pentru a obține pachet id și deschideți folderele care conțin fișierele 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
Utilizare: iphone-app-folder "App Meu"`
#!/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
Găsit aplicația Aplicația Mea (com.organizarea.MyApp) /Users/organisation/Library/Developer/CoreSimulator/Devices/3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83/data/Containers/Bundle/Application/960A5232-219D-4C46-8CA3-01E259D8DDAD/ Aplicația Mea.app
UserDefaults găsit pentru Aplicația Mea
defaults read com.bundleid.app
În Swift 2.2
let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
va imprima NSUserDefaults's plist fișier locație de folder în Xcode consolă de depanare. Copiați calea șir. Deschideți Finder, selectați-Du-te la Folderul în Du-te meniu, Lipiți calea șir. Faceți dublu clic pe plist. Veți vedea conținutul în Xcode editor.
Numai munca în Simulator
Multumesc @Niels Castel
După ce a citit această întrebare's răspunsul acceptat, am pus împreună acest script simplu care deschide plist fișiere folosit de iOS simulator pentru a stoca `NSUserDefaults preferințele, și în timp ce acesta își asumă un anumit setup (se potriveste al meu perfect), se poate lucra ca un punct de plecare pentru alții.
$ 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
Exemplu de plasare:
$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh