답변:
다음으로 이동하면 시뮬레이터에서 앱의 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 * path = NSSearchPathForDirectoriesInDomains ( NSLibraryDirectory, NSUserDomainMask, YES); NSString * folder = [경로 객체 AtIndex : 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
명령을 사용 하여 경로를 찾을 수 있습니다 . 그러나 전체 컴퓨터를 검색하면 시간이 오래 걸리므로 다음과 같이 좋은 범위를 선택해야합니다.~/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 를 사용 하는 경우 경로를 마우스 오른쪽 버튼으로 클릭하여 엽니 다.
스위프트 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
요즘 모든 것이 UUID 뒤에 있으며 찾기가 쉽지 않기 때문에 https://github.com/scinfu/NCSimulatorPlugin을 사용하는 것이 좋습니다 . 시뮬레이터 앱 디렉토리에 쉽게 액세스 할 수 있습니다.
더 나은 프리젠 테이션을 위해 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]);
(위의 가장 많이 투표 된 답변과 거의 동일합니다.)
이 쉘 스크립트는 이름 의 앱은 얻을 번들 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) / Users / organisation / Library / Developer / CoreSimulator / Devices / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / data / Containers / Bundle / Application / 960A5232-219D-4C46-8CA3- 01E259D8DDAD / My App.app
내 앱의 사용자 기본값을 찾았습니다.
defaults read com.bundleid.app
스위프트 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 편집기에 내용이 표시됩니다.
시뮬레이터에서만 작동
감사합니다 @Niels Castle
스위프트 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 / 라이브러리 / 환경 설정
여기서 "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
사용자 기본 설정, 캐시 및 기타 여러 데이터에 대한 전체 경로를 얻기 위해이를 사용할 수 있습니다.
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
application:didFinishLaunchingWithOptions:
AppDelegate의 콜백에서 preferences 디렉토리의 경로를 인쇄 할 수 있습니다 .
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
return true
}
그런 다음 plist 파일을 직접보고 거기에 저장된 내용을 볼 수 있습니다.