Apakah ada cara untuk melihat apa yang telah disimpan NSUserDefaults
secara langsung? Saya ingin melihat apakah data saya disimpan dengan benar.
Apakah ada cara untuk melihat apa yang telah disimpan NSUserDefaults
secara langsung? Saya ingin melihat apakah data saya disimpan dengan benar.
Jawaban:
Anda dapat menemukan file pList untuk aplikasi Anda di simulator jika Anda masuk ke:
/ pengguna / nama pengguna Anda / Perpustakaan / Dukungan Aplikasi / iPhone Simulator / <Versi Sim> / Aplikasi
Direktori ini memiliki banyak direktori bernama GUID. Jika Anda mengerjakan beberapa aplikasi, akan ada beberapa aplikasi. Jadi, Anda perlu menemukan biner aplikasi Anda:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Kemudian pergi ke direktori Library / Preferences di direktori GUID. Begitu:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
Anda harus menemukan file yang terlihat seperti:
<Bundle Identifier>.foo.pList
Buka ini di editor pList dan ramban nilai yang ada untuk isi hati Anda.
NSUserDefaults
, maka file NSUserDefaults
tersebut tidak bertahan pada file .plist melainkan dikelola dalam memori: stackoverflow.com/questions/6193597/…
Anda dapat mencetak semua NSUserDefaults saat ini ke log:
Hanya kunci:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
Kunci dan nilai:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
print("\(key) = \(value) \n")
}
print(Array(UserDefaults.standard.dictionaryRepresentation()))
// Using dump since the keys are an array of strings.
dump(Array(UserDefaults.standard.dictionaryRepresentation().keys))
Kita bisa menggunakan dump di sini juga, tetapi itu akan mengembalikan hierarki warisan lengkap dari setiap elemen dalam array nilai. Jika informasi lebih lanjut tentang objek diperlukan, maka gunakan dump, kalau tidak pergi dengan pernyataan cetak normal.
// 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)
Anda dapat memeriksa nilai untuk setiap kunci dalam array, dikembalikan oleh
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
Saya kadang-kadang menggunakan cuplikan berikut untuk mencetak lokasi file NSUserDefaults saya saat berjalan di simulator
NSArray * path = NSSearchPathForDirectoriesInDomains ( NSLibraryDirectory, NSUserDomainMask, YES); NSString * folder = [path objectAtIndex: 0]; NSLog (@ "NSUserDefaults Anda disimpan di folder ini:% @ / Preferensi", folder);
Ini menghasilkan jalur ke folder preferensi
NSUserDefaults Anda disimpan dalam folder ini: / Pengguna / benteng / Perpustakaan / Dukungan Aplikasi / iPhone Simulator / Pengguna / Aplikasi / BC5056A0-F46B-4AF1-A6DC-3A7DAB984960 / Perpustakaan / Preferensi
File NSUserDefaults Anda terletak di folder preferensi dan dinamai sesuai dengan awalan dan nama aplikasi Anda, mis
dk.castleandersen.dreamteam.grid.plist
Saya berharap hal yang sama berlaku untuk perangkat yang sebenarnya.
Mudah, karena nama file plist adalah <app-bundle-identifier>.plist
, Anda dapat menggunakan find
perintah untuk menemukan jalurnya. Tetapi akan sangat lama jika Anda mencari seluruh komputer Anda, jadi Anda harus memilih ruang lingkup yang baik, seperti~/Library/Developer/CoreSimulator
untuk Xcode 6.
contoh:
find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist
output akan menjadi 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 bisa menggunakan open
perintah. Atau jika Anda menggunakan iTerm2 , cukup klik perintah pada jalur untuk membukanya.
Dalam Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
karena dictionaryRepresentation of NSUserDefaults.standardUserDefaults () mengembalikan [String: AnyObject]
Kami melemparkannya ke dalam NSDictionary
. Maka dengan mengelilinginya dalam tanda kurung '()' akan memungkinkan kami untuk memanggil .allKeys atau .allValues seperti yang Anda lakukan pada NSDictionary apa pun
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Gunakan kode di bawah ini.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Untuk aplikasi OS X , alih-alih menemukan file plist default aplikasi, lebih mudah menggunakan defaults
utilitas baris perintah.
NAMA
defaults -- access the Mac OS X user defaults system
RINGKASAN
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 }
DESKRIPSI
defaults
memungkinkan pengguna untuk membaca, menulis, dan menghapus default pengguna Mac OS X dari shell baris perintah. Aplikasi Mac OS X dan program lain menggunakan sistem default untuk merekam preferensi pengguna dan informasi lain yang harus dipertahankan ketika aplikasi tidak berjalan (seperti font default untuk dokumen baru, atau posisi panel Info). Sebagian besar informasi ini dapat diakses melalui panel Preferensi aplikasi, tetapi beberapa di antaranya tidak, seperti posisi panel Info. Anda dapat mengakses informasi ini dengandefaults
Contoh:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Untuk Xcode 7
NSUserDefaults standardDefault disimpan di sini:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
NSUserDefaults untuk grup suite / aplikasi 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 berada di belakang UUID dan sulit ditemukan. Ini memungkinkan akses mudah ke direktori aplikasi simulator Anda.
Saya membangun metode ini berdasarkan saran Morion untuk presentasi yang lebih baik. Gunakan dengan menelepon[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]);
}
}
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] debugDescription]);
(Hampir seperti dalam jawaban pilihan terbanyak di atas.)
Cari aplikasi Mac yang disebut SimPholder2 . Itu tinggal di bilah menu, dan mencantumkan semua simulator yang Anda gunakan, dan kemudian menunjukkan masing-masing aplikasi Anda. Pilih satu dan Anda mendapatkan jendela Finder baru, sudah terbuka ke direktori aplikasi. Ini membuatnya sangat mudah untuk menemukan aplikasi Anda dan semua direktori itu. Ini adalah penghemat waktu yang sangat besar (dan saya siap menyumbang ke penulis).
Script shell ini mencari nama aplikasi, mendapatkan bundel id , dan membuka 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
Pemakaian: 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
Menemukan aplikasi Aplikasi Saya (com.organisation.MyApp) / Pengguna / organisasi / Perpustakaan / Pengembang / CoreSimulator / Perangkat / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / data / Wadah / Bundel / Aplikasi / 960A5232-219D-4C46-8CA3- 01E259D8DDAD / My App.app
UserDefaults ditemukan untuk Aplikasi Saya
defaults read com.bundleid.app
Dalam 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 lokasi folder file plist NSUserDefaults di konsol debug Xcode. Salin string path. Buka Finder Anda, pilih Go to Folder in Go menu item, Tempelkan string path. Klik dua kali file plist. Anda akan melihat konten di editor Xcode Anda.
Hanya bekerja di Simulator
Terima kasih @Niels Castle
Saya menyimpan pintasan di desktop saya ke folder simulator tempat ia menyimpan aplikasi, yaitu:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
Diurutkan berdasarkan tanggal terkini, lalu masuk ke folder aplikasi Perpustakaan / Preferensi dan lihat file di editor plist.
Cepat 3
print(UserDefaults.standard.dictionaryRepresentation())
Swift 5 Xcode 11.2 Solusi
Ini adalah keseluruhan path tempat nilai kunci UserDefaults Anda akan berada dalam file plist. Ikuti dan temukan file .plist pengidentifikasi bundel aplikasi Anda.
/ Pengguna / 'Nama Pengguna Anda' / Perpustakaan / Pengembang / CoreSimulator / Perangkat / 4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2 / data / Wadah / Data / Aplikasi / 56D7CE31-9A8B-4371-9B0F-9604E239423B0 / Perpustakaan / Preferensi
Di sini "4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2" adalah Device ID Anda
dan "56D7CE31-9A8B-4371-9B0F-9604E239423B0" adalah ID Aplikasi Anda
Saya biasanya mendapatkannya dengan menyortir folder berdasarkan Tanggal terakhir Dimodifikasi dalam Finder. Dan folder yang diedit terbaru adalah ID perangkat dan ID Aplikasi saya.
Nikmati!
Anda dapat NSLog setiap nilai yang Anda tetapkan, seperti:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
Setelah membaca jawaban yang diterima pertanyaan ini, saya mengumpulkan skrip sederhana ini yang membuka file plist yang digunakan oleh simulator iOS untuk menyimpan NSUserDefaults
preferensi, dan sementara mengasumsikan pengaturan tertentu (sangat cocok dengan saya), ini mungkin berfungsi sebagai titik awal untuk 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
Anda dapat menggunakan ini untuk mendapatkan path lengkap tentang preferensi pengguna, cache dan banyak data lainnya
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
Anda dapat mencetak jalur untuk direktori preferensi dari application:didFinishLaunchingWithOptions:
callback di AppDelegate Anda:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
return true
}
Kemudian Anda dapat melihat file plist secara langsung untuk melihat apa yang tersimpan di sana.