Ios 查看保存的NSUserDefault的简单方法?

Ios 查看保存的NSUserDefault的简单方法?,ios,objective-c,macos,nsuserdefaults,Ios,Objective C,Macos,Nsuserdefaults,有没有办法直接查看保存到NSUserDefaults的内容?我想看看我的数据保存是否正确 您可以记录您设置的每个值,如: NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]); 您可以检查数组中由返回的每个键的值 [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] 如果转到以下位

有没有办法直接查看保存到
NSUserDefaults
的内容?我想看看我的数据保存是否正确

您可以记录您设置的每个值,如:

NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);

您可以检查数组中由返回的每个键的值

[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]

如果转到以下位置,您可以在模拟器中找到应用程序的pList文件:

/用户/您的用户名/库/应用程序支持/iPhone模拟器//应用程序

此目录有一组GUID命名的目录。如果你正在开发一些应用程序,就会有一些应用程序。因此,您需要找到您的应用程序二进制文件:

find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
然后转到GUID目录中的Library/Preferences目录。因此:

cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
您应该找到一个如下所示的文件:

<Bundle Identifier>.foo.pList
.foo.pList

在pList编辑器中打开此文件,并将保留的值浏览到您的心脏内容。

在模拟器中运行时,我有时会使用以下代码片段打印出NSUserDefaults文件的位置

NSArray *path = NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, YES); NSString *folder = [path objectAtIndex:0]; NSLog(@"Your NSUserDefaults are stored in this folder: %@/Preferences", folder);
我希望实际的设备也是如此。

我在桌面上保留了一个到模拟器文件夹的快捷方式,在那里保存应用程序,即:

/Users/gary/Library/Application Support/iPhone Simulator/User/Applications

按最新日期排序,然后进入最新的应用程序文件夹库/首选项,并在plist编辑器中查看该文件。

您可以将所有当前NSUserDefault打印到日志:

只需按键:

NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
键和值:

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

我根据Morion的建议构建了这个方法,以便更好地演示。通过调用
[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]);
    }
}
-(void)logAllUserDefaults
{
NSArray*键=[[[NSUserDefaults standardUserDefaults]字典表示]所有键];
NSArray*值=[[NSUserDefaults standardUserDefaults]字典表示]所有值];
对于(int i=0;i
在阅读了这个问题的公认答案后,我编写了这个简单的脚本,它打开了iOS模拟器用来存储
NSUserDefaults
首选项的plist文件,虽然它假定了某种设置(完全适合我的设置),但它可能会作为其他设置的起点

$ 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
放置示例:

$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh
在Swift中,我们可以使用以下内容:- Swift 3.x和4.x 要获取所有键和值,请执行以下操作: 要检索用户默认值的完整字典表示形式,请执行以下操作: 要检索密钥,请执行以下操作: 要检索值,请执行以下操作: 我们也可以在这里使用dump,但这将返回values数组中每个元素的完整继承层次结构。如果需要有关对象的更多信息,请使用dump,否则继续使用普通的print语句

// dump(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(Array(UserDefaults.standard.dictionaryRepresentation().values))
Swift 2.x 要检索用户默认值的完整字典表示形式,请执行以下操作: 要检索密钥,请执行以下操作: 要检索值,请执行以下操作:
很简单,因为plist文件名是
.plist
,所以可以使用
find
命令查找其路径。但是,如果搜索整个计算机,需要花费很长时间,因此必须选择一个好的范围,如Xcode 6的
~/Library/Developer/CoreSimulator

例如:

find~/Library/Developer/CoreSimulator-type f-name com.awesome.app.plist

输出将如下所示

/Users/hlung/Library/Developer/CoreSimulator/Devices/B61913F6-7D7C-4E45-AE2F-F45220A71823/data/Containers/data/Application/E4CC51CF-11E5-4168-8A74-6BAE3B89998F/Library/Preferences/com.awome.app.plist


在那里,您可以使用
open
命令。或者,如果您使用的是iTerm2,只需在路径上单击命令即可打开它。

查找名为SimPholders2的Mac应用程序。它位于菜单栏中,列出您使用过的所有模拟器,然后显示您的每个应用程序。选择一个,您将获得一个新的查找窗口,该窗口已打开到应用程序的目录。这使得查找应用程序及其所有目录变得超级容易。这大大节省了时间(我很乐意捐赠给作者)。

在Swift 4.0中

//func dictionaryRepresentation() -> [String : AnyObject]
因为字典表示NSUserDefaults.standardUserDefaults()返回[字符串:AnyObject]

我们将其放入
NSDictionary
中。然后,通过将其括在括号“()”中,将允许我们调用.allKeys或.allValues,就像在任何NSDictionary上一样

 print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
模拟器应用程序 此shell脚本搜索应用程序的名称,获取包id,并打开包含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
扩展脚本版本 用法:
iphone应用程序文件夹“我的应用程序”

在Swift 2.2中

let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
将在Xcode调试控制台中打印NSUserDefaults的plist文件夹位置。复制路径字符串。打开Finder,在Go菜单项中选择Go to Folder,粘贴路径字符串。双击plist文件。您将在Xcode编辑器中看到内容

只能在模拟器中工作

谢谢@Niels Castle

Swift 3

print(UserDefaults.standard.dictionaryRepresentation())
使用下面的代码

NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
对于Xcode 7

NSUserDefaults标准默认值存储在此处:

/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/data/Application/{UUID}

套件/应用程序组的NSUserDefault存储在此处:

/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist


我建议使用UUID,因为现在一切都在UUID后面,很难找到。它允许您轻松访问模拟器应用程序目录。

对于MacOS应用程序

转到:/Users/{User}/Library/Containers/com.{your company}.{your app}/Data/Library/Preferences并使用Xcode打开应用程序的pList。

对于OSX应用程序,使用
默认值
命令行实用程序比查找应用程序的默认值pList文件更简单

名称

 defaults -- access the Mac OS X user defaults system
<
//func dictionaryRepresentation() -> [String : AnyObject]
 print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
#!/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
#!/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
defaults read com.bundleid.app
let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
print(UserDefaults.standard.dictionaryRepresentation())
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
 defaults -- access the Mac OS X user defaults system
 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 }
$ defaults read com.apple.Safari
{
    AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
    AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
    DefaultBrowserPromptingState2 = 4;
    ...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
    return true
}
**> let path =
> NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory,
> FileManager.SearchPathDomainMask.userDomainMask, true).first**
/Users/vikas/Library/Developer/CoreSimulator/Devices/CE5A0444-BD98-4FEE-A839-92728D6E9895/data/Containers/Data/Application/F7430839-ED2C-408A-8A8E-FE7FFAABA8E2/Library/Preferences
find ~/Library/Developer/CoreSimulator/Devices -type f -name "com.sellerbuddy.online.plist"