Vị trí hỗ trợ ứng dụng Xcode 6 iPhone Simulator


137

Trong Xcode 6, tôi có một ứng dụng tôi đang sử dụng Core Data, nhưng không có thư mục nào trong Hỗ trợ ứng dụng cho Trình mô phỏng iPhone iOS 8. Các tập tin và cơ sở dữ liệu sqlite Core Data của tôi đang được lưu trữ ở đâu?


Hãy thử điều này . Có một ứng dụng trực tiếp mở thư mục Tài liệu của ứng dụng mới nhất đang chạy.
NSRover

Tôi đã thêm một câu trả lời (ở dưới cùng của các câu trả lời khác) cho biết cách lập trình lấy đường dẫn nơi chứa các tệp Dữ liệu lõi.
SpokaneDude


Sử dụng "NSTceedDirectory ()". Nhìn this- stackoverflow.com/questions/1108076/...
Shubhendu

Câu trả lời:


296

Thư mục giả lập đã được chuyển với Xcode 6 beta sang ...

~/Library/Developer/CoreSimulator

Duyệt thư mục đến thư mục Tài liệu của ứng dụng của bạn khó khăn hơn một chút, ví dụ:

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

4
Điều này nói chung là đúng nhưng có vẻ như có nhiều thay đổi thư mục nội bộ hơn. Đây là đường dẫn phù hợp với tôi trong Xcode Beta 3:~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn

1
Có cách nào để hiểu rằng những con số hoặc sức mạnh vũ phu là cơ hội duy nhất để có được dữ liệu?
vir chúng tôi

89
NSLog (@ "ứng dụng dir:% @", [[[NSFileManager defaultManager] URLForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); - sẽ in đường dẫn đầy đủ đến thư mục dữ liệu
vir us

2
Tôi cần một lối tắt liên tục đến thư mục tài liệu của ứng dụng để gỡ lỗi nhanh. Sau khi ứng dụng didFinishLaunchingWithOptions. #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 Bây giờ tôi đã có một simlink hoạt động, mặc dù iOS8 + XCode6 thay đổi dữ liệu GUID của ứng dụng của tôi mỗi khi tôi xây dựng.
cá chẽm

32
Các xcrun simctl listlệnh có thể được sử dụng để xem sự tương ứng giữa các tên giả và UDID thiết bị. Hay cụ thể hơn là xcrun simctl list devicesmệnh lệnh.
ThomasW

36

Tôi sẽ đề nghị bạn sử dụng SimPholder để tìm các tệp Trình mô phỏng của mình. Đây là một mục trên thanh menu theo dõi các ứng dụng giả lập của bạn và cho phép bạn truy cập trực tiếp vào các thư mục và nội dung của chúng. Thật tuyệt vời.


Tôi cũng gặp vấn đề với SimPholder2 trên Yosemite, vì vậy tôi đã bắt đầu một tập lệnh dòng lệnh để giúp bạn tìm và mở cửa sổ Finder cho trình giả lập và Ứng dụng bạn muốn. Nó đi qua các thư mục và siêu dữ liệu để liệt kê tất cả các thư mục và ứng dụng giả lập. Nếu quan tâm, hãy xem thử tại đây
Rodrigo Lima

SimPholder2 hoạt động ở Yosemite nhưng hơi chậm; khi bạn nhấp vào biểu tượng trên thanh trạng thái, chỉ cần đợi vài giây và nó sẽ xuất hiện.
Jason

Whoa thật tuyệt vời và mới nhất hoạt động với Yosemite + Xcode 6.3!
TruMan1

21

Tôi thấy ứng dụng SimulatorManager rất hữu ích. Nó đưa bạn trực tiếp đến thư mục ứng dụng của trình giả lập được cài đặt. Tôi đã thử với các trình giả lập 7.1, 8.0 và 8.1.

SimulatorManager cư trú như một biểu tượng trong khay hệ thống và cung cấp tùy chọn "Khởi chạy khi đăng nhập".

nhập mô tả hình ảnh ở đây

Lưu ý : Điều này chỉ hoạt động với Xcode 6 (6.1.1 trong trường hợp của tôi) trở lên.

Mong rằng sẽ giúp!


Amar, làm thế nào để bạn cài đặt SimulatorManager? Tôi nghĩ rằng đó là một plugin cho Xcode nhưng nó là một dự án Xcode
malena

1
trong thanh trên cùng, chọn: Sản phẩm -> Lưu trữ -> rồi Xuất Lưu trữ dưới dạng Ứng dụng Mac mà không cần ký lại (tùy chọn cuối cùng), bạn sẽ nhận được tệp .app mà bạn có thể đặt trong thư mục Ứng dụng của mình như một ứng dụng thông thường. ..
Heckscheibe

11

Để biết nơi tệp .sqlite của bạn được lưu trữ trong AppDelegate.m của bạn, hãy thêm đoạn mã sau

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

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

bây giờ gọi phương thức này trong AppDelegate.m

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

  //call here
   [self applicationDocumentsDirectory];

}

tuyệt vời .. đặc biệt hữu ích khi có nhiều trình giả lập
Yasitha Waduge

6

Điều này làm việc cho tôi nhanh chóng:

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

3

Tôi vật lộn với điều này một thời gian. Nó trở thành một nỗi đau lớn khi chỉ đơn giản là đến db sqlite địa phương của tôi. Tôi đã viết kịch bản này và biến nó thành một đoạn mã bên trong XCode. Tôi đặt nó bên trong appDidFinishLaunching bên trong appDelegate của tôi.


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

Điều này tạo ra một simlink ở gốc ổ đĩa của bạn. (Bạn có thể phải tự tạo thư mục này lần đầu tiên và chmod nó hoặc bạn có thể thay đổi vị trí sang một nơi khác) Sau đó, tôi đã cài đặt plugin xcodeway https://github.com/onmyway133/XcodeWay

Tôi đã sửa đổi nó một chút để nó cho phép tôi chỉ cần nhấn cmd + d và nó sẽ mở một cuộn tìm đến thư mục Tài liệu liên tục của ứng dụng hiện tại của tôi. Bằng cách này, không quan trọng XCode thay đổi đường dẫn của bạn bao nhiêu lần, nó chỉ thay đổi khi chạy và nó cập nhật simlink của bạn ngay lập tức trên mỗi lần chạy.

Tôi hy vọng điều này hữu ích cho những người khác!


Cảm ơn, tôi vừa cập nhật XcodeWay để hỗ trợ thư mục giả lập iOS 8
onmyway133

3

Mở công cụ tìm> Thư viện> Nhà phát triển> CoreSimulator> Thiết bị

Sau đó thay đổi biểu tượng Sắp xếp từ công cụ tìm, chọn Ngày thêm

Chọn ứng dụng của bạn> dữ liệu> Container> dữ liệu> Ứng dụng>

chọn ứng dụng của bạn> Tài liệu> Đây là tệp db của bạn

Trong trường hợp của tôi:

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

Nếu không thì làm điều này:

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

- Nó sẽ in đường dẫn đầy đủ đến thư mục dữ liệu.

Nhanh:

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

Swift 3.0:let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
AtomicBoolean

2

Sử dụng Finder -> vào thư mục và nhập basepath đã cho để đến thư mục ứng dụng

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

NSLog(@"%@",basePath);

1

Trình mô phỏng đặt tệp vào ~ / Library / Developer / CoreSimulator / Devices / ... nhưng đường dẫn sau / Devices khác nhau đối với mọi người.

Sử dụng phương pháp tiện dụng này. Nó trả về đường dẫn của thư mục tạm thời cho người dùng hiện tại và không có đối số.

NSString * NSTemporaryDirectory ( void );

Vì vậy, trong lớp ViewContoder của tôi, tôi thường đặt dòng này trong viewDidLoad của mình chỉ để tham khảo khi tôi cần lấy tệp được lưu trữ CoreData của mình. Hi vọng điêu nay co ich.

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

(Lưu ý: để đi đến đường dẫn, từ menu tìm kiếm, nhấp vào Go và gõ ~ / Library để mở thư mục ẩn sau đó trong Cửa sổ Finder, bạn có thể nhấp vào đường dẫn hiển thị trên bảng điều khiển của mình.)


1

Vị trí này đã một lần nữa thay đổi, nếu sử dụng Swift, hãy sử dụng vị trí này để tìm xem thư mục ở đâu (phần này được sao chép từ tệp AppDelegate.swift mà Apple tạo cho bạn để nếu nó không hoạt động trên máy của bạn, hãy tìm trong tệp đó đúng cú pháp, tệp này hoạt động với tôi bằng trình giả lập Xcode 6.1 và iOS 8):

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

1

Các mô phỏng được đặt dưới:

~/Library/Developer/CoreSimulator/

Ở đây, chúng được liệt kê dưới dạng thư mục có tên UUID. Sử dụng sắp xếp theo 'Ngày sửa đổi' để tìm cái mới nhất. Bên trong điều hướng đến:

/data/Containers/Data/Application/

Tại đây bạn sẽ nhận được một danh sách tất cả các ứng dụng trên thiết bị đó. Bạn có thể một lần nữa sắp xếp này để có được ứng dụng mới nhất.

LƯU Ý: Xcode thay đổi tên thư mục mỗi khi bạn chạy ứng dụng, vì vậy đừng dựa vào việc tạo bí danh / cắt ngắn trên máy tính để bàn.

Cách dễ nhất là sử dụng ứng dụng ở đây , nó thực hiện mọi thứ tự động.


1

Tôi đã tạo tập lệnh này để nén ứng dụng mới nhất được xây dựng cho bất kỳ trình giả lập nào và nén nó vào máy tính để bàn.

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

Trong Swift 4 hoặc Swift 5 bạn có thể sử dụng NSHomeDirectory().

Cách dễ nhất trong Xcode 10 (hoặc Xcode 11) là tạm dừng ứng dụng của bạn (như khi nó chạm đến điểm dừng) và chạy dòng này trong bảng điều khiển trình gỡ lỗi:

po NSHomeDirectory()

po là viết tắt của đối tượng in và in hầu hết mọi thứ


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. Với Swift 4, bạn có thể sử dụng mã bên dưới để lấy thư mục chính của ứng dụng. Thư mục tài liệu của ứng dụng của bạn ở đó.

    print(NSHomeDirectory())

  2. Tôi nghĩ rằng bạn đã biết rằng thư mục chính của ứng dụng của bạn có thể thay đổi, vì vậy nếu bạn không muốn thêm mã bổ sung vào cơ sở mã của mình, SimPholder là một công cụ tuyệt vời dành cho bạn.

  3. Và hơn nữa, bạn có thể tự hỏi là có một công cụ, có thể giúp bạn tiết kiệm thời gian từ việc đóng và mở lại cơ sở dữ liệu SQLite mỗi lần sau khi thư mục chính của ứng dụng của bạn bị thay đổi. Và câu trả lời là có, một công cụ tôi biết là SQLiteFlow . Từ tài liệu của nó, nó nói rằng:

    Xử lý tên tập tin cơ sở dữ liệu hoặc thay đổi thư mục. Điều này làm cho SQLiteFlow có thể hoạt động thân thiện với cơ sở dữ liệu SQLite của bạn trong trình giả lập iOS.


0

Đây là sh cho trình giả lập và ứng dụng được sử dụng lần cuối. Chỉ cần chạy sh và sao chép văn bản in và dán và chạy lệnh để hiển thị trong công cụ tìm.

#!/bin/zsh

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

echo $lastUsedSimulatorAndApplication
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.