iPhone Simulator는 데이터를 어디에 저장합니까?


234

앱 데이터를 저장하는 데 사용하는 SQLite DB가 있는데 내부에서 문제를 디버그하여 확인할 수 있습니다.하지만 iPhone Simulator는 일반적으로 데이터를 어디에 저장합니까?

답변:


291

SDK 3.2에 대해 올바른 대답이 맞습니다. SDK 4는 해당 경로 의 / User 폴더를 시뮬레이션 할 수있는 각 기존 iPhone OS / iOS 버전의 숫자로 대체 하므로 경로는 다음과 같습니다.

~ / 라이브러리 / 응용 프로그램 지원 / iPhone 시뮬레이터 / [OS 버전] / 응용 프로그램 / [appGUID] /

이전 SDK를 함께 설치 한 경우 3.1.x 시뮬레이터는 다음 위치에 데이터를 계속 저장합니다.

~ / 라이브러리 / 응용 프로그램 지원 / iPhone 시뮬레이터 / 사용자 / 응용 프로그램 / [appGUID] /

Xcode6 및 iOS8의 경우

~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / data / Containers / Data / Application / [AppID] /


6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert

174
GUID가 자신의 파인더에서 검색하는 대신 pisca46의 답을 아래 참고하십시오 po NSHomeDirectory(). 디버거를 입력 하십시오. 이동> 폴더로 이동 (Cmd-Shift-G)으로 잘라 붙여 넣습니다.
mackworth

시뮬레이터를 시작할 때 8.2라고 표시되지만이 폴더를 볼 때 유일한 버전 번호는 7.1입니다. 그것은 내가 잘못된 장소를보고 있다는 것을 걱정하게한다.
bugloaf


4
이 대답 이 얼마나 간단하고, 편리하며, 오류가 적으며, 답답하지 않는지 강조하기는 어렵습니다 (위의 맥 워스의 의견에서 권장). 당신은 단순히에 줄을 추가 할 수 있습니다 NSLog당신이을 AppDelegatedidFinishLaunchingWithOptions:, 또는 당신이 할 수있는 po NSHomeDirectory()디버거하십시오. 두 경우 모두 문자열을 복사하여 파인더에서로 엽니 다 Cmd+Shift+G. 이것은 변경 되는 것을 알 필요없이 표준 명령을 요구 하기 때문에 더 잘 작동합니다 .
Benjohn

93

터미널이없는 앱 데이터의 위치를 ​​찾는 또 다른 방법은 더 빠릅니다.

  1. 시뮬레이터에서 앱을 시작하십시오.
  2. 활동 모니터 열기
  3. CPU 탭에서 앱 이름을 찾으십시오.
  4. 두 번 클릭하고 "파일 및 포트 열기"를여십시오

여기에 이미지 설명을 입력하십시오


1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];장치 식별자를 제공합니다
oabarca

@oabarca 식별자는 시뮬레이터의 deviceID 또는 appFolder와 관련이 없습니다. 나는 엑스 코드 11.2.1와 아이폰 OS 13.2.2 사용하고 있습니다
DawnSong

78

그것을 발견:

~/Library/Application Support/iPhone Simulator/User/

16
검색 방법 : Finder에서 CMD + SHIFT + G를 누르십시오
rohan-patel

dsmudger가 아래의 업데이트 된 응답을 참조하십시오. 현재 정답입니다.
Tom Susel

74

iOS 8 ~ / 라이브러리 / 개발자 / CoreSimulator / 장치 / [장치 ID] / 데이터 / 응용 프로그램 / [appGUID] / 문서 /


1
장치 ID를 얻는 방법은 무엇입니까?
msmq

2
@msmq tryxcrun instruments -s
Shazron

11
@msmq 현재 시뮬레이터, 하드웨어-> 장치-> 장치 관리 ...를 켜십시오.-> "시뮬레이터"목록에서 시뮬레이터를 선택하십시오. 그런 다음 오른쪽에 "식별자"가 있습니다. 이것은 장치 ID입니다.
RichX

여기서 [appGUID]를 찾는 방법은 무엇입니까?
Yang You

66

사자에 Users/[username]/Library 숨겨져 있습니다.

Finder에서 간단히 보려면 ​​화면 상단의 '이동'메뉴를 클릭하고 'alt'키를 누른 상태에서 'Library'를 표시하십시오.

'라이브러리'를 클릭하면 이전에 숨겨진 라이브러리 폴더를 볼 수 있습니다.

이전에 조언 한 내용 :

사용하다

chflags nohidden /users/[username]/library

터미널에서 폴더를 표시합니다.


1
~ / Library / Application Support / iPhone Simulator / [OS version] / Applications / [appGUID] /
Rafael Moreira

일반 사용자에게는 흥미로운 제안이지만 iOS / OS X 개발자는 꽤 정기적으로 라이브러리에 액세스해야하므로 다시 숨기고 싶지는 않습니다. (다시, 많은 개발자들이 Finder 대신 Terminal을 사용하는 것 같아요?)
ArtOfWarfare

58

가장 쉬운 방법.

  1. 어딘가에 브레이크 포인트를 잡아라.

  2. 입력 po NSHomeDirectory()에서 콘솔 창

결과:

(lldb) po NSHomeDirectory () / Users / usernam / Library / Developer / CoreSimulator / Devices / 4734F8C7-B90F-4566-8E89-5060505E387F / data / Containers / Data / Application / 395818BB-6D0F-499F-AAFE-068A783D9753


1
내가 이걸 이미 알고 있다면 이것은 정답
Ivan Cantarino

다른 모든 대답도 정확하다고 생각합니다. 그러나 이것은 나에게 쉬운 것처럼 보인다 :-]
Lal Krishna

37

시뮬레이터가 실행 중이면 모든 앱 컨테이너의 경로를 얻을 수 있습니다.

xcrun simctl get_app_container booted <app bundle identifier>

출력 예 :

$ xcrun simctl get_app_container booted com.example.app
/Users/jappleseed/Library/Developer/CoreSimulator/Devices/7FB6CB8F-63CB-4F27-BDAB-884814DA6FE0/data/Containers/Bundle/Application/466AE987-76BC-47CF-A207-266E65E7DE0A/example.app

"부팅 된"은 대부분 대체 될 수 있습니다 simctl 장치 UDID가 필요한 곳이면 명령 .

당신은 장치 목록을 볼 수 있습니다 xcrun simctl list 로 특정 명령에 대한 도움말을 얻을 수 xcrun simctl help있습니다.

최신 정보 : Xcode 8.3의 인기있는 요청에 따라 이제 "app", "data", "groups"또는 app group identifier를 추가하여 원하는 컨테이너 종류를 지정할 수 있습니다.

데이터 컨테이너를 가져 오려면

$ xcrun simctl get_app_container booted com.example.app data

훌륭한 것. device_id 및 appId를 얻기 위해 명령을 실행할 필요가 없습니다. 모든 것을 얻는 한 걸음
iamhite

이것은 가장 안정적인 방법이기 때문에 받아 들여야합니다.
Olha

35

Xcode 5에서는 아래 코드를 사용할 수 있습니다.

#import <Foundation/NSFileManager.h>

과:

NSString *homeDir = NSHomeDirectory();
NSLog(@"%@",homeDir);

결과는 다음과 같습니다.

"/Users/<your user name>/Library/Application Support/iPhone Simulator/7.1/Applications/hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh"

hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhiOS 앱을 식별하는 16 진 문자열이 어디에 있습니까 ?


16
이것은 또한 디버거에서도 작동합니다 : po NSHomeDirectory()
mackworth

30

Xcode 6.0이 iOS 8 시뮬레이터의 경우이 위치를 다시 한 번 이동 한 것 같습니다.

~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / data / Containers / Data / Application / [AppID]


4
~ / Library / Developer / CoreSimulator / Devices / [DeviceID] /에는 "device.plist"라는 .plist 파일도 있습니다. 내부를 보면 iphone-6 또는 iphone-5s와 같은 장치 이름을 찾을 수 있습니다. deviceID는 매우 혼란 스러우므로 .plist 파일 내부를 봐야한다고 생각합니다.
EFE

1
AppID를 얻는 방법?
표시 이름

1
'ls -l'을 사용하고 가장 최근에 생성 된 앱 파일을 파악하여 앱 ID를 찾는 것을 부정했습니다. 다른 사람들에게도 효과가있을 수 있습니다.
Maya Webster

1
또는 파인더에서 "날짜 생성"을 기준으로 목록 상단에 앱을 가져옵니다.
Ammar Mujeeb

30

앱이 시뮬레이터 내의 위치를 ​​찾는 가장 쉬운 방법 중 하나입니다. 사용자 "NSTemporaryDirectory ()"

단계

  1. 앱 내 어디서나 중단 점을 적용하고 앱을 실행하십시오.
  2. 앱이 중단 점에서 중지되면 Xcode 콘솔에서 다음 명령을 입력하십시오.

    po NSTemporaryDirectory ()

적절한 통찰력은 아래 이미지를 참조하십시오여기에 이미지 설명을 입력하십시오

이제 임시 폴더까지의 정확한 경로가 있습니다. 돌아가서 모든 앱 관련 폴더를 볼 수 있습니다.

이것이 도움이되기를 바랍니다. 행복한 코딩 :)


1
멋진 팁이지만 왜 그렇지 po NSHomeDirectory()않습니까?
Code Roadie

9

Xcode가 2019+ Catalina, Xcode 11.0에서 시뮬레이터를 저장하는 위치

런타임

$ open /Library/Developer/CoreSimulator/Profiles/Runtimes

예를 들면 다음 iOS 13.0과 같습니다. , watchOS 6.0공간이 가장 많이 차지합니다. 각각 최대 5GB까지 가능

장치

$ open ~/Library/Developer/CoreSimulator/Devices

예를 들면 다음 iPhone Xr과 같습니다. , iPhone 11 Pro Max. 이들은 일반적으로 각각 <15mb입니다.

설명

시뮬레이터는 런타임과 장치로 나뉩니다. 당신이 실행하는 경우$ xcrun simctl list 하면 개요를 볼 수 있지만 시뮬레이터의 실제 위치를 찾으려면이 디렉토리를 살펴보십시오.

지원하지 않는 런타임을 삭제하는 것이 안전합니다. 원하는 경우 나중에 다시 설치할 수 있습니다.


8

간단히 이렇게하십시오 :

NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@", docDirPath);

그리고 당신은 다음과 같이 생각할 것입니다 :

/ Users / admin / Library / Developer / CoreSimulator / Devices / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / data / Containers / Data / Application / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / 문서

XCode 버전에 관계없이 앱의 문서 폴더가 표시됩니다. (Finder에서 "폴더로 이동 ..."명령을 사용하고 "~ / library"경로를 지정하십시오).

문자열 경로의 신속한 버전 :

let docDirPath =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                    .userDomainMask, true).first
print(docDirPath)

및 폴더 URL :

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)

거의 같은 답변을 게시하려고했습니다. 이 방법은 모든 버전의 iOS 시뮬레이터에서 항상 올바른 경로를 제공하는 이점이 있습니다. 그건 그렇고, 당신이 그것을 기록하지 않으려면 디버거에서 url 변수의 값을 복사 할 수도 있습니다;)
Moose

7

iOS 5에서 :

/ Users / [사용자 이름] / Library / Application Support / iPhone Simulator / 5.0 / Applications / [AppGUID] /


6

Xcode 4.6의 경우 다음 경로에 저장됩니다 ...

/ Users / [현재 사용자] / Library / Application Support / iPhone Simulator / 6.1 / Applications /

프로그래밍 방식으로 다음 코드를 사용하려면

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);

2
스위프트 :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect

4

iOS 8의 경우

문서 폴더 를 찾으려면 문서 폴더에 파일을 쓸 수 있습니다.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Words.txt"];
NSString *content = @"Apple";
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];

에서 말하십시오 didFinishLaunchingWithOptions.

그런 다음 터미널을 열고 폴더를 찾을 수 있습니다.

$ find ~/Library -name Words.txt

2

누군가 사자에서 여전히이 문제가 발생하면 ~ / 라이브러리 디렉토리를 볼 수있는 19 가지 팁이있는 훌륭한 기사가 있습니다. Dan Frakes의 기사를 여기에서 찾으십시오. http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

시뮬레이터의 디렉토리가 아래에 있음을 기억하십시오

~ / 라이브러리 / 응용 프로그램 지원 / iPhone 시뮬레이터 / 사용자 /


2

macOS Catalina의 경우 다음에서 DB를 찾았습니다.

~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db

를 얻으려면 applicationId수정 된 날짜별로 폴더를 정렬했지만 더 좋은 방법이 있다고 확신합니다.


1

Xcode를 자주 사용하지 않는 반응 형 네이티브 사용자의 경우을 사용하면 find됩니다. 터미널을 열고 데이터베이스 이름으로 검색하십시오.

$ find ~/Library/Developer -name 'myname.db'

정확한 이름을 모르면 와일드 카드를 사용할 수 있습니다.

$ find ~/Library/Developer -name 'myname.*'


0

아래 코드를 사용해보십시오.

NSString *fileName = @"Demo.pdf";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
    NSLog(@"File path%@",pdfFileName);

0

시뮬레이터에서 xCode로 빌드하는 앱이있는 사전을 열려면 다음을 수행하십시오.

  1. 파인더 와인 더 열기 (웃는 얼굴 아이콘)
  2. 그런 다음 이동-> 폴더로 이동을 클릭하십시오.
  3. 유형 : ~ / 라이브러리 / 응용 프로그램 지원 / iPhone 시뮬레이터
  4. 디렉토리는 다른 시뮬레이터의 iOS 버전입니다
  5. 하위 디렉토리는 시뮬레이터에 설치된 앱입니다.
  6. 도큐멘트 폴더는 iCloud에 백업되는 컨텐츠를 사용자가 생성 한 곳입니다.

0

이 프로그램과 관련이 없지만 파인더 SimPholders 에서이 중 하나를 열려고 하면 엄청나게 쉽습니다.

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