Neyin NSUserDefaults
doğrudan kaydedildiğini görmenin bir yolu var mı ? Verilerimin doğru kaydedilip kaydedilmediğini görmek istiyorum.
Neyin NSUserDefaults
doğrudan kaydedildiğini görmenin bir yolu var mı ? Verilerimin doğru kaydedilip kaydedilmediğini görmek istiyorum.
Yanıtlar:
Aşağıdakilere giderseniz uygulamanızın pList dosyasını simülatörde bulabilirsiniz:
/ users / kullanıcı adınız / Library / Application Support / iPhone Simulator / <Sim Version> / Uygulamalar
Bu dizinde dizin adı verilen bir grup GUID vardır. Birkaç uygulama üzerinde çalışıyorsanız bunlardan birkaçı olacaktır. Yani uygulamanızın ikili dosyasını bulmanız gerekir:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Ardından GUID dizinindeki Library / Preferences dizinine gidin. Yani:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
Şuna benzeyen bir dosya bulmalısınız:
<Bundle Identifier>.foo.pList
Bunu pList düzenleyicisinde açın ve kalbinizin içeriğinde kalıcı değerlere göz atın.
NSUserDefaults
, NSUserDefaults
bir .plist dosyasına kalıcı değil, bellekte yönetiliyor: stackoverflow.com/questions/6193597/…
Tüm mevcut NSUserDefault'larını günlüğe yazdırabilirsiniz:
Sadece tuşları:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
Anahtarlar ve değerler:
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))
Burada da dökümü kullanabiliriz, ancak bu değerler dizisindeki her öğenin tam miras hiyerarşisini döndürür. Nesneler hakkında daha fazla bilgi gerekiyorsa, dökümü kullanın, normal yazdırma deyimine devam edin.
// 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)
Tarafından döndürülen dizideki her bir anahtarın değerlerini kontrol edebilirsiniz.
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
Bazen simülatörde çalışırken NSUserDefaults dosyamın konumunu yazdırmak için aşağıdaki snippet'i kullanıyorum
NSArray * path = NSSearchPathForDirectoriesInDomains ( NSLibraryDirectory, NSUserDomainMask, YES); NSString * folder = [yol nesnesiAtIndex: 0]; NSLog (@ "NSUserDefaults'unuz bu klasörde saklanır:% @ / Preferences", klasör);
Tercihler klasörüne giden yolu verir
NSUserDefaults'unuz bu klasörde saklanır: / Kullanıcılar / kale / Kütüphane / Uygulama Desteği / iPhone Simülatörü / Kullanıcı / Uygulamalar / BC5056A0-F46B-4AF1-A6DC-3A7DAB984960 / Kütüphane / Tercihler
NSUserDefaults dosyanız tercihler klasöründe bulunur ve ön ekinize ve uygulama adınıza göre adlandırılır;
dk.castleandersen.dreamteam.grid.plist
Aynı şeyin gerçek cihaz için de geçerli olmasını bekliyorum.
Kolay, plist dosya adı olduğundan <app-bundle-identifier>.plist
, find
yolunu bulmak için komutu kullanabilirsiniz . Ancak tüm bilgisayarınızı ararsanız çok uzun sürer, bu nedenle ~/Library/Developer/CoreSimulator
Xcode 6 gibi iyi bir kapsam seçmeniz gerekir .
misal:
find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist
çıktı böyle bir şey olacak ...
/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
Ve oradan open
komutu kullanabilirsiniz . Veya iTerm2 kullanıyorsanız , yolu açmak için komut üzerine sadece tıklayın.
Swift 4.0'da
//func dictionaryRepresentation() -> [String : AnyObject]
çünkü dictionaryRepresentation of NSUserDefaults.standardUserDefaults () döndürür [String: AnyObject]
Biz bir NSDictionary
. Sonra onu parantez içine alarak '()' herhangi bir NSDictionary gibi .allKeys veya .allValues çağırmamıza izin verir.
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Aşağıdaki kodu kullanın.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
For OS X uygulamaları yerine uygulamanın öndeğerleri plist dosyasını bulma, kullanımı basit defaults
komut satırı yardımcı.
ADI
defaults -- access the Mac OS X user defaults system
ÖZET
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 }
AÇIKLAMA
defaults
kullanıcıların Mac OS X kullanıcı varsayılanlarını komut satırı kabuğundan okumasına, yazmasına ve silmesine izin verir. Mac OS X uygulamaları ve diğer programlar, kullanıcı çalışmalarını ve uygulamalar çalışmadığında korunması gereken diğer bilgileri kaydetmek için varsayılan sistemi kullanır (yeni belgeler için varsayılan yazı tipi veya Bilgi panelinin konumu gibi). Bu bilgilerin çoğuna uygulamanın Tercihler panelinden erişilebilir, ancak Bilgi panelinin konumu gibi bilgilerin bir kısmı yoktur. Bu bilgilere şununla erişebilirsiniz:defaults
Misal:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Xcode 7 için
NSUserDefaults standardı Varsayılanlar burada saklanır:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
İçin NSUserDefaults paketi / uygulama grubunun burada saklanır:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
Https://github.com/scinfu/NCSimulatorPlugin kullanmanızı tavsiye ederim çünkü bu günlerde her şey UUID'lerin arkasında ve bulmak için bir acı. Simülatör uygulama dizinlerinize kolay erişim sağlar.
Bu yöntemi Morion'un daha iyi sunum önerisine dayanarak yaptım. Arayarak kullanın[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]);
(Neredeyse yukarıdaki en çok oylanan cevapta olduğu gibi.)
SimPholders2 adlı Mac uygulamasını arayın . Menü çubuğunda yaşar ve kullandığınız tüm simülatörleri listeler ve ardından uygulamalarınızın her birini gösterir. Birini seçtiğinizde, uygulamanın dizinine zaten açık olan yeni bir Finder penceresi açılır. Bu, uygulamanızı ve tüm dizinlerini bulmanızı çok kolaylaştırır. Çok büyük bir zaman tasarrufu (ve yazara kolayca bağış yaptım).
Bu kabuk komut dosyası uygulamanın adını arar , paket kimliğini alır ve Plist dosyalarını içeren klasörleri açar .
#!/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
Kullanımı: 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
Bulunan uygulama Uygulamam (com.organisation.MyApp) / Kullanıcılar / kuruluş / Kütüphane / Geliştirici / CoreSimulator / Cihazlar / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / data / Konteynerler / Paket / Uygulama / 960A5232-219D-4C46-8CA3- Bölüm 01E259D8DDAD / My App.app
Uygulamam için Kullanıcı Hatası bulundu
defaults read com.bundleid.app
Swift 2.2'de
let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
NSUserDefaults'un plist dosya klasörü konumunu Xcode hata ayıklama konsolunda yazdıracaktır. Yol dizesini kopyalayın. Finder'ınızı açın, Git menü öğesinde Klasöre Git'i seçin, Yol dizesini yapıştırın. Plist dosyasına çift tıklayın. İçeriği Xcode düzenleyicinizde göreceksiniz.
Sadece Simülatörde çalışın
Teşekkürler @Niels Kalesi
Masaüstümde, simülatörün uygulamaları sakladığı klasöre bir kısayol tutuyorum, yani:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
En son tarihe göre sıralanmış, en son Kitaplık / Tercihler uygulama klasörüne gidin ve dosyayı plist düzenleyicisinde görüntüleyin.
Hızlı 3
print(UserDefaults.standard.dictionaryRepresentation())
Swift 5 Xcode 11.2 Çözümü
Bu, UserDefaults anahtar değerlerinizin bir plist dosyasında olacağı yolun tamamıdır. Uygulama paketi tanımlayıcı .plist dosyanızı takip edin ve bulun.
/ Kullanıcılar / 'Kullanıcı Adınız' / Kütüphane / Geliştirici / CoreSimulator / Cihazlar / 4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2 / data / Konteynerler / Veri / Uygulama / 56D7CE31-9A8B-4371-9B0F-9604E239423B0 / Kütüphane / Tercihler
Burada "4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2", Cihaz Kimliğinizdir
ve "56D7CE31-9A8B-4371-9B0F-9604E239423B0", Uygulama Kimliğinizdir
Normalde klasörleri Finder'da Değiştirilen son Tarihe göre sıralayarak alırım. En son düzenlenen klasör, cihaz kimliğim ve Uygulama Kimliğimdir.
Zevk almak!
Ayarladığınız her değeri NSLog yapabilirsiniz, örneğin:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
Bu sorunun kabul edilen cevabını okuduktan sonra, NSUserDefaults
tercihleri saklamak için iOS simülatörü tarafından kullanılan plist dosyalarını açan bu basit komut dosyasını bir araya getirdim ve belirli bir kurulumu varsayarken (benimkine mükemmel şekilde uyuyor), diğerleri için bir başlangıç noktası olarak çalışabilir .
$ 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
Örnek yerleşim:
$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh
Kullanıcı tercihleri, önbellek ve diğer birçok verinin tam yolunu bulmak için bunu kullanabilirsiniz.
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
Tercihler dizininin yolunu application:didFinishLaunchingWithOptions:
AppDelegate'inizdeki geri aramayla yazdırabilirsiniz:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
return true
}
Ardından, orada nelerin kaydedildiğini görmek için doğrudan plist dosyasına bakabilirsiniz.