Apakah ada cara untuk melihat apa yang's telah disimpan ke NSUserDefaults
secara langsung? I'd suka untuk melihat apakah data saya disimpan dengan benar.
Anda dapat mencetak semua saat ini NSUserDefaults untuk log:
Hanya kunci:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
Kunci dan nilai-nilai:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Anda dapat menemukan file pList untuk aplikasi dalam simulator jika anda pergi ke:
/pengguna/nama pengguna/Library/Application Support/iPhone Simulator/<Sim Versi>/Aplikasi
Direktori ini memiliki banyak GUID bernama direktori. Jika anda bekerja pada beberapa aplikasi akan ada beberapa dari mereka. Jadi, anda perlu untuk menemukan aplikasi biner:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Kemudian pergi ke Library/Preferences direktori di GUID direktori. Jadi:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
Anda harus menemukan file yang terlihat seperti:
<Bundle Identifier>.foo.pList
Membuka ini di pList editor dan menelusuri desak nilai-nilai untuk jantung anda's konten.
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)
Kadang-kadang saya gunakan berikut cuplikan untuk mencetak lokasi saya NSUserDefaults file ketika berjalan di simulator
NSArray *path = NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, YA); NSString *folder = [path objectAtIndex:0]; NSLog(@"Anda NSUserDefaults disimpan dalam folder ini: %@/Preferensi", map);
Ini hasil jalan ke preferensi folder
Anda NSUserDefaults disimpan dalam folder ini: /Users/castle/Library/Application Support/iPhone Simulator/User/Aplikasi/BC5056A0-F46B-4AF1-A6DC-3A7DAB984960/Library/Preferences
Anda NSUserDefaults file ini terletak dalam preferensi folder dan diberi nama sesuai dengan awalan dan appliation nama, misalnya
dk.castleandersen.dreamteam.grid.plist
Saya mengharapkan hal yang sama akan berlaku untuk perangkat yang sebenarnya.
Di Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
karena dictionaryRepresentation dari NSUserDefaults.standardUserDefaults() mengembalikan [String : AnyObject]
Kita melemparkannya ke sebuah NSDictionary
. Kemudian dengan sekitarnya dalam kurung '()' akan memungkinkan kita untuk memanggil .allKeys atau .allValues seperti yang anda lakukan pada setiap NSDictionary
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Gunakan kode di bawah ini.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Untuk Xcode 7
NSUserDefaults standardDefaults disimpan di sini:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
NSUserDefaults untuk suite/app group disimpan di sini:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
Saya akan merekomendasikan menggunakan https://github.com/scinfu/NCSimulatorPlugin karena hari ini semuanya balik Uuid dan rasa sakit untuk menemukan. Hal ini memungkinkan akses mudah ke aplikasi simulator direktori.
Mudah, karena plist nama file <aplikasi-bundle-identifier>.plist
, anda dapat menggunakan menemukan
perintah untuk menemukan jalan. Tapi itu akan memakan waktu yang sangat lama jika anda mencari di seluruh komputer anda, sehingga anda harus memilih lingkup yang baik, seperti ~/Library/Developer/CoreSimulator
untuk Xcode 6.
contoh:
find ~/Library/Developer/CoreSimulator -type f -nama com.yang mengagumkan.aplikasi.plist
output akan menjadi sesuatu seperti ini...
/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
Dan dari sana anda dapat menggunakan buka
command. Atau jika anda menggunakan iTerm2, hanya perintah-klik pada path untuk membukanya.
Untuk aplikasi OS X, bukannya mencari aplikasi's default file plist, itu adalah sederhana untuk menggunakan default
utilitas baris perintah.
****NAMA
default -- mengakses Mac OS X pengguna default sistem
SINOPSIS
default [-currentHost | -host hostname] baca [domain [key]]
default [-currentHost | -host hostname] baca-jenis kunci domain
default [-currentHost | -host hostname] menulis domain { 'plist' | kunci 'nilai' }
default [-currentHost | -host hostname] mengubah nama domain old_key new_key
default [-currentHost | -host hostname] hapus [domain [key]]
default [-currentHost | -host hostname] { domain | cari kata | membantu }
DESKRIPSI
default
memungkinkan pengguna untuk membaca, menulis, dan menghapus Mac OS X pengguna default dari command-line shell. Mac OS X aplikasi dan program lain yang menggunakan default sistem untuk merekam preferensi pengguna dan lainnya informasi yang harus dipertahankan ketika aplikasi aren't berjalan (seperti font default untuk baru dokumen-dokumen, atau posisi dari panel Info). Banyak dari informasi ini dapat diakses melalui appli- kation's Preferensi panel, tetapi beberapa dari itu isn't, seperti posisi panel Info. Anda dapat mengakses informasi ini dengandefault
Contoh:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Saya membangun metode ini didasarkan pada Morion's saran untuk presentasi yang lebih baik. Gunakan itu dengan memanggil [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]);
}
}
Mencari aplikasi Mac yang bernama SimPholders2. Ia hidup di menu bar, dan daftar semua simulator anda've digunakan, dan kemudian menunjukkan masing-masing aplikasi. Pilih salah satu dan anda mendapatkan jendela Finder baru, sudah terbuka untuk aplikasi's direktori. Hal ini membuat super mudah untuk menemukan aplikasi anda dan semua itu's direktori. It's a menghemat waktu yang sangat besar (dan saya siap disumbangkan untuk penulis).
Saya membuat shortcut pada desktop saya untuk simulator's folder di mana itu membuat aplikasi, yaitu:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
Diurutkan berdasarkan tanggal terbaru, kemudian hanya pergi ke yang paling baru aplikasi folder Library/Preferences dan melihat file plist editor.
Ini shell script pencarian untuk ** nama aplikasi, mendapatkan bundle id, dan buka folder yang berisi file 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
Penggunaan: iphone-aplikasi-folder "Saya 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
Ditemukan aplikasi Aplikasi (com.organisasi.MyApp) /Users/organisation/Library/Developer/CoreSimulator/Devices/3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83/data/Containers/Bundle/Application/960A5232-219D-4C46-8CA3-01E259D8DDAD/ Aplikasi Saya.aplikasi
UserDefaults ditemukan untuk Aplikasi Saya
defaults read com.bundleid.app
Di Swift 2.2
let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
akan mencetak NSUserDefaults's file plist lokasi folder di Xcode debug console. Copy path string. Buka Finder, pilih Go to Folder di menu item, Paste path string. Double klik file plist. Anda akan melihat isi dalam Xcode editor.
Hanya bekerja di Simulator
Terima Kasih @Niels Castle
Setelah membaca pertanyaan ini's jawaban yang diterima, saya menempatkan bersama-sama ini script sederhana yang membuka file plist yang digunakan oleh iOS simulator untuk menyimpan NSUserDefaults
preferensi, dan sementara itu mengasumsikan tertentu setup (cocok untuk tambang sempurna), dapat bekerja sebagai titik awal bagi orang lain.
$ 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
Contoh penempatan:
$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh