저장된 NSUserDefaults를 쉽게 볼 수 있습니까?


225

저장된 내용을 NSUserDefaults직접 확인할 수있는 방법이 있습니까? 내 데이터가 올바르게 저장되었는지 확인하고 싶습니다.


3
이것을 사용하여 앱 디렉토리의 위치를 ​​얻으십시오 : 해당 위치에서 print (NSHomeDirectory ()), 라이브러리> 환경 설정> <yourAppsBundleName.plist>로 이동하여 NSUserDefaults가 데이터를 저장하는 곳입니다.
Bobby

답변:


162

다음으로 이동하면 시뮬레이터에서 앱의 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 편집기에서이 값을 열고 지속되는 값을 마음의 내용으로 탐색하십시오.


12
이후 버전의 XCode에서 이것이 변경되었음을 발견했습니다. / users / 사용자 이름 / 라이브러리 / 응용 프로그램 지원 / iPhone Simulator / 4.3 / Applications
nevster

재미있는 ... 당신이 OCMock / SenTestingKit 단위 테스트를 함께 수행하는 경우 것 같다 NSUserDefaults, 다음이 NSUserDefaults하십시오 .plist 파일에 유지되지 않습니다 아니라 메모리에서 관리 stackoverflow.com/questions/6193597/...
ma11hew28

이미 설치된 응용 프로그램에서 어떻게 볼 수 있습니까? 클라이언트가 앱 스토어에서 응용 프로그램을 다운로드했는데 문제가 있습니다. NSUserDefaults 파일을 확인해야합니다
Dejell

클라이언트와 대화 할 수 있고 다소 정통한 경우에는 PhoneView와 같은 도구를 사용하여 전화 파일 시스템에 액세스하고 파일을 전화에서 복사하여 사용자에게 보낼 수 있습니다.
Daniel Schneller

13
~ / 라이브러리 / 개발자 / CoreSimulator / 장치 : 경로가 변경되었습니다
Brainware

355

모든 현재 NSUserDefaults를 로그에 인쇄 할 수 있습니다.

키만 :

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

키와 값 :

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

1
THX,이 것이 더 효율적입니다 ~
어쿠스틱

3
애플은이를 위해 XCode에서 간단한 뷰어를 만들 수있다. plist 뷰어처럼. 그러나 아닙니다. 그들은 쉽게 만들고 싶지 않습니다.
GeneCode

78

Swift에서는 다음을 사용할 수 있습니다.

스위프트 3.x & 4.x

모든 키와 값을 얻으려면 :

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))

스위프트 2.x

사용자 기본값의 완전한 사전 표현을 검색하려면 다음을 수행하십시오.

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation())

키를 검색하려면 다음을 수행하십시오.

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array)

값을 검색하려면 다음을 수행하십시오.

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)

40

배열의 각 키 값을 확인할 수 있습니다.

[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]

3
이 명령을 사용하여 디버거에서도 작동했습니다. (lldb) "po [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]"
Ethan Parker

21

시뮬레이터에서 실행할 때 때때로 다음 스 니펫을 사용하여 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

실제 장치에서도 마찬가지입니다.


나는이 응답을 좋아한다. 그것은 안정적이며 항상 희망적으로 작동합니다!
lucianoenrico

7

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 를 사용 하는 경우 경로를 마우스 오른쪽 버튼으로 클릭하여 엽니 다.


7

스위프트 4.0

//func dictionaryRepresentation() -> [String : AnyObject]

NSUserDefaults.standardUserDefaults ()의 dictionaryRepresentation은 [String : AnyObject]를 반환하기 때문에

우리는로 캐스팅했습니다 NSDictionary. 그런 다음 괄호 '()'로 묶으면 NSDictionary에서와 마찬가지로 .allKeys 또는 .allValues를 호출 할 수 있습니다

 print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)

6

아래 코드를 사용하십시오.

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

훌륭한! 가장 좋은 답변이 일반적으로 가장 짧은 방법에 관심이 있습니다. 터미널 모드에서 디렉토리를 탐색하는 일은 거의 필요하지 않습니다. 백도어와 같은 괴짜들은 아마도 비밀 해커일까요?
John

고마워,하지만 당신을 얻을 수 없습니다. 당신이 말하고 싶은 것?
Mr.Javed Multani

5

들어 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;
    ...

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을 사용하는 것이 좋습니다 . 시뮬레이터 앱 디렉토리에 쉽게 액세스 할 수 있습니다.


2

더 나은 프리젠 테이션을 위해 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]);
    }
}

2
"logAllUserDefaults"함수를 호출하면 실제로 기본값을 "받지"않기 때문입니다.
markrickert

맞습니다, @markrickert. 어쩌면 사전에서 사전을 만들어 반환 할 수도 있습니다.
Julian F. Weinert

1
또는 간단히 .. NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] debugDescription]);(위의 가장 많이 투표 된 답변과 거의 동일합니다.)
matsr

2

SimPholders2 라는 Mac 앱을 찾으십시오 . 메뉴 막대에 있으며 사용했던 모든 시뮬레이터를 나열한 다음 각 앱을 표시합니다. 하나를 선택하면 이미 앱 디렉토리에 열려있는 새로운 Finder 창이 나타납니다. 이를 통해 앱과 모든 디렉토리를 쉽게 찾을 수 있습니다. 그것은이다 거대한 시간 절약 (나는 쉽게 저자에 기부).


2

시뮬레이터 앱

이 쉘 스크립트는 이름 의 앱은 얻을 번들 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

1

스위프트 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


이것은 xcode 9.4 용 시뮬레이터에서 userdefaults plist를 찾는 유일한 솔루션입니다
anoo_radha

1

데스크탑에 시뮬레이터 폴더에 바로 가기를 유지하여 앱을 유지합니다.

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

가장 최근 날짜별로 정렬 한 다음 가장 최근의 앱 폴더 Library / Preferences로 이동하여 plist 편집기에서 파일을 봅니다.



1

MacOS 앱의 경우
: /Users/{User}/Library/Containers/com.{your company}. {your app} / Data / Library / Preferences로 이동하여 Xcode로 앱의 pList를여십시오.


1

스위프트 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입니다.

즐겨!


0

다음과 같이 설정 한 각 값을 NSLog 할 수 있습니다.

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

0

이 질문에 대한 대답을 읽은 후 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

포크 나 손으로이 대본을 어떻게 먹습니까? 어디에 두어야합니까?
Josh

1
@Josh 프로젝트 파일과 함께 넣어야합니다 (예제에서 스크립트 이름은 open-prefs-plist.sh). 그래도 최신 Xcode로 이것을 테스트하지 않았습니다. Flex에서이 정보를 지금 확인하는 것이 좋습니다. github.com/Flipboard/FLEX
Ernesto MB

0

사용자 기본 설정, 캐시 및 기타 여러 데이터에 대한 전체 경로를 얻기 위해이를 사용할 수 있습니다.

print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))


0

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 파일을 직접보고 거기에 저장된 내용을 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.