Is er een manier om te zien wat er is opgeslagen in NSUserDefaults
rechtstreeks? Ik zou graag willen zien of mijn gegevens correct zijn opgeslagen.
Antwoord 1, Autoriteit 100%
U kunt alle huidige NSUSERDefaults op het logboek afdrukken:
Sleutels:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
Sleutels en waarden:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Antwoord 2, Autoriteit 46%
U kunt het Plist-bestand voor uw app in de simulator vinden als u naartoe gaat:
/ Gebruikers / Uw gebruikersnaam / Library / Application Support / iPhone Simulator / & LT; SIM-versie & GT; / Toepassingen
Deze map heeft een stel GUID met de naam Mappen. Als u aan een paar apps werkt, zullen er enkele van hen zijn. Dus je moet je app binary vinden:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Ga vervolgens naar de directory van de bibliotheek / voorkeuren in de GUID-directory. Dus:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
U moet een bestand vinden dat eruit ziet:
<Bundle Identifier>.foo.pList
Open dit in de PLIS-editor en blader door Hardende waarden aan de inhoud van uw hart.
Antwoord 3, Autoriteit 23%
In Swift kunnen we het volgende gebruiken: –
SWIFT 3.X & AMP; 4.x
voor het verkrijgen van alle sleutels en amp; Waarden:
for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
print("\(key) = \(value) \n")
}
Voor het ophalen van de volledige woordenboekrepresentatie van gebruikersinstellingen:
print(Array(UserDefaults.standard.dictionaryRepresentation()))
Voor het ophalen van de toetsen:
// Using dump since the keys are an array of strings.
dump(Array(UserDefaults.standard.dictionaryRepresentation().keys))
Voor het ophalen van de waarden:
We kunnen hier ook dumpen gebruiken, maar die de volledige erfgoedhiërarchie van elk element in de waardenarray retourneert. Als er meer informatie over de objecten is vereist, gebruikt u Dump, anders gaat u verder met de normale afdrukverklaring.
// dump(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(Array(UserDefaults.standard.dictionaryRepresentation().values))
SWIFT 2.X
Voor het ophalen van de volledige woordenboekrepresentatie van gebruikersinstellingen:
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation())
Voor het ophalen van de toetsen:
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array)
Voor het ophalen van de waarden:
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)
Antwoord 4, Autoriteit 11%
U kunt de waarden voor elke toets in de array controleren, geretourneerd door
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
Antwoord 5, Autoriteit 6%
Ik gebruik soms het volgende fragment om de locatie van mijn NSUSERDefaults-bestand af te drukken bij het uitvoeren van de simulator
NSArray *path = NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, YES); NSString *map = [pad objectAtIndex:0]; NSLog(@"Uw NSUserDefaults worden opgeslagen in deze map: %@/Preferences", map);
Het levert het pad op naar de map met voorkeuren
Uw NSUserDefaults worden opgeslagen in deze map: /Users/castle/Library/Application Support/iPhone Simulator/User/Applications/BC5056A0-F46B-4AF1-A6DC-3A7DAB984960/Library/Preferences
Uw NSUserDefaults-bestand bevindt zich in de map Voorkeuren en heeft een naam op basis van uw prefix en toepassingsnaam, bijvoorbeeld
dk.castleandersen.dreamteam.grid.plist
Ik verwacht dat hetzelfde geldt voor het daadwerkelijke apparaat.
Antwoord 6, autoriteit 2%
Eenvoudig, aangezien de plist-bestandsnaam <app-bundle-identifier>.plist
is, kunt u de opdracht find
gebruiken om het pad te vinden. Maar het duurt erg lang als je je hele computer doorzoekt, dus je moet een goed bereik kiezen, zoals ~/Library/Developer/CoreSimulator
voor Xcode 6.
voorbeeld:
find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist
de uitvoer zal ongeveer zo zijn…
/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
En vanaf daar kun je de opdracht open
gebruiken. Of als u iTerm2gebruikt, klikt u met de commandotoets op het pad om het te openen.
Antwoord 7, autoriteit 2%
Gebruik onderstaande code.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Antwoord 8, autoriteit 2%
In Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
omdat woordenboekweergave van NSUserDefaults.standardUserDefaults() [String : AnyObject]
retourneert
We hebben het in een NSDictionary
gegoten. Door het dan tussen haakjes te plaatsen ‘()’ kunnen we .allKeys of .allValues aanroepen, net zoals u zou doen op elke NSDictionary
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Antwoord 9
Voor OS X-toepassingenis het eenvoudiger om het opdrachtregelhulpprogramma defaults
te gebruiken in plaats van het standaard plist-bestand van de toepassing te vinden.
NAAM
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 }
BESCHRIJVING
Met
defaults
kunnen gebruikers de standaardinstellingen van Mac OS X-gebruikers lezen, schrijven en verwijderen vanuit een opdrachtregelshell. Mac
OS X-applicaties en andere programma’s gebruiken het standaardsysteem om gebruikersvoorkeuren en andere
informatie die moet worden bijgehouden wanneer de toepassingen niet actief zijn (zoals standaardlettertype voor nieuwe
documenten of de positie van een infopaneel). Veel van deze informatie is toegankelijk via een applicatie
cation’s Voorkeuren-paneel, maar sommige niet, zoals de positie van het Info-paneel. Jij kan
toegang tot deze informatie metdefaults
Voorbeeld:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Antwoord 10
Voor Xcode 7
NSUserDefaults standardDefaultsworden hier opgeslagen:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
NSUserDefaults voor een suite/app-groepworden hier opgeslagen:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
Ik zou aanraden om https://github.com/scinfu/NCSimulatorPluginte gebruiken omdat tegenwoordig alles zit achter UUID’s en is lastig te vinden. Het biedt gemakkelijke toegang tot de mappen van uw simulator-app.
Antwoord 11
Ik heb deze methode gebouwd op basis van de suggestie van Morion voor een betere presentatie. Gebruik het door [self logAllUserDefaults]
. te bellen
- (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]);
}
}
Antwoord 12
Zoek naar de Mac-app met de naam SimPholders2. Het staat in de menubalk en geeft een overzicht van alle simulators die je hebt gebruikt, en toont vervolgens al je apps. Selecteer er een en je krijgt een nieuw Finder-venster, al geopend in de map van de app. Dit maakt het super eenvoudig om uw app en al zijn mappen te vinden. Het is een enorme tijdsbesparing(en ik schonk het graag aan de auteur).
Antwoord 13
In Swift 2.2
let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
print de locatie van de plist-bestandsmap van NSUserDefaults af in de Xcode-foutopsporingsconsole. Kopieer de padtekenreeks. Open uw Finder, selecteer Ga naar map in het menu-item Ga, plak de padtekenreeks. Dubbelklik op het plist-bestand. U ziet de inhoud in uw Xcode-editor.
Werken alleen in Simulator
Bedankt @Niels Castle
Antwoord 14
Simulator-app
Dit shellscript zoekt naar de naamvan de app, verkrijg de bundel-iden open mappen met de Plist-bestanden.
#!/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
Uitgebreide scriptversie
Gebruik: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
vond app mijn app (com.organisation.myApp)
/ Gebruikers / Organisatie / Bibliotheek / Ontwikkelaar / Coresimulator / Apparaten / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / Gegevens / Containers / Bundel / Aanvraag / 960A5232-219D-4C46-8CA3-01E259D8DDAD / MY APP.APPUserDefaults gevonden voor mijn app
Mac-app
defaults read com.bundleid.app
Antwoord 15
Swift 5 Xcode 11.2 Oplossing
Dit is het hele pad waar de sleutelwaarden van uw gebruikerssefaults in een PLIS-bestand staan. Volg en vind uw App Bundle Identifier. Platbaar bestand.
/ Gebruikers / ‘Uw gebruikersnaam’ / Library / Developer / Coresimulator / Inrichtingen / 4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2 / Gegevens / Containers / Gegevens / Aanvraag / 56D7CE31-9A8B-4371-9B0F-9604E239423B0 / Library / Voorkeuren
hier “4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2” is uw apparaat-ID
en “56D7CE31-9A8B-4371-9B0F-9604E239423B0” is uw aanvraag-ID
Ik krijg normaal gesproken door mappen te sorteren op de laatste datum die in Finder is gewijzigd. En de meest recente bewerkte map is mijn apparaat-ID en app-ID.
Geniet!
Antwoord 16
Ik bewaar een snelkoppeling op mijn bureaublad naar de map Simulator waar het de apps houdt, dwz:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
Gesorteerd op de meest recente datum, ga dan gewoon naar de meest recente app-mapbibliotheek / voorkeuren en bekijk het bestand in de PLIS-editor.
Antwoord 17
SWIFT 3
print(UserDefaults.standard.dictionaryRepresentation())
Antwoord 18
voor MacOS-apps
Ga naar: /Users/SUSUSER NIEUWS /LIBRARY/Containers/com. œyour bedrijf}. {Uw app} / gegevens / bibliotheek / voorkeuren en open de PLIST van uw app met Xcode.
Antwoord 19
U kunt elke waarde die u hebt ingesteld, zoals:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
Antwoord 20
Na het lezen van het geaccepteerde antwoord van deze vraag, stelde ik dit eenvoudige script samen dat de PLIS-bestanden opent die door de iOS-simulator wordt gebruikt om de NSUserDefaults
-voorkeuren op te slaan, en hoewel het een bepaalde setup aanneemt (past perfect ), het kan als uitgangspunt werken voor anderen.
$ 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
Voorbeeld plaatsing:
$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh
Antwoord 21
U kunt dit gebruiken om het volledige pad te krijgen over gebruikersvoorkeuren, cache en vele andere gegevens
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
Antwoord 22
U kunt het pad voor de voorkeurenmap afdrukken vanuit application:didFinishLaunchingWithOptions:
callback in uw AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
return true
}
Dan kun je direct naar het plist-bestand kijken om te zien wat daarin is opgeslagen.
Antwoord 23
Het werkt op de bovenste versie SWIFT 4
zet die code gewoon in een willekeurige methode van AppDelegate en stel daar het breekpunt in
**> let path =
> NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory,
> FileManager.SearchPathDomainMask.userDomainMask, true).first**
wanneer u een project uitvoert, drukt u “pad” af en u krijgt een pad om info.plist te bereiken met gebruikersdefaults
Ga dan gewoon naar vinder en plak dat pad
u bent bereikt op dat bestand
Antwoord 24
voor gebruikers die de nieuwe voorkeurslocatie willen vinden die in de simulator is opgeslagen.
Hier vind ik de opgeslagen waarden.
/Users/vikas/Library/Developer/CoreSimulator/Devices/CE5A0444-BD98-4FEE-A839-92728D6E9895/data/Containers/Data/Application/F7430839-ED2C-408A-8A8E-FE7FFAABA8E2/Library/Preferences
Omdat we kunnen zien dat er grote identifiers zijn die moeilijk te raden zijn vanaf de terminal, raad ik je aan ernaar te zoeken in je terminal of vinder.
de bestandsnaam moet eindigen op {bundle id}.plistbijvoorbeeld com.sellerbuddy.online.plist
dus je kunt gewoon naar terminal gaan en op enter drukken, zoiets als hieronder met uw app-bundel-ID.
find ~/Library/Developer/CoreSimulator/Devices -type f -name "com.sellerbuddy.online.plist"