Xcode Device Simulator의 문서 디렉토리 경로


90

iOS 7에서 iOS 시뮬레이터의 문서 디렉토리는 다음 위치에서 찾을 수 있습니다.

/Users/Sabo/Library/Application Support/iPhone Simulator/

그러나 iOS 8 Beta Simulator 에서는 위의 디렉토리에서 iOS 8 에 해당하는 디렉토리를 찾을 수 없습니다 .

iOS 8 시뮬레이터의 문서 디렉토리 경로는 어디에 있습니까?

여기에 이미지 설명 입력


이것을 시도 하십시오 . 최신 앱 실행의 Documents 디렉토리를 직접 여는 앱이 있습니다.
NSRover



라이브러리 폴더를 찾을 수 없으면 숨겨져있을 수 있습니다. 이 명령을 터미널에 입력하면 숨김이 해제됩니다. chflags nohidden ~ / Library
simon_smiley

Xcode 플러그인이 마음에 들면 시뮬레이터 폴더 및 기타 여러 위치로 이동할 수있는 Xcode 플러그인 인 github.com/onmyway133/XcodeWay를 사용해보십시오
onmyway133

답변:


155

내 컴퓨터에서 경로는 다음과 같습니다.

~/Library/Developer/CoreSimulator/Devices/1A8DF360-B0A6-4815-95F3-68A6AB0BCC78/data/Container/Data/Application/

참고 : 이러한 긴 ID (예 : UDID)는 컴퓨터에서 다를 수 있습니다.


1
앱에서 CoreData를 사용하는 경우 폴더 위치를 검색하는 더 쉬운 방법이있을 수 있습니다. stackoverflow.com/a/25937606/1103584
DiscDev

12
아니요, 이것은 올바르지 않습니다. ObjC 프로젝트와 Swift 프로젝트 사이에는 구별이 없습니다. 사람들은 UDID에 (고유 장치 식별자)이고, 당신이 'xcrun의 simctl리스트'를 실행하여 당신을 볼 수 있습니다
제레미 허들 스턴 세쿼이아

@JeremyHuddlestonSequoia, 맞든 아니든 이것이 바로 SwiftObjC 프로젝트가 내 컴퓨터에 복사 된 방법입니다. 둘 다 시뮬레이터에서만 컴파일되었다고 언급 할 필요는 없습니다 (원래 질문이었습니다). 경우, 엑스 코드는 다른 언어에 대한 고유 식별 번호 (UDID)의 차이를 만들고, 당신이 정확하지 않은 생각, 당신은 애플에게보고해야 할 수도 있습니다.
holex 2014 년

7
Holex, 나는 당신의 진술이 틀렸다고 말하고 있습니다. 디자인이 틀렸다는 것이 아닙니다 (실제로 저는 CoreSimulator를 디자인 한 Apple의 사람이므로 제가 생각하는 것을 수정하는 첫 번째 사람이 될 것입니다. 잘못된). UDID는 별도의 장치에 해당합니다. swift 및 objc 프로젝트가 다른 UDID를 사용하는 유일한 이유는 프로젝트를 다른 시뮬레이터 장치에 배포했기 때문입니다 (예 : 하나는 iPhone 5s에 배포하고 다른 하나는 iPhone 6에 배포했습니다).
Jeremy Huddleston Sequoia

@JeremyHuddlestonSequoia, 자신감이 있으면 언제든지 내 대답을 수정할 수 있습니다.
holex

75

NSLog"AppDelegate"의 어딘가에 코드 아래에서 프로젝트를 실행하고 경로를 따르십시오. 이렇게하면 "~ / Library / Developer / CoreSimulator / Devices /"내부에서 무작위로 검색하는 대신 문서를 쉽게 찾을 수 있습니다.

목표 -C

NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);

Swift
Swift 1.2를 사용하는 경우 아래 코드를 사용하면 #if #endif블록으로 인해 Simulator를 사용할 때만 개발 중에 출력됩니다 .

#if arch(i386) || arch(x86_64)
  let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
  NSLog("Document Path: %@", documentsPath)
#endif

"/ Users / ankur / Library / Developer / CoreSimulator / Devices / 7BA821 ..."에서 경로를 복사 한 다음 " Finder "로 이동 한 다음 " 폴더로 이동 "또는 command+ shift+ g를 붙여넣고 경로를 붙여 넣습니다. 문서 디렉토리 :)


간단하고 효율적입니다!
loretoparisi

43

그냥 쓰기 에 울부 짖는 코드 AppDelegate에 -> didFinishLaunchingWithOptions
목표 C

#if TARGET_IPHONE_SIMULATOR 
// where are you? 
NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 
#endif 


스위프트 2.X

if let documentsPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.path {
    print("Documents Directory: " + documentsPath)   
}

스위프트 3.X

#if arch(i386) || arch(x86_64)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

스위프트 4.2

#if targetEnvironment(simulator)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

출력
/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A / data / Containers / Data / Application / 25174F64-7130-4B91-BC41-AC74257CCC6E / Documents

"/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A ..." 에서 경로를 복사 한 다음 " Finder "로 이동 한 다음 "폴더로 이동"또는 command + shift + g 및 경로를 붙여넣고 Mac에서 문서 디렉토리로 이동합니다.


앱이 포함 된 폴더를 어떻게 알 수 있습니까? 디렉토리가 너무 많습니다. 각각을 검색해야합니까?
KarenAnne 2014 년

귀하의 답변이 들립니다> stackoverflow.com/questions/24133022/…
Mitul Marsoniya

이것은 자신의 시뮬레이터에 대한 하드 코딩 된 경로입니다. 다른 사람에게는 작동하지 않습니다. 실제로 시뮬레이터를 다시 실행하면이 경로도 변경됩니다.
NSRover

#if TARGET_IPHONE_SIMULATOR // 어디 계세요? NSLog (@ "문서 디렉토리 : % @", [[[NSFileManager defaultManager] URLsForDirectory : NSDocumentDirectory inDomains : NSUserDomainMask] lastObject]); #endif
Mitul Marsoniya 2015 년

16

iOS 앱을 개발하는 동안 파일과 폴더를 쉽게 찾을 수있는 SimPholders라는 멋진 유틸리티 앱을 추천합니다. SimPholders2라는 새로운 시뮬레이터와 함께 작동하는 새 버전이 있습니다. simpholders.com 에서 찾을 수 있습니다.


iOS8 Simulator가 폴더 모호함에 묻혀 있지만 해당 앱이 iOS8을 지원하도록 업데이트되지 않았으므로 이제는 멋진 앱이 될 것입니다.
wibobm 2014 년

@wibobm. SimPholders2는 확실히 iOS 8.0 및 iOS 8.1을 지원합니다
JDibble

OMG. 나는 완전히 눈이 멀었을 것입니다. 감사합니다!
wibobm

16

여기에 많은 답변이 있음에도 불구하고 iOS 8.3 시뮬레이터의 폴더 구조가 어떻게 변경되었는지에 대한 이해를 제공하지 않으며 앱 데이터 (문서 폴더)를 찾는 빠른 방법을 제공하지 않습니다.

iOS 8 이후 앱의 데이터 저장 폴더는 앱의 실행 파일과 분리되어 있지만 iOS 7 이하의 폴더 구조는 동일합니다. 유일한 차이점은 모든 시뮬레이터 (다른 유형 및 버전)가 이제 하나의 큰 폴더에 있습니다.

따라서 iOS 8,7,6 시뮬레이터의 경로는 다음과 같습니다.

~/Library/Developer/CoreSimulator/Devices

모든 시뮬레이터는 이제 시뮬레이터를 재설정 할 때마다 변경되는 고유 식별자로 이름이 지정된 폴더에 포함됩니다.

Identifier로 이동하여 각 장치 및 시뮬레이터에 대한를 찾을 수 있습니다 Xcode > Window > Devices(식별자의 처음 3-4 개 문자는 기억하기에 충분합니다).

앱을 설치 한 앱을 찾으려면 Run scheme > devices(화면 2)를 살펴보십시오 .

화면 1

화면 2

이제 시뮬레이터를 식별 한 후 버전에 따라 폴더 구조가 매우 다릅니다.

iOS 8 에서 앱의 실행 파일과 데이터 폴더는 서로 다른 폴더에 있습니다.

실행 가능 : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

데이터 폴더 : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

문서 폴더 : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

아이폰 OS 7 단지 지금 기억하기 전에 모든 시뮬레이터 (위 참조) 같은 폴더에 같이 폴더 구조 아래 것은 동일합니다.


13

앱에서 CoreData를 사용하는 경우 터미널을 사용하여 sqlite 파일의 이름을 검색하는 것이 유용한 방법입니다.

find ~ -name my_app_db_name.sqlite

결과에는 앱을 실행 한 모든 시뮬레이터의 전체 파일 경로가 나열됩니다.

정말 Apple이 "Finder의 Reveal Documents 폴더"와 같은 버튼을 iOS 시뮬레이터 파일 메뉴에 추가하기를 바랍니다.


1
터미널을 좋아해야합니다.
kakubei 2014

2
이것은 이것을 찾는 꽤 긴 방법 인 것 같습니다. 전체 홈 디렉토리를 검색 하시겠습니까?
shortstuffsushi

11

~ / Library / Developer / CoreSimulator / Devices / 경로를 살펴 봐야하는 것이 맞습니다.

그러나 내가보고있는 문제는 앱을 실행할 때마다 경로가 계속 변경된다는 것입니다. 경로에는 Application 문자열 뒤에 다른 긴 ID 세트가 포함되어 있으며 앱을 실행할 때마다 계속 변경됩니다. 이것은 기본적으로 내 앱이 다음에 실행될 때 캐시 된 데이터가 없다는 것을 의미합니다.


나도보고있다.
Nathan Jones

5
경로는 앱을 실행할 때마다 계속 변경되지 않습니다. 라이브러리에있는 장치 당 하나의 경로가 있습니다. 고려해야 할 하위 디렉토리를 확인하려면 'xcrun simctl list'를 실행하여 장치 및 해당 UDID 목록을 확인하십시오.
Jeremy Huddleston Sequoia

9

iOS 9.2 및 Xcode 7.2에서 다음 스크립트는 마지막으로 사용 된 시뮬레이터에서 마지막으로 설치된 애플리케이션의 Documents 폴더를 엽니 다.

cd ~/Library/Developer/CoreSimulator/Devices/
cd `ls -t | head -n 1`/data/Containers/Data/Application 
cd `ls -t | head -n 1`/Documents
open .

쉽게 실행할 수있는 스크립트를 만들려면 "Run Shell Script"를 사용하여 Automator 응용 프로그램에 넣으십시오.

Automator 애플리케이션 내에서 쉘 스크립트 실행


7

Xcode 6.0에서 CoreSimulator를 채택함에 따라 데이터 디렉토리는 버전이 아닌 장치 단위입니다. 데이터 디렉토리는 ~ / Library / Developer / CoreSimulator / Devices // data이며 'xcrun simctl list'에서 확인할 수 있습니다.

Xcode 5.x 또는 이전 버전으로 롤백 할 필요가없는 경우 ~ / Library / Application Support / iPhone Simulator 및 ~ / Library / Logs / iOS Simulator를 안전하게 삭제할 수 있습니다.


권위있는 답변으로 보일 수있는 답변을 주셔서 감사합니다. 시뮬레이터 내에서 특정 앱의 위치를 ​​찾는 쉬운 방법 (앱 내에서 로깅 제외)이 있습니까?
fzwo

죄송합니다. 여기와 포럼에서 이에 대한 몇 가지 요청을 보았습니다. bugreport.apple.com
Jeremy Huddleston Sequoia

7

업데이트 : Xcode 11.5 • Swift 5.2

if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
    print(documentsPath)   // "var/folder/.../documents\n" copy the full path
}

Finder로 이동하여 command-shift-g (또는 메뉴 막대 아래의 이동> 폴더로 이동 ...)를 누르고 전체 경로 "var / folder /.../ documents"를 붙여넣고 go를 누릅니다.


4

시험 ~/Library/Developer/CoreSimulator/Devices/


4

CoreData를 사용하여 전체 경로를 저장할 때 동일한 문제에 직면했습니다. 전체 경로를 검색 할 때 앱이 다시 시작될 때마다 문서 폴더 UUID가 다르기 때문에 null을 반환합니다. 다음은 내 결심입니다.

  1. CoreData에 문서 / 파일의 상대 경로 만 저장해야합니다. 예 : "/Users/yourname/.../Applications/UUID/Document/Files/image.jpg"대신 "Files / image.jpg"를 저장합니다.
  2. 다음을 사용하여 앱 문서 위치를 검색합니다.

    [[[NSFileManager defaultManager] URLsForDirectory : NSDocumentDirectory inDomains : NSUserDomainMask] lastObject];

  3. # 2와 # 1을 모두 연결하여 검색하려는 문서 / 파일의 전체 경로를 가져옵니다.
Apple Developer Note : https://developer.apple.com/library/ios/technotes/tn2406/_index.html을 참조 할 수 있습니다.


3

iOS 8 시뮬레이터의 문서 디렉토리는 어디에 있습니까?

iPhone Simulator가 Xcode 6과 함께 변경된 것을 눈치 채 셨을 것입니다. 물론 시뮬레이션 된 앱의 Documents Directory 경로도 변경되었습니다. 때때로 우리는 그것을 살펴 봐야 할 수도 있습니다.

그 경로를 찾는 것은 예전처럼 쉽지 않습니다. 즉, Library / Application Support / iPhone Simulator / 7.1 / Applications / 뒤에 앱을 나타내는 암호 번호가 뒤 따릅니다.

Xcode 6 및 iOS 8부터 여기에서 찾을 수 있습니다 : Library / Developer / CoreSimulator / Devices / cryptic number / data / Containers / Data / Application / cryptic number

http://pinkstone.co.uk/where-is-the-documents-directory-for-the-ios-8-simulator/


3

Appdelegate에서 문서 및 캐시 디렉터리를 보려면 다음 코드를 입력하십시오.

#if TARGET_IPHONE_SIMULATOR
    NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
    NSArray* cachePathArray = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString* cachePath = [cachePathArray lastObject];
    NSLog(@"Cache Directory: %@", cachePath);
#endif

로그 :

문서 디렉토리 : / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Documents /

캐시 디렉토리 : / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Library / Caches


3

앱 폴더로 이동하여 무슨 일이 일어나고 있는지 확인하고 미로 UUDID를 통과하지 않으려는 경우 다음을 만들었습니다. https://github.com/kallewoof/plget

그리고 그것을 사용하여 이것을 만들었습니다 : https://gist.github.com/kallewoof/de4899aabde564f62687

기본적으로 일부 앱의 폴더로 이동하려면 다음을 수행합니다.

$ cd ~/iosapps
$ ./app.sh
$ ls -l
total 152
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/BD660795-9131-4A5A-9A5D-074459F6A4BF
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/A74C9F8B-37E0-4D89-80F9-48A15599D404
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/07BA5718-CF3B-42C7-B501-762E02F9756E
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/5A4642A4-B598-429F-ADC9-BB15D5CEE9B0
-rwxr-xr-x  1 me  staff  3282 Nov 14 17:04 app.sh
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/69F7E3EF-B450-4840-826D-3830E79C247A
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/976D1E91-DA9E-4DA0-800D-52D1AE527AC6
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/473F8259-EE11-4417-B04E-6FBA7BF2ED05
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/CB21C38E-B978-4B8F-99D1-EAC7F10BD894
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.otherapp-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/DE3FF8F1-303D-41FA-AD8D-43B22DDADCDE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-7-1_iPad-Retina.dr -> simulator/4DC11775-F2B5-4447-98EB-FC5C1DB562AD/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-2.dr -> simulator/6FC02AE7-27B4-4DBF-92F1-CCFEBDCAC5EE/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-Retina.dr -> simulator/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-1_iPad-Retina.dr -> simulator/414E8875-8875-4088-B17A-200202219A34/data
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 org.cocoapods.demo.pajdeg-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/C3069623-D55D-462C-82E0-E896C942F7DE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 simulator -> /Users/me/Library/Developer/CoreSimulator/Devices

./app.sh부품 동기화 링크. 6.0부터 Xcode에서 실행할 때마다 앱이 UUID를 변경하기 때문에 기본적으로 항상 필요합니다. 또한 불행히도 앱은 8.x의 경우 번들 ID로, <8의 경우 앱 이름으로 표시됩니다.


3

Ankur의 답변을 기반으로하지만 Swift 사용자에게는 다음과 같습니다.

let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")

ViewDidLoad 안에 넣으면 앱 실행 즉시 출력됩니다.


3

시뮬레이터는 다음 위치에 있습니다.

~/Library/Developer/CoreSimulator/

여기에서는 UUID 이름이있는 디렉토리로 나열됩니다. 최신 항목을 찾으려면 '수정 날짜'별 정렬을 사용하십시오. 내부로 이동 :

/data/Containers/Data/Application/

여기에 해당 장치의 모든 응용 프로그램 목록이 표시됩니다. 다시 정렬하여 최신 앱을 얻을 수 있습니다.

참고 : Xcode는 앱을 실행할 때마다 디렉터리 이름을 변경하므로 데스크톱에서 별칭 / 바로 가기를 만드는 데 의존하지 마십시오.

가장 쉬운 방법은 모든 작업을 자동으로 수행하는 여기 에서 앱을 사용하는 것입니다.


2

시뮬레이터 디렉토리는 Xcode 6 베타에서 다음으로 이동되었습니다.

 ~/Library/Developer/CoreSimulator

앱의 Documents 폴더로 디렉토리를 검색하는 것은 조금 더 어렵습니다. 예 :

~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite

2

경로를 찾는 가장 좋은 방법은 코드를 사용하는 것입니다.

Swift를 사용 하여 AppDelegate.swift 의 함수 애플리케이션 안에 아래 코드를 붙여 넣으 세요.

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsPath = paths.first as String
println(documentsPath)

Obj-C 코드의 경우 @Ankur의 답변을보십시오.


2

Swift 3.x의 경우

if let documentsPath = FileManager.default.urls(for:.documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: " + documentsPath)
    }

1

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first {
    debugPrint("documentsPath = \(documentsPath)")
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.