IP Simulator giả lập lưu trữ dữ liệu của nó ở đâu?


234

Tôi có một SQLite DB mà tôi đang sử dụng để lưu trữ dữ liệu ứng dụng và tôi có thể làm gì với việc xem xét bên trong nó để gỡ lỗi một vấn đề tôi đang gặp phải - nhưng điển hình thì iPhone Simulator lưu trữ dữ liệu của nó ở đâu?

Câu trả lời:


290

Câu trả lời được chấp nhận là chính xác cho SDK 3.2 - SDK 4 thay thế thư mục / Người dùng trong đường dẫn đó bằng một số cho mỗi phiên bản iPhone OS / iOS cũ mà nó có thể mô phỏng, do đó, đường dẫn trở thành:

~ / Thư viện / Hỗ trợ ứng dụng / Trình mô phỏng iPhone / [Phiên bản hệ điều hành] / Ứng dụng / [appGUID] /

nếu bạn đã cài đặt SDK trước đó, trình giả lập 3.1.x của nó sẽ tiếp tục lưu dữ liệu của nó vào:

~ / Thư viện / Hỗ trợ ứng dụng / Trình mô phỏng iPhone / Người dùng / Ứng dụng / [appGUID] /

Dành cho Xcode6 và iOS8

~ / Thư viện / Nhà phát triển / CoreSimulator / Thiết bị / [DeviceID] / data / Container / Dữ liệu / Ứng dụng / [AppID] /


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

174
Thay vì tìm kiếm trong công cụ tìm GUID là của bạn, hãy lưu ý câu trả lời của pisca46 bên dưới: Chỉ cần nhập po NSHomeDirectory()trình gỡ lỗi. Cắt và dán vào Go> Chuyển đến thư mục (Cmd-Shift-G).
mackworth

Tôi hơi lo ngại rằng khi tôi khởi chạy trình giả lập thì nó báo là 8.2, nhưng khi tôi tìm trong thư mục này, số phiên bản duy nhất tôi thấy là 7.1. Điều đó khiến tôi lo lắng rằng tôi đang nhìn nhầm chỗ.
bugloaf


4
Thật khó để nhấn mạnh câu trả lời này đơn giản hơn, thuận tiện hơn, ít lỗi hơn và ít gây khó chịu hơn (như được đề xuất trong nhận xét của mackworth ở trên). Bạn chỉ có thể thêm một dòng vào NSLognày trong thư mục AppDelegate's didFinishLaunchingWithOptions:, hoặc bạn có thể po NSHomeDirectory()từ các chương trình gỡ rối. Trong cả hai trường hợp, sao chép chuỗi và mở nó trong công cụ tìm với Cmd+Shift+G. Điều này hoạt động tốt hơn bởi vì bạn đang yêu cầu với một lệnh tiêu chuẩn thay vì cần biết điều gì đó thay đổi.
Stewohn

93

Có một cách khác (nhanh hơn?) Để tìm nơi dữ liệu ứng dụng của bạn không có Terminal:

  1. Khởi chạy ứng dụng trong trình giả lập
  2. Giám sát hoạt động mở
  3. Tìm tên ứng dụng của bạn trong tab CPU
  4. Nhấp đúp vào nó và mở "Mở tệp và cổng"

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


1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];cung cấp cho bạn số nhận dạng thiết bị
oabarca

@oabarca số nhận dạng bạn nhận được không liên quan gì đến deviceID hoặc appFolder của trình giả lập; Tôi đang sử dụng Xcode 11.2.1 và iOS 13.2.2
DawnSong

78

Tìm thấy rồi:

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

16
Cách tìm kiếm: Trong Finder, nhấn CMD + SHIFT + G
rohan-patel

Xin vui lòng xem phản hồi cập nhật dưới đây của dsmudger, đó là câu trả lời chính xác tại thời điểm này.
Tom Susel

74

iOS 8 ~ / Thư viện / Nhà phát triển / CoreSimulator / Thiết bị / [ID thiết bị] / dữ liệu / Ứng dụng / [appGUID] / Tài liệu /


1
Có cách nào để lấy ID thiết bị không?
msmq

2
@msmq thửxcrun instruments -s
Shazron

11
@msmq Bật trình giả lập hiện tại, Phần cứng -> Thiết bị -> Quản lý thiết bị ... -> Chọn trình giả lập của bạn trong danh sách "SIMULATORS". Sau đó, bên phải là "Định danh". Đây là ID thiết bị.
RichX

Làm cách nào để tìm [appGUID] tại đây?
Yang You

66

Trên Lion Users/[username]/Library là ẩn.

Để chỉ xem trong Finder, hãy nhấp vào menu 'Go' ở đầu màn hình và giữ phím 'alt' để hiển thị 'Thư viện'.

Nhấp vào 'Thư viện' và bạn có thể thấy thư mục thư viện bị ẩn trước đó của mình.

Lời khuyên trước đây:

Sử dụng

chflags nohidden /users/[username]/library

trong một thiết bị đầu cuối để hiển thị thư mục.


1
sau đó bạn có thể tìm thấy nó tại: ~ / Thư viện / Hỗ trợ ứng dụng / Trình mô phỏng iPhone / [Phiên bản hệ điều hành] / Ứng dụng / [appGUID] /
Rafael Moreira

Đó là một gợi ý thú vị cho người dùng bình thường, nhưng đối với tôi, các nhà phát triển iOS / OS X cần truy cập thư viện một cách thường xuyên và do đó sẽ không muốn nó bị ẩn nữa. (Sau đó, một lần nữa, tôi đoán rất nhiều nhà phát triển sử dụng Terminal thay vì Finder?)
ArtOfWarfare

57

Cách dễ nhất bao giờ hết.

  1. Bắt một Breakpoint ở đâu đó.

  2. Nhập po NSHomeDirectory()vào cửa sổ giao diện điều khiển

Kết quả:

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


1
Nếu tôi chỉ biết điều này sớm hơn. Đây phải là câu trả lời đúng
Ivan Cantarino

Tôi nghĩ rằng tất cả các câu trả lời khác cũng đúng. Nhưng điều này có vẻ dễ dàng đối với tôi: -]
Lal Krishna

37

Nếu Trình mô phỏng đang chạy, bạn có thể nhận đường dẫn đến vùng chứa của bất kỳ ứng dụng nào:

xcrun simctl get_app_container booted <app bundle identifier>

Ví dụ đầu ra:

$ 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

"khởi động" có thể được thay thế cho hầu hết simctl các lệnh ở bất kỳ nơi nào mà UDID thiết bị được mong đợi.

Bạn có thể xem danh sách các thiết bị với xcrun simctl listvà nhận trợ giúp về các lệnh cụ thể vớixcrun simctl help .

Cập nhật : Theo yêu cầu phổ biến trong Xcode 8.3, giờ đây bạn có thể chỉ định loại vùng chứa bạn muốn bằng cách nối thêm "ứng dụng", "dữ liệu", "nhóm" hoặc số nhận dạng nhóm ứng dụng.

Để lấy bộ chứa dữ liệu:

$ xcrun simctl get_app_container booted com.example.app data

xuất sắc một. Không cần chạy lệnh để lấy device_id và appId. Một bước để có được tất cả
iamhite

Điều này nên được chấp nhận, bởi vì đó là cách "ổn định" nhất để làm những việc như vậy.
Olha

35

Với Xcode 5, bạn có thể sử dụng mã dưới đây:

#import <Foundation/NSFileManager.h>

và:

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

Kết quả có thể trông giống như:

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

Đâu hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhlà một chuỗi hex xác định ứng dụng iOS của bạn.


16
Điều này cũng hoạt động trong trình gỡ lỗi: po NSHomeDirectory()
mackworth

30

Có vẻ như Xcode 6.0 đã di chuyển vị trí này một lần nữa, ít nhất là cho các trình giả lập iOS 8.

~ / Thư viện / Nhà phát triển / CoreSimulator / Thiết bị / [DeviceID] / data / Container / Dữ liệu / Ứng dụng / [AppID]


4
trong ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / cũng có một tệp .plist có tên "device.plist" nếu bạn nhìn vào bên trong, bạn có thể tìm ra tên thiết bị như iphone-6 hoặc iphone-5s. deviceID rất khó hiểu vì vậy tôi nghĩ bạn nên xem bên trong tệp .plist.
EFE

1
Làm thế nào để có được AppID?
Tên hiển thị

1
Tôi đã gian lận để tìm id ứng dụng, bằng cách sử dụng 'ls -l' và tìm ra tệp nào của ứng dụng đã được tạo gần đây nhất. Có thể làm việc cho người khác quá.
Maya Webster

1
Hoặc trong công cụ tìm sắp xếp theo "ngày tạo" để đưa Ứng dụng lên đầu danh sách.
Ammar Mujeeb

30

Một trong những cách dễ nhất để tìm vị trí của ứng dụng trong trình giả lập. Người sử dụng "NSTceedDirectory ()"

Bước-

  1. Áp dụng điểm dừng ở bất cứ đâu trong ứng dụng và chạy ứng dụng.
  2. Khi ứng dụng dừng ở điểm dừng, hãy nhập lệnh sau trong bảng điều khiển Xcode.

    po NST tạm thời ()

Xem hình ảnh dưới đây để có cái nhìn sâu sắc phù hợpnhập mô tả hình ảnh ở đây

Bây giờ bạn có đường dẫn chính xác đến thư mục tạm thời. Bạn có thể quay lại và xem tất cả các thư mục liên quan đến ứng dụng.

Hy vọng điều này cũng giúp. Chúc mừng mã hóa :)


1
Mẹo hay, nhưng tại sao không po NSHomeDirectory()?
Mã Roadie

9

Nơi Xcode lưu trữ các trình giả lập trong năm 2019+ Catalina, Xcode 11.0

Thời gian chạy

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

Ví dụ : iOS 13.0, watchOS 6.0Chúng chiếm nhiều không gian nhất, cho đến nay. Mỗi cái có thể lên tới ~ 5GB

Thiết bị

$ open ~/Library/Developer/CoreSimulator/Devices

Ví dụ: iPhone Xr, iPhone 11 Pro Max. Chúng thường <15 mb mỗi cái.

Giải trình

Mô phỏng được phân chia giữa thời gian chạy và thiết bị. Nếu bạn chạy$ xcrun simctl list bạn có thể xem tổng quan, nhưng nếu bạn muốn tìm vị trí thực của các trình giả lập này, hãy xem trong các thư mục tôi đã hiển thị.

Hoàn toàn an toàn để xóa thời gian chạy mà bạn không hỗ trợ. Bạn có thể cài đặt lại những thứ này sau nếu bạn muốn.


8

Đơn giản chỉ cần làm điều này:

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

Và bạn sẽ nhận được đôi khi như thế này:

/ Người dùng / quản trị viên / Thư viện / Nhà phát triển / CoreSimulator / Thiết bị / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / data / Container / Data / Application / 6F3B985F-351E-468F-9CFD

Đến đó và bạn sẽ thấy thư mục tài liệu của ứng dụng của bạn bất kể phiên bản XCode. (Sử dụng lệnh "Chuyển đến thư mục ..." trong Finder và chỉ định đường dẫn "~ / library").

Phiên bản Swift cho đường dẫn chuỗi:

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

và URL thư mục:

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

Đã sắp đăng gần như cùng một câu trả lời. Phương pháp này có ưu điểm là luôn đưa ra đường dẫn chính xác, trên bất kỳ phiên bản giả lập iOS nào. Nhân tiện, bạn cũng có thể sao chép giá trị của biến url trong trình gỡ lỗi, nếu bạn không muốn đăng nhập nó;)
Moose

7

Trong iOS 5:

/ Người dùng / [Tên người dùng] / Thư viện / Hỗ trợ ứng dụng / Trình mô phỏng iPhone / 5.0 / Ứng dụng / [AppGUID] /


6

Đối với Xcode 4.6, nó được lưu trữ trong đường dẫn sau ...

/ Người dùng / [currentuser] / Thư viện / Hỗ trợ ứng dụng / Trình mô phỏng iPhone / 6.1 / Ứng dụng /

Để biết nó lập trình sử dụng mã sau đây

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

2
Swift :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect

4

Dành cho iOS 8

Để xác định vị trí thư mục Tài liệu , bạn có thể viết một tệp trong thư mục Tài liệu:

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];

nói, trong didFinishLaunchingWithOptions.

Sau đó, bạn có thể mở Terminal và tìm thư mục:

$ find ~/Library -name Words.txt

2

nếu bất cứ ai vẫn gặp phải vấn đề này ở sư tử, có một bài viết tuyệt vời với 19 mẹo khác nhau để xem thư mục ~ / Library của bạn. tìm bài viết của Dan Frakes tại đây http://www.macworld.com/article/161156/2011/07/view_l Library_folder_in_lion.html

Hãy nhớ thư mục cho trình giả lập được đưa ra dưới đây

~ / Thư viện / Hỗ trợ ứng dụng / Trình mô phỏng iPhone / Người dùng /


2

Đối với macOS Catalina, tôi đã tìm thấy db của mình trong:

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

Để có được applicationId, tôi chỉ cần sắp xếp các thư mục theo ngày sửa đổi, mặc dù tôi chắc chắn có cách tốt hơn để làm điều đó.


1

Đối với người dùng bản địa phản ứng không sử dụng Xcode thường xuyên, bạn chỉ có thể sử dụng find. Mở một thiết bị đầu cuối và tìm kiếm bằng tên cơ sở dữ liệu.

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

Nếu bạn không biết tên chính xác, bạn có thể sử dụng ký tự đại diện:

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


0

Bạn có thể thử sử dụng mã dưới đây

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

Để mở các chế độ trong đó Ứng dụng mà bạn xây dựng trong xCode trên trình giả lập, hãy làm như sau:

  1. mở Windor Finder (biểu tượng mặt cười)
  2. sau đó nhấp GO -> Chuyển đến Thư mục
  3. loại: ~ / Thư viện / Hỗ trợ ứng dụng / Trình mô phỏng iPhone
  4. Các thư mục là phiên bản iOS của các Trình mô phỏng khác nhau
  5. Thư mục con là ứng dụng cài đặt trên trình giả lập
  6. Thư mục Tài liệu là nơi người dùng tạo nội dung được sao lưu lên iCloud

0

Tôi không có liên kết với chương trình này, nhưng nếu bạn đang tìm cách mở bất kỳ thứ này trong trình tìm kiếm SimPholder thì việc này trở nên dễ dàng đến không ngờ.

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.