programing

저장된 NSUser Defaults를 쉽게 확인할 수 있습니까?

testmans 2023. 4. 20. 20:08
반응형

저장된 NSUser Defaults를 쉽게 확인할 수 있습니까?

NSUserDefaults?? 저장되었는지 데이터가 올바르게 저장되었는지 확인하고 싶습니다.

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

키만:

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

키 및 값:

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

다음 페이지로 이동하면 시뮬레이터에서 앱의 pList 파일을 찾을 수 있습니다.

/users/사용자명/라이브러리/어플리케이션 지원/iPhone 시뮬레이터/<Sim Version>/어플리케이션

이 디렉토리에는 GUID라는 이름의 디렉토리가 많이 있습니다.몇 개의 앱을 사용하고 있다면, 몇 개의 앱을 사용할 수 있습니다.따라서 앱 바이너리를 찾아야 합니다.

find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app

그런 다음 GUID 디렉토리의 라이브러리/환경설정 디렉토리로 이동합니다.그래서:

cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences

다음과 같은 파일을 찾을 수 있습니다.

<Bundle Identifier>.foo.pList

pList 편집기에서 이 항목을 열고 지속된 값을 마음껏 찾아보십시오.

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

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를 사용하고 그렇지 않은 경우 일반 인쇄 문장으로 진행합니다.

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

에서 반환되는 어레이 내의 각 키의 값을 확인할 수 있습니다.

[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]

시뮬레이터에서 실행할 때 다음 스니펫을 사용하여 NSUserDefaults 파일의 위치를 인쇄할 수 있습니다.

NSArray *path = NSSearchPathForDirectories인도메인(NSLibraryDirectory, NSUserDomainMask, YES);NSString *folder = [경로 objectAt]색인: 0];
NSLog(@"NSUser Defaults는 다음 폴더에 저장됩니다: %@/Preferences", 폴더).

기본 설정 폴더에 대한 경로를 생성합니다.

NSUserDefaults는 /Users/castle/Library/Application Support/iPhone Simulator/User/AF1-A6DC-3A7DAB984960/Library/Preferences 폴더에 저장됩니다.

NSUserDefaults 파일은 Preferences 폴더에 있으며 프리픽스와 응용 프로그램 이름에 따라 이름이 지정됩니다.

dk.castleandersen.dreamteam.grid.plist

실제 장치에서도 마찬가지일 것으로 예상됩니다.

plist 파일명은 다음과 같기 때문에 간단하다.<app-bundle-identifier>.plist , 을 사용하면 .find명령어를 사용하여 경로를 찾습니다. 걸리기 .~/Library/Developer/CoreSimulator 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 를 사용하고 있는 경우는, 커맨드 클릭만으로 열 수 있습니다.

아래 코드를 사용합니다.

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

Swift 4.0의 경우

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

NSUserDefaults.standardUserDefaults()의 dictionaryRepresentation이 [String : AnyObject]를 반환하기 때문입니다.

우리는 그것을 그 안에 집어넣었다.NSDictionary로 .또는 .호출할 수

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

OS X 어플리케이션의 경우 어플리케이션의 디폴트플리스트 파일을 검색하는 대신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 응용 프로그램 및 기타 프로그램은 기본 시스템을 사용하여 응용 프로그램이 실행되지 않을 때 유지되어야 하는 사용자 기본 설정 및 기타 정보(예: 새 문서의 기본 글꼴 또는 정보 패널 위치)를 기록합니다.이정설설설설설설설설설설 ( Preferences )패널을 통해 액세스 할 수 있지만, 정보 패널의 위치 등 액세스 할 수 없는 것도 있습니다.에는 '어디서든', '어디서든', '어디서든'으로 접속할 수 있습니다.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}

스위트/앱 그룹의 NSUserDefault는 다음과 같이 저장됩니다.

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

요즘은 모든 것이 UUID 뒤에 있고 찾기 힘들기 때문에 https://github.com/scinfu/NCSimulatorPlugin을 사용하는 것이 좋습니다.시뮬레이터 앱 디렉토리에 쉽게 액세스할 수 있습니다.

저는 더 나은 프레젠테이션을 위해 모리온의 제안을 바탕으로 이 방법을 개발했습니다.를 하세요.[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]);
    }
}

SimPholders2라는 Mac 앱을 찾습니다.메뉴 모음에 있으며 사용한 모든 시뮬레이터가 나열되고 각 앱이 표시됩니다.하나를 선택하면 앱의 디렉터리에 이미 열려 있는 새 파인더 창이 나타납니다.이것에 의해, 앱과 그 모든 디렉토리를 매우 간단하게 찾을 수 있습니다.그것은 엄청난 시간 절약이다(그리고 나는 그 작가에게 기꺼이 기부했다).

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 to Folder in Go 메뉴 항목, Paste the path string(경로 문자열 붙여넣기)을 선택합니다.plist 파일을 더블 클릭합니다.Xcode 에디터에 내용이 표시됩니다.

시뮬레이터에서만 작동

감사합니다 @Niels Castle

시뮬레이터 앱

이 셸 스크립트는 앱 이름검색하여 번들 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

내 앱(com.organization)을 찾았습니다.MyApp) /사용자/조직/라이브러리/개발자/코어시뮬레이터/디바이스/3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83/데이터/컨테이너/번들/어플리케이션/9604D52A)

내 앱의 UserDefaults를 찾았습니다.

Mac 앱

defaults read com.bundleid.app

Swift 5 Xcode 11.2 솔루션

UserDefaults 키 값이 plist 파일에 포함되는 경로입니다.앱 번들 식별자 .plist 파일을 찾습니다.

/사용자/'사용자명'/라이브러리/개발자/코어시뮬레이터/디바이스/4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2/데이터/컨테이너/데이터/어플리케이션/56D7CE31-9A8B-4371-9B0F-9604E239423B0/라이브러리/프리퍼런스

여기서 '4176EED3-B9FC-4C77-A25E-ASD201B9'는FDFG2"는 디바이스 ID입니다.

「56D7CE31-9A8B-4371-9B0F-9604E239423B0」이 어플리케이션 ID 입니다.

저는 보통 Finder에서 마지막으로 수정한 날짜별로 폴더를 정렬하여 가져옵니다.그리고 가장 최근에 편집한 폴더는 내 장치 ID와 앱 ID입니다.

맛있게 드세요!

시뮬레이터 폴더에 대한 바로 가기를 바탕화면에 저장하여 앱을 저장합니다.

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

최신 날짜별로 정렬된 다음 최신 앱 폴더 라이브러리/기본 설정으로 이동하여 목록 편집기에서 파일을 보십시오.

스위프트 3

print(UserDefaults.standard.dictionaryRepresentation())

MacOS 앱용
/Users/{User}/Library/Containers/com으로 이동합니다.{귀사}.{your app}/Data/Library/Preferences}를 클릭하여 앱의 pList를 Xcode로 엽니다.

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

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

이 질문의 정답을 읽은 후, 나는 iOS 시뮬레이터에 의해 사용되는 플리스트 파일을 여는 이 간단한 스크립트를 정리했다.NSUserDefaults(제 설정에 딱 맞는) 특정 설정을 상정하고 있지만, 다른 설정에서는 출발점이 될 수 있습니다.

$ 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 © :

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
    return true
}

그런 다음 플레이스트 파일을 직접 보고 저장된 파일을 확인할 수 있습니다.

상위 버전 SWIFT 4에서 동작합니다.

AppDelegate의 모든 메서드에 코드를 넣고 브레이크 포인트를 설정하기만 하면 됩니다.

**> let path =
> NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory,
> FileManager.SearchPathDomainMask.userDomainMask, true).first**

프로젝트를 실행할 때 "path"를 인쇄하면 userdefaults로 reach information.plist에 대한 경로가 나타납니다.그런 다음 finder로 이동하여 해당 경로를 해당 파일에 붙여넣기만 하면 됩니다.

시뮬레이터에 저장된 새로운 기본 설정 위치를 찾고 있는 사용자를 위한 것입니다.여기에 저장된 값이 있습니다.

/Users/vikas/Library/Developer/CoreSimulator/Devices/CE5A0444-BD98-4FEE-A839-92728D6E9895/data/Containers/Data/Application/F7430839-ED2C-408A-8A8E-FE7FFAABA8E2/Library/Preferences

단말기에서는 추측하기 어려운 큰 식별자가 있기 때문에 단말기나 파인더에서 검색해 보는 것이 좋습니다.

예를 들어 파일 이름은 {filename id.plist로 끝나야 합니다.com.sellerbuddy.online.plist단말기로 이동하여 앱 번들 식별자로 아래와 같은 입력을 누르면 됩니다.

find ~/Library/Developer/CoreSimulator/Devices -type f -name "com.sellerbuddy.online.plist"

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/1676938/easy-way-to-see-saved-nsuserdefaults

반응형