Xcode 6 iPhone 시뮬레이터 응용 프로그램 지원 위치


137

Xcode 6에는 Core Data를 사용하는 앱이 있지만 iOS 8 iPhone Simulator의 응용 프로그램 지원에는 폴더가 없습니다. 내 파일과 Core Data sqlite 데이터베이스는 어디에 저장됩니까?


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

핵심 데이터 파일이있는 경로를 프로그래밍 방식으로 얻는 방법을 보여주는 답변 (다른 답변의 맨 아래)을 추가했습니다.
SpokaneDude


"NSTemporaryDirectory ()"를 사용하십시오. this- 봐 stackoverflow.com/questions/1108076/...
Shubhendu

답변:


296

시뮬레이터 디렉토리는 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

4
이것은 일반적으로 정확하지만 내부 폴더 변경이 더있는 것 같습니다. 이것은 Xcode Beta 3에서 나를 위해 작동하는 경로입니다.~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn

1
숫자 또는 무차별 대입이 데이터에 접근 할 수있는 유일한 기회라는 것을 이해하는 방법이 있습니까?
vir us

89
NSLog (@ "앱 디렉토리 : % @", [[[NSFileManager defaultManager] URLsForDirectory : NSDocumentDirectory inDomains : NSUserDomainMask] lastObject]); -데이터 폴더의 전체 경로를 인쇄합니다
vir us

2
빠른 디버깅을 위해 앱의 문서 디렉토리에 대한 지속적인 바로 가기가 필요했습니다. 적용 후, FinishLaunchingWithOptions를 완료했습니다. #if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif iOS8 + XCode6가 빌드 할 때마다 내 앱의 데이터 GUID를 변경하더라도 작동하는 simlink가 있습니다.
seabass

32
xcrun simctl list명령을 사용하여 시뮬레이터 이름과 장치 UDID 간의 대응 관계를 확인할 수 있습니다. 또는 더 구체적으로 xcrun simctl list devices명령.
ThomasW

36

SimPholders 를 사용 하여 시뮬레이터 파일을 찾는 것이 좋습니다 . 시뮬레이터 앱을 추적하고 해당 폴더와 컨텐츠로 직접 이동할 수있는 메뉴 표시 줄 항목입니다. 그것은 굉장.


또한 Yosemite의 SimPholders2에 문제가 있었으므로 원하는 시뮬레이터 및 앱에서 Finder 창을 찾아서 여는 데 도움이되는 명령 줄 스크립트를 시작했습니다. 폴더와 메타 데이터 plist를 통해 모든 시뮬레이터 폴더와 Apps를 나열합니다. 관심이 있으시면 여기를
Rodrigo Lima

SimPholders2는 요세미티에서 작동하지만 약간 느립니다. 상태 표시 줄에서 아이콘을 클릭하면 몇 초 정도 기다리면 나타납니다.
Jason

요세미티 + Xcode 6.3의 대단한 작품입니다.
TruMan1 2016 년

21

SimulatorManager 응용 프로그램이 매우 유용하다는 것을 알았습니다 . 설치된 시뮬레이터의 응용 프로그램 폴더로 직접 이동합니다. 7.1, 8.0 및 8.1 시뮬레이터로 시도했습니다.

SimulatorManager는 시스템 트레이에 아이콘으로 있으며 "로그인시 시작"옵션을 제공합니다.

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

참고 : 이것은 Xcode 6 (필자의 경우 6.1.1) 이상에서만 작동합니다.

희망이 도움이됩니다!


Amar, SimulatorManager를 어떻게 설치합니까? 나는 그것이 Xcode에 플러그인이라고 생각했지만 그것은 Xcode 프로젝트입니다
malena

1
상단 표시 줄에서 제품-> 아카이브->를 선택한 다음 다시 서명하지 않고 Mac 응용 프로그램으로 아카이브 내보내기 (마지막 옵션) 일반 응용 프로그램처럼 Application 폴더에 .app 파일을 넣을 수 있습니다. ..
Heckscheibe

11

.sqlite 파일이 AppDelegate.m에 저장된 위치를 알려면 다음 코드를 추가하십시오.

- (NSURL *)applicationDocumentsDirectory
{
    NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory      inDomains:NSUserDomainMask] lastObject]);

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

이제 AppDelegate.m에서이 메소드를 호출하십시오.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

  //call here
   [self applicationDocumentsDirectory];

}

큰 .. 여러 시뮬레이터가있을 때 특히 유용
Yasitha Waduge을

6

이것은 신속하게 나를 위해 일했습니다.

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")

3

나는 얼마 동안 이것과 씨름했다. 단순히 내 지역 sqlite db에 도착하는 것은 큰 고통이되었습니다. 이 스크립트를 작성하고 XCode 내부의 코드 스 니펫으로 만들었습니다. 내 appDelegate 안에 appDidFinishLaunching 안에 넣습니다.


//xcode 6 moves the documents dir every time. haven't found out why yet. 

    #if DEBUG 

         NSLog(@"caching documents dir for xcode 6. %@", [NSBundle mainBundle]); 

         NSString *toFile = @"XCodePaths/lastBuild.txt"; NSError *err = nil; 

         [DOCS_DIR writeToFile:toFile atomically:YES encoding:NSUTF8StringEncoding error:&err]; 

         if(err) 
            NSLog(@"%@", [err localizedDescription]);

         NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];   

         NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; 

         remove([aliasPath UTF8String]); 

         [[NSFileManager defaultManager] createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; 

     #endif

이것은 드라이브의 루트에 simlink를 만듭니다. (처음으로이 폴더를 직접 작성하여 chmod하거나 다른 위치로 변경할 수 있습니다.) 그런 다음 xcodeway 플러그인 https://github.com/onmyway133/XcodeWay를 설치했습니다.

cmd + d를 누르기 위해 약간 수정했습니다. 현재 응용 프로그램의 영구 문서 디렉토리에 파인더 와인 더가 열립니다. 이 방법으로 XCode가 경로를 몇 번이나 변경하든 실행시에만 변경되며 각 실행마다 즉시 simlink를 업데이트합니다.

나는 이것이 다른 사람들에게 유용하기를 바랍니다!


고마워, iOS 8 시뮬레이터 폴더를 지원하도록 XcodeWay를 업데이트했다
onmyway133

3

파인더 열기> 라이브러리> 개발자> CoreSimulator> 장치

그런 다음 파인더에서 배열 변경 아이콘을 클릭하여 추가 된 날짜를 선택하십시오.

앱> 데이터> 컨테이너> 데이터> 애플리케이션>을 선택하십시오.

앱을 선택하십시오.> 문서> 여기에 db 파일이 있습니다.

나의 경우에는:

/Users/pluto/Library/Developer/CoreSimulator/Devices/A75107D2-A535-415A-865D-978B2555370B/data/Containers/Data/Application/265A12BC-FF5B-4235-B5EF-6022B83754B4/Documents/dboPhotoBucket.sqlite

그렇지 않으면 다음을 수행하십시오.

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

-데이터 폴더의 전체 경로를 인쇄합니다.

빠른:

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")

스위프트 3.0 :let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
AtomicBoolean

2

Finder를 사용하여 폴더로 이동하고 주어진 기본 경로를 입력하여 응용 프로그램 폴더에 도달하십시오.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

NSLog(@"%@",basePath);

1

시뮬레이터는 ~ / Library / Developer / CoreSimulator / Devices / ...에 파일을 넣지 만 / Devices 이후의 경로는 모든 사람에게 다릅니다.

이 편리한 방법을 사용하십시오. 현재 사용자의 임시 디렉토리 경로를 리턴하며 인수를 사용하지 않습니다.

NSString * NSTemporaryDirectory ( void );

그래서 내 ViewController 클래스에서 일반적으로 CoreData 저장 파일을 가져와야 할 때 참조 용으로 viewDidLoad 에이 줄을 넣습니다. 도움이 되었기를 바랍니다.

  NSLog(@"FILE PATH :%@", NSTemporaryDirectory());

(참고 : 경로로 이동하려면 파인더 메뉴에서 이동을 클릭하고 ~ / Library를 입력하여 숨겨진 디렉토리를 연 다음 파인더 창에서 콘솔에 표시된 경로를 클릭하십시오.)


1

이 위치는 Swift를 사용하는 경우 다시 한 번 변경되었습니다.이 폴더를 사용하여 폴더의 위치를 ​​찾으십시오 (이것은 Apple이 귀하를 위해 생성하는 AppDelegate.swift 파일에서 복사되므로 컴퓨터에서 작동하지 않으면 검색하십시오) 올바른 구문의 파일은 Xcode 6.1 및 iOS 8 시뮬레이터를 사용하여 작동합니다.

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

1

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

~/Library/Developer/CoreSimulator/

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

/data/Containers/Data/Application/

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

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

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


1

시뮬레이터를 위해 만들어진 최신 앱을 압축하여 데스크탑에 압축하는이 스크립트를 만들었습니다.

https://gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c

#!/bin/bash

DESTINATION_DIR="$HOME/Desktop"
APP_PATH=$(find ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Bundle/Application/*/*.app -type d -maxdepth 0 -print0 | xargs -0 ls -td | head -n1)
APP_DIRNAME=$(dirname "$APP_PATH")
APP_BASENAME=$(basename "$APP_PATH")
FILE_NAME="${APP_BASENAME%.*}"

cd "$APP_DIRNAME"
zip -qr "$DESTINATION_DIR/$FILE_NAME.zip" "$APP_BASENAME"

1

Swift 4 또는 Swift 5에서는을 사용할 수 있습니다 NSHomeDirectory().

Xcode 10 (또는 Xcode 11)에서 가장 쉬운 방법은 응용 프로그램을 중단 (예 : 중단 점에 도달 할 때)하고 디버거 콘솔 에서이 줄을 실행하는 것입니다.

po NSHomeDirectory()

po 인쇄 객체를 나타내며 대부분의 것을 인쇄합니다


0
 1.   NSTemporaryDirectory() gives this:

    /Users/spokaneDude/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/Data/Application/199B1ACA-A80B-44BD-8E5E-DDF3DCF0D8D9/tmp

 2. remove "/tmp" replacing it with "/Library/Application Support/<app name>/"  --> is where the .sqlite files reside

0
  1. Swift 4에서는 아래 코드를 사용하여 앱의 홈 디렉토리를 얻을 수 있습니다. 앱의 문서 디렉토리가 있습니다.

    print(NSHomeDirectory())

  2. 앱의 홈 디렉토리가 변경 가능하다는 것을 이미 알고 있다고 생각하므로 코드베이스에 코드를 추가하지 않으려면 SimPholder 가 좋은 도구입니다.

  3. 또한 앱의 홈 디렉토리가 변경 될 때마다 동일한 SQLite 데이터베이스를 닫았다가 다시 여는 시간을 절약 할 수있는 도구가 있는지 궁금 할 것입니다. 그리고 대답은 예 입니다. 내가 아는 도구는 SQLiteFlow 입니다. 문서에서 다음과 같이 말합니다.

    데이터베이스 파일 이름 또는 디렉토리 변경을 처리하십시오. 이로 인해 SQLiteFlow는 iOS 시뮬레이터의 SQLite 데이터베이스와 호환됩니다.


0

여기입니다 마지막으로 사용 된 시뮬레이터 및 응용 프로그램. sh를 실행하고 인쇄 된 텍스트를 복사하고 파인더에 표시하기 위해 붙여 넣기 및 실행 명령을 실행하십시오.

#!/bin/zsh

lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`

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