Dữ liệu cốt lõi về vị trí tệp Sqlite


91

Thông thường, tệp cửa hàng sqlite cho các ứng dụng dữ liệu cốt lõi nằm ở

Thư viện> Hỗ trợ ứng dụng> Trình mô phỏng iPhone> 7.1 (hoặc bất kỳ phiên bản nào bạn đang sử dụng)> Ứng dụng> (Bất kỳ thư mục nào chứa ứng dụng của bạn)> Tài liệu

nhưng tôi không thể tìm thấy nó trong IOS 8. Tôi cho rằng họ sẽ chỉ thêm một thư mục 8.0 bên trong thư mục iPhone Simulator, nhưng nó không có ở đó. Có ai có thể xác định vị trí của nó?


2
Tôi Khá chắc chắn rằng câu hỏi của bạn là trùng lặp, vì tôi đã hỏi nó hơn một tuần trước khi câu hỏi của bạn được hỏi. Nó sẽ được đánh giá cao nếu bạn cho tôi có được tín dụng cho câu hỏi này, coi đó là câu hỏi đầu tiên mà tôi từng hỏi, và nó có vẻ như bạn đã có một danh tiếng @HenryGlendening
enlyte

Xem phần này cách kiểm tra dbpath stackoverflow.com/a/27358291/3840428
Nagarjun


2
Có ai biết cách lấy các tệp CoreData từ thiết bị thực tế không? Tôi đã từng thực hiện việc này qua iTunes trong các phiên bản Xcode cũ hơn, nhưng vì Xcode 8 / iOS10, tôi không nghĩ rằng các tệp CoreData được lưu trữ trong thư mục tài liệu của ứng dụng, do đó không hiển thị trong iTunes. Có cách nào để lấy các tệp CoreDate từ thiết bị trên máy tính của bạn không?
Bocaxica

1
Tôi không biết tại sao họ tiếp tục di chuyển này. Họ nên đặt nó ở đâu đó và chỉ để nó.
RegularExpression

Câu trả lời:


135

Tôi đã quản lý để tìm tệp sqlite và tệp của nó trong đường dẫn này ngay bây giờ:

Thư viện / Nhà phát triển / CoreSimulator / Thiết bị / (số và chữ cái) / dữ liệu / Vùng chứa / Dữ liệu / Ứng dụng / (số và chữ cái) / Tài liệu /

(số và chữ cái) là viết tắt của một thư mục sẽ là duy nhất cho ứng dụng / máy tính của bạn, nhưng sẽ trông giống như sau: 779AE2245-F8W2-57A9-8C6D-98643B1CF01A

Tôi có thể tìm thấy nó bằng cách truy cập appDelegate.m, cuộn xuống

- (NSURL *)applicationDocumentsDirectory 

và NSL đăng nhập đường dẫn trả về, như sau:

// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory
{
    NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory  inDomains:NSUserDomainMask] lastObject]);

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

Điều này sẽ cung cấp cho bạn đường dẫn duy nhất của bạn, giúp bạn dễ dàng hơn, bởi vì việc định vị nó bằng 2 thư mục / chuỗi ký tự và số không có tên.

Swift 4.2:

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])

4
Sử dụng xcrun simctl listđể lấy danh sách tên trình mô phỏng và UUID của chúng.
Sandy Chapman

1
Lưu ý rằng nếu bạn sử dụng cơ sở dữ liệu được chia sẻ cho một nhóm ứng dụng (ví dụ: khi bạn đang sử dụng tiện ích mở rộng), đường dẫn là Thư viện / Nhà phát triển / CoreSimulator / Thiết bị / $ number / data / Containers / Shared / AppGroup / $ number / Name.sqlite
andreacipriani,

7
Lưu ý rằng, vào năm 2019 , điều Library/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Documents/này không còn đúng nữa. Bây giờ bạn tìm ra .sqlite và liên quan đến hai tập tin trongLibrary/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Library/Application Support/
Gang Fang

@GangFang Tôi đang cố gắng chuyển đổi mã Objective C được xây dựng trong Xcode 7 sang phiên bản nhanh nhất mới nhất và tạo dự án mới, vậy làm cách nào để tôi có thể di chuyển hai tệp .sqlite khác nhau này vào cùng một chỗ.
Sanjay Shah

85

Không có câu trả lời nào đề cập đến cách đơn giản nhất để thực sự có được vị trí của tệp DB.

Nó thậm chí không yêu cầu bạn sửa đổi mã nguồn của mình, vì nó là một công tắc thời gian chạy đơn giản trong XCode.

  1. Chọn Edit Scheme ... bên cạnh nút Run.

    chỉnh sửa sơ đồ

  2. Chọn Run / Arguments và thêm hai tùy chọn sau:

    -com.apple.CoreData.SQLDebug 1
    -com.apple.CoreData.Logging.stderr 1

    Lựa chọn

  3. Chạy ứng dụng và bạn sẽ thấy trong nhật ký:

    nhật ký


2
Đây quả thực là giải pháp đơn giản và tốt nhất. Cảm ơn!
Omid Ariyan

Đối với tôi nhật ký không xuất hiện, bạn có thể giúp tôi?
Augusto

@Augusto Tôi không thể giúp bạn ở đây, nhưng nếu bạn hỏi một câu hỏi mới về nó, mọi người có thể trả lời nó và giúp bạn.
hyperknot

Câu trả lời chính xác! Đây phải là câu trả lời được chấp nhận. Ngoài ra, có cách nào mà bạn biết để thay đổi màu của đầu ra này trong bảng điều khiển, ngoài thông qua tùy chọn Xcode không? Nó sẽ được tốt đẹp nếu nó nổi bật hơn một chút
Coreyd303

Cảm ơn bạn đã gợi ý! Đường dẫn thay đổi liên tục, đối với tôi hiện tại (iOS 13.3.1) đường dẫn là / Users / *** / Library / Developer / CoreSimulator / Devices / A91CEB1C-B15D-46B5-9B83-DB22056DEFD1 / data / Containers / Shared / AppGroup / B835599A- CA36-432F-871A-17EDA181CC54 / Vì vậy, tốt hơn là lấy nó từ thông tin gỡ lỗi CoreData hơn là cố gắng tự đoán.
AlKir

52

Hãy thử 3 bước đơn giản này

  1. Sao chép mã sau vào didFinishLaunchingWithOptionscủa bạn appdelegate.mvà thêm điểm ngắt trướcNSLog()

    (BOOL)application:(UIApplication *)application  
    
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSLog(@"%@",[paths objectAtIndex:0]);
     }

Hoặc trong Swift:

let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
print(paths[0])

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

2.Mở Finder-> Go -> Tới thư mục và dán đường dẫn đã sao chép từ bước 1

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

3. Yah !!! Bạn đang ở Điểm đến của bạn.


2
Để sử dụng swift3: NSSearchPathForDirectoriesInDomains (.applicationSupportDirectory, .userDomainMask, true)
Yohst

38

Nếu ứng dụng của bạn đang sử dụng Dữ liệu cốt lõi, bạn chỉ cần tìm kiếm tệp sqlite trong Terminal:

find ~ -name app_db_file_name.sqlite

Kết quả sẽ liệt kê đường dẫn đầy đủ đến các thư mục giả lập chứa ứng dụng của bạn.


2
@AlexWei Tôi ước rằng Apple sẽ thêm một nút trên menu Tệp vào "Tiết lộ thư mục tài liệu Trình mô phỏng trong công cụ tìm" hoặc một cái gì đó tương tự. Có vẻ lố bịch mà nó vẫn không có, xem xét họ tiếp tục thay đổi nơi họ đang lưu trữ các file ...
DiscDev

1
Trong trường hợp người khác đang quan tâm, tôi đã thêm lệnh này như một bí danh để .profile của tôi: alias myapp_simulator_db="find ~/Library/Developer/CoreSimulator/Devices -name MyApp.sqlite". Nó rất tiện lợi khi bạn cần chạy lặp lại lệnh này.
bánh mì nướng

sudo find ~ -name app_db_file_name.sqlite đã giúp tôi
Qadir Hussain

21

Tôi đã hack một chữ cái này ( Gist ): find ~/Library/Developer/CoreSimulator/Devices/ -name device.plist -exec sh -c "/usr/libexec/PlistBuddy -c \"print UDID\" '{}' | tr '\n' ' '" \; -exec sh -c "/usr/libexec/PlistBuddy -c \"print name\" '{}' | tr '\n' ' '" \; -exec sh -c "/usr/libexec/PlistBuddy -c \"print runtime\" '{}' | sed -n 's/com\.apple\.CoreSimulator.SimRuntime\.\(.*\)/\1/p'" \;

Bản in này:

14F313C8-3813-4E38-903E-2010C136B77B iPad Retina iOS-8-0
1F6B82A2-C467-479A-8CAF-074BE507AC8E iPad Air iOS-8-0
2DA83944-BE5D-4342-B330-08F67A932D8C iPad 2 iOS-7-1
48703432-A5C5-4606-9369-0D21B53EB1E8 iPhone 4s iOS-7-1
4AFB71CC-6752-4F9A-A239-4DC9CA53A8B8 iPhone 5s iOS-8-0
53A65771-DF50-4A5C-A8D2-4D1C3A5D0F60 iPhone 5 iOS-7-1
6B97C174-5914-4E89-8D17-943F0E2703BA iPhone 5 iOS-8-0
6C2DF3E9-FA26-4391-8B66-72E1467D6297 iPad 2 iOS-8-0
7F85E299-A3C2-4704-8B44-2984F6F995F5 iPad Retina iOS-7-1
8B9EDFFD-2240-476B-88AD-06ABE8F9FF51 iPhone 6 Plus iOS-8-0
97691E5D-5C38-4875-8AA7-C2B1E4ABCBB5 Resizable iPhone iOS-8-0
9BBF3408-6CA4-4CE0-BD4E-B02001F1262B iPhone 5s iOS-7-1
C9237847-F0AA-44BC-A74E-C08C2E0F7A6C Resizable iPad iOS-8-0
CC44C1BA-F39C-4410-AE34-4ABBD7806D45 iPad Air iOS-7-1
CDF4D811-5011-4464-8291-5CDA378375EA iPhone 6 iOS-8-0
E77DE00C-E244-4F25-A5E2-E6581614D5A2 iPhone 4s iOS-8-0

Cập nhật:

Như ai đó đã chỉ ra ở đây , cũng có thể chạy xcrun simctl list devicesđể nhận được kết quả tương tự:

== Devices ==
-- iOS 7.0 --
-- iOS 7.1 --
    iPhone 4s (48703432-A5C5-4606-9369-0D21B53EB1E8) (Shutdown)
    iPhone 5 (53A65771-DF50-4A5C-A8D2-4D1C3A5D0F60) (Shutdown)
    iPhone 5s (9BBF3408-6CA4-4CE0-BD4E-B02001F1262B) (Shutdown)
    iPad 2 (2DA83944-BE5D-4342-B330-08F67A932D8C) (Shutdown)
    iPad Retina (7F85E299-A3C2-4704-8B44-2984F6F995F5) (Shutdown)
    iPad Air (CC44C1BA-F39C-4410-AE34-4ABBD7806D45) (Shutdown)
-- iOS 8.1 --
    iPhone 4s (0763EF65-DD0D-4FAD-84C7-2DE63D416526) (Shutdown)
    iPhone 5 (868ED444-8440-4115-AF37-F419CC682D2F) (Shutdown)
    iPhone 5s (E0455E5D-7315-4EC8-B05E-76284728244C) (Shutdown)
    iPhone 6 Plus (72554908-FF99-4B8F-9B87-65255ED08CFC) (Shutdown)
    iPhone 6 (32AA8133-53A4-4BE0-8CE5-0C7A87E81CAF) (Shutdown)
    iPad 2 (4AF84DE8-CBA2-47AE-A92A-0C0CEF9F41F8) (Booted)
    iPad Retina (69238B44-AAFD-4CD5-AAEA-C182D0BC300D) (Shutdown)
    iPad Air (E580AD99-0040-4EC1-B704-0C85567E6747) (Shutdown)
    Resizable iPhone (32E872FC-6513-41AB-A5B9-B23EB7D10DC8) (Shutdown)
    Resizable iPad (99997922-4A9F-4574-9E3E-EF45F893F4A2) (Shutdown)

18

Nếu bạn đang sử dụng Swift , điều này sẽ trả về đường dẫn tuyệt đối của thư mục tài liệu:

func applicationDirectoryPath() -> String {
    return NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as String
}

1
Nên được đặt tên là "func documentDirectoryPath ()" cái gì đó là nơi mà bạn đang đi ...
Yohst

13

Tôi đã viết một tập lệnh bash để tìm vị trí của thư mục Ứng dụng của bạn và thư mục Dữ liệu ứng dụng trong một trình mô phỏng, bạn có thể tải xuống tại đây . Khi bạn đã giải nén tập lệnh, bạn có thể điều hướng đến thư mục chứa tập lệnh và sử dụng nó. Nếu bạn gọi nó mà không có tùy chọn, nó sẽ cung cấp cho bạn danh sách các trình mô phỏng iOS đã cài đặt. Sau đó, bạn có thể sử dụng các tùy chọn để tìm chương trình của mình. Viết:

./simulatorAppFolders -s "iPad Air" -i iOS-8-0 -a <MyApp>

sẽ tìm thấy thư mục ứng dụng và thư mục khu vực chính cho ứng dụng của bạn trên trình mô phỏng iPad Air iOS 8. Đây là một ví dụ:

MacBook-Air:_posts user$ ./simulatorAppFolders -s "iPad Air" -i iOS-8-0 -a MyApp
App folder = /Users/james/Library/Developer/CoreSimulator/Devices/6A9DEE93-FAEF-4BF4-9989-BC14CD38AEA0/data/Containers/Bundle/Application/8F64CD7F-A227-43D6-98AC-41D3919827CB
dataFolder = /Users/james/Library/Developer/CoreSimulator/Devices/6A9DEE93-FAEF-4BF4-9989-BC14CD38AEA0/data/Containers/Data/Application/96C40A21-5A5C-4399-839C-B155B8A72932

Cập nhật

Có một bản cập nhật cho tập lệnh gốc cho phép bạn tìm kiếm dựa trên loại thiết bị bằng cách sử dụng tùy chọn -d. Tôi cũng đã viết một tập lệnh khác tạo ra một loạt các thư mục được đặt tên hợp lý để bạn có thể tìm thấy ứng dụng và tài liệu ứng dụng của mình. Tập lệnh này sẽ tạo một thư mục có tên iOS_SIMULATORS trong khu vực chính của bạn và bạn có thể dễ dàng điều hướng đến ứng dụng của mình từ đó.


Tuyệt vời, tôi đã chỉnh sửa tập lệnh của bạn để tạo một tập lệnh khác kết nối lại tất cả dữ liệu trình mô phỏng của một ứng dụng nhất định. Cảm ơn rất nhiều James!
Martin

Cảm ơn! Giải pháp tuyệt vời cho một PITA chung.
David Hersey

6

Tôi đã có thể định vị thư mục trình mô phỏng với đầu ra bảng điều khiển tiếp theo:

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

trong trường hợp của tôi, đó là (Xcode 6 beta)

app dir: file:///Users/user/Library/Developer/CoreSimulator/Devices/D00C56D4-DDA3-47B0-9951-27D3B9EC68E8/data/Applications/6ABF3E54-37F5-4AD1-A223-F7467F601FB6/Documents/

6

Dựa trên câu trả lời của Michaels, đây là dành cho Swift 3

    func applicationDirectoryPath() -> String {
        return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String
    }

Giải pháp duy nhất ở đây!
Fattie

5

Đối với Swift 3.0

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])

bạn có thể lấy vị trí của Coredata trong Xcode 8.2


5

Sau các bản cập nhật mới của Xcode, tôi thấy rằng các tệp sql hiện được lưu trữ trong thư mục mới, /Library/Application Supportđây có thể là một tình huống duy nhất nhưng nếu bạn không tìm thấy tệp sql trong thư mục tài liệu, hãy tìm kiếm chúng tại đây:

~/Library/Developer/CoreSimulator/Devices/[@device_id@]/data/Containers/Data/Application/[@application_id@]/Library/Application Support/

trước khi nó được lưu trữ trong Documentsthư mục:

~/Library/Developer/CoreSimulator/Devices/[@device_id@]/data/Containers/Data/Application/[@application_id@]/Documents/


4

Đối với SWIFT 3:

Sao chép, dán mã này vào didFinishLaunchingWithOptions

 print(NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).last! as String)

Điều này đã giúp tôi. nhưng khi tôi cố gắng truy cập đường dẫn đó thông qua thiết bị đầu cuối, nó nói: Không có tệp hoặc thư mục như vậy nhưng khi tôi cố gắng truy cập tùy chọn thư mục goto thì nó thực sự tồn tại.
Qadir Hussain

Điều này đã làm việc cho tôi trên OSX. Tôi cần truy cập thêm 1 thư mục trong thư mục "Hỗ trợ ứng dụng" có tên <tên ứng dụng của tôi> để xử lý tệp .sqlite.
Jacksonsox,

3

Đối với nhanh 3

print(NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).last! as String)

2

Giống như James Snook tôi đã tạo tập lệnh của riêng mình để giúp truy cập dễ dàng hơn vào các ứng dụng giả lập. Tôi nghĩ rằng nó có thể hữu ích cho nhiều người đến đây, ngoài tôi.

Không giống như tập lệnh của anh ấy, tập lệnh của tôi không phải là một công cụ tìm kiếm, nó tạo ra một cấu trúc thư mục hoàn chỉnh (và con người có thể đọc được) với tất cả các thiết bị / thời gian chạy và đặt các liên kết mềm đến các ứng dụng trong đó.

Bạn có thể lấy nó trong Gist này .

Chạy nó mỗi khi bạn cài đặt ứng dụng trong trình mô phỏng hoặc chỉ chạy nó mỗi khi bạn tìm nạp một ứng dụng vì bất kỳ lý do gì (nó sẽ cập nhật và mở thư mục thiết bị trong Finder).


Bạn có thể điều chỉnh tập lệnh này để tự động hóa một số thứ. Nhưng tôi phải nói rằng ứng dụng GUI này mà tôi chỉ thấy âm thanh như một giải pháp thực sự hữu ích nếu bạn chỉ muốn truy cập vào các thư mục ứng dụng :)
fbeeper

Điều này cũng khá hay nhưng tôi thích tập lệnh thứ 2 do James Snook đăng vì nó cũng tạo ra các liên kết mềm đến các thư mục dữ liệu.
David Hersey

2

Nếu bạn chưa chỉ định bất kỳ thư mục nào thì bạn có thể sử dụng mã dưới đây để in thư mục mặc định:

print (NSPers phù hợpContainer.defaultDirectoryURL ())


1

Cho iOS 10.0+bạn có thể sử dụng persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

Tôi đã tạo chức năng Tiện ích sao chép tệp sqlite đến vị trí mong muốn của bạn (chỉ hoạt động cho trình mô phỏng).

Bạn có thể sử dụng nó như

import CoreData


let appDelegate = UIApplication.shared.delegate as! AppDelegate
UTility.getSqliteTo(destinationPath: "/Users/inderkumarrathore/Desktop", persistentContainer: appDelegate.persistentContainer)

Nếu bạn đã truy cập vào các tệp sqlite, shm và wal thì hãy chạy các lệnh trong terminal để hợp nhất tệp WAL vào tệp sqlite.

$ sqlite3 persistentStore
sqlite> PRAGMA wal_checkpoint;
Press control + d

Sau khi chạy các lệnh trên, bạn có thể thấy dữ liệu trong tệp sqlite của mình.


Đây là định nghĩa của phương thức tiện ích cho

/**
 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
 @param destinationPath Path where sqlite files has to be copied
 @param persistentContainer NSPersistentContainer
*/
public static func getSqliteTo(destinationPath: String, persistentContainer: NSPersistentContainer) {
  let storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

  let sqliteFileName = storeUrl!.lastPathComponent
  let walFileName = sqliteFileName + "-wal"
  let shmFileName = sqliteFileName + "-shm"
  //Add all file names in array
  let fileArray = [sqliteFileName, walFileName, shmFileName]

  let storeDir = storeUrl!.deletingLastPathComponent()

  // Destination dir url, make sure file don't exists in that folder
  let destDir = URL(fileURLWithPath: destinationPath, isDirectory: true)

  do {
    for fileName in fileArray {
      let sourceUrl = storeDir.appendingPathComponent(fileName, isDirectory: false)
      let destUrl = destDir.appendingPathComponent(fileName, isDirectory: false)
      try FileManager.default.copyItem(at: sourceUrl, to: destUrl)
      print("File: \(fileName) copied to path: \(destUrl.path)")
    }
  }
  catch {
    print("\(error)")
  }
  print("\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n")
  print("In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in \(sqliteFileName) file")
  print("\n-------------------------------------------------")
  print("$ cd \(destDir.path)")
  print("$ sqlite3 \(sqliteFileName)")
  print("sqlite> PRAGMA wal_checkpoint;")
  print("-------------------------------------------------\n")
  print("Press control + d")      
}

Đối với

/**
 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
 @param destinationPath Path where sqlite files has to be copied
 @param persistentContainer NSPersistentContainer
 */
+ (void)copySqliteFileToDestination:(NSString *)destinationPath persistentContainer:(NSPersistentContainer *)persistentContainer {
  NSError *error = nil;
  NSURL *storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.firstObject.URL;
  NSString * sqliteFileName = [storeUrl lastPathComponent];
  NSString *walFileName = [sqliteFileName stringByAppendingString:@"-wal"];
  NSString *shmFileName = [sqliteFileName stringByAppendingString:@"-shm"];
  //Add all file names in array
  NSArray *fileArray = @[sqliteFileName, walFileName, shmFileName];

  // Store Directory
  NSURL *storeDir = storeUrl.URLByDeletingLastPathComponent;

  // Destination dir url, make sure file don't exists in that folder
  NSURL *destDir = [NSURL fileURLWithPath:destinationPath isDirectory:YES];

  for (NSString *fileName in fileArray) {
    NSURL *sourceUrl = [storeDir URLByAppendingPathComponent:fileName isDirectory:NO];
    NSURL *destUrl = [destDir URLByAppendingPathComponent:fileName isDirectory:NO];
    [[NSFileManager defaultManager] copyItemAtURL:sourceUrl toURL:destUrl error:&error];
    if (!error) {
      RLog(@"File: %@ copied to path: %@", fileName, [destUrl path]);
    }
  }


  NSLog(@"\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");
  NSLog(@"In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in %@ file", sqliteFileName);
  NSLog(@"\n-------------------------------------------------");
  NSLog(@"$ cd %@", destDir.path);
  NSLog(@"$ sqlite3 %@", sqliteFileName);
  NSLog(@"sqlite> PRAGMA wal_checkpoint;");
  NSLog(@"-------------------------------------------------\n");
  NSLog(@"Press control + d");
}

0

Swift 3.x

Định vị hàm didFinishLaunchingWithOptions trong tệp AppDelegate của bạn và dán mã này vào đó.

let path = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)
print("\(path)")

0

Swift 4.x

    let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
    print(paths[0])

0

Swift 4.2

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
        print(paths[0])

-1

Bạn có thể sử dụng mã sau.

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    **print(persistentContainer.persistentStoreDescriptions)**
    return true
}

Nó sẽ in vị trí lưu trữ liên tục dữ liệu cốt lõi tức là sqlite

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.