Answers:
如果您要转到模拟器,可以在应用程序中找到pList文件:
/ users / 您的用户名 / Library / Application Support / iPhone Simulator / <Sim Version> / Applications
该目录有一堆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
在pList编辑器中打开它,并浏览持久值到您的内心。
NSUserDefaults
,则NSUserDefaults
不会保存到一个文件的.plist但在内存中,而管理:stackoverflow.com/questions/6193597/...
您可以将所有当前的NSUserDefaults打印到日志中:
只是关键:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
键和值:
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))
我们也可以在这里使用dump,但是它将返回values数组中每个元素的完整继承层次结构。如果需要有关对象的更多信息,请使用dump,否则继续执行常规的print语句。
// 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)
您可以检查数组中每个键的值,这些值由
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
在模拟器中运行时,有时我会使用以下代码片段打印出NSUserDefaults文件的位置
NSArray *路径= NSSearchPathForDirectoriesInDomains( NSLibraryDirectory,NSUserDomainMask,是); NSString * folder = [path objectAtIndex:0]; NSLog(@“您的NSUserDefaults存储在此文件夹中:%@ / Preferences”,文件夹);
它产生了首选项文件夹的路径
您的NSUserDefaults存储在以下文件夹中:/ Users / castle / Library / Application Support / iPhone Simulator / User / Applications / BC5056A0-F46B-4AF1-A6DC-3A7DAB984960 / Library / Preferences
您的NSUserDefaults文件位于首选项文件夹中,并根据您的前缀和应用名称命名,例如
dk.castleandersen.dreamteam.grid.plist
我希望实际设备也是如此。
容易,因为plist文件名是<app-bundle-identifier>.plist
,所以您可以使用find
command查找其路径。但是,如果您要搜索整个计算机,则会花费很长时间,因此您必须选择一个~/Library/Developer/CoreSimulator
合适的范围,例如Xcode 6。
例:
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.awesome.app.plist
从那里您可以使用open
命令。或者,如果您使用iTerm2,只需在路径上单击命令以将其打开。
在Swift 4.0中
//func dictionaryRepresentation() -> [String : AnyObject]
因为NSUserDefaults.standardUserDefaults()的dictionaryRepresentation返回[String:AnyObject]
我们将其转换为NSDictionary
。然后将其括在括号“()”中,将使我们可以像在任何NSDictionary上一样调用.allKeys或.allValues
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
使用以下代码。
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
对于OS X应用程序,与其查找应用程序的默认plist文件,不如使用defaults
命令行实用程序。
名称
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
允许用户从命令行外壳读取,写入和删除Mac OS X用户默认设置。Mac OS X应用程序和其他程序使用默认系统来记录用户首选项以及应用程序不运行时必须维护的其他信息(例如新文档的默认字体或“信息”面板的位置)。可通过应用程序的“首选项”面板访问其中的大部分信息,但某些信息则无法访问,例如“信息”面板的位置。您可以通过以下方式访问此信息defaults
例:
$ 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
NSUserDefaults standardDefaults存储在此处:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
套件/应用程序组的 NSUserDefaults 存储在此处:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
我建议使用https://github.com/scinfu/NCSimulatorPlugin,因为这些天一切都在UUID后面,很难找到。它使您可以轻松访问模拟器应用程序目录。
我基于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]);
}
}
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] debugDescription]);
(几乎与上述最
该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-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
找到的应用程序My App(com.organisation.MyApp)/用户/组织/库/开发人员/ CoreSimulator / Devices / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / data / Containers / Bundle / Application / 960A5232-219D-4C46-8CA3- 01E259D8DDAD /我的App.app
为我的应用找到了UserDefaults
defaults read com.bundleid.app
在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,在“转到”菜单项中选择“转到文件夹”,然后粘贴路径字符串。双击plist文件。您将在Xcode编辑器中看到内容。
仅在模拟器中工作
谢谢@尼尔斯城堡
Swift 5 Xcode 11.2解决方案
这是UserDefaults键值在plist文件中的完整路径。跟随并找到您的应用捆绑包标识符.plist文件。
/ Users /“您的用户名” / Library / Developer / CoreSimulator / Devices / 4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2 / data / Containers / Data / Application / 56D7CE31-9A8B-4371-9B0F-9604E239423B0 / Library / Preferences
此处的“ 4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2”是您的设备ID
和“ 56D7CE31-9A8B-4371-9B0F-9604E239423B0”是您的应用程序ID
我通常通过在Finder中按上次修改日期对文件夹进行排序来获取它们。最近编辑的文件夹是我的设备ID和应用ID。
请享用!
在阅读了该问题的可接受答案之后,我整理了一个简单的脚本,该脚本打开了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
您可以从application:didFinishLaunchingWithOptions:
AppDelegate中的回调打印出首选项目录的路径:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
return true
}
然后,您可以直接查看plist文件,以查看其中保存了什么。