Eenvoudige manier om opgeslagen nsuserdefaults te zien?

Is er een manier om te zien wat er is opgeslagen in NSUserDefaultsrechtstreeks? 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>.plistis, kunt u de opdracht findgebruiken 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/CoreSimulatorvoor 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 opengebruiken. 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 NSDictionarygegoten. 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 defaultste 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

defaultskunnen 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 met defaults

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.APP

UserDefaults 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.plistdus 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"

Other episodes