Core Data file's Location iOS 10

2020-02-09 03:03发布

问题:

I am trying to us SQLite Browsers to see my Core Data objects. I am not able to find where does the core data save its sql file. I looked into the app documents folder but there is nothing there.

Do you know where does the core data in IOS 10(simulator) save its SQLite files on?

回答1:

I tested it on XCode 8 Swift 3 OS macOS Sierra

IOS 10

In Your Appdelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
     print(urls[urls.count-1] as URL)

    return true
}

1. The constant .documentDirectory says we are looking for Document directory

2. The constant .userDomainMask to restrict our search to our application's sandbox.

output

file:///Users/Ashok/Library/Developer/CoreSimulator/Devices/F629F99F-C745-46EB-8A11-01BC9FF1E592/data/Containers/Data/Application/3B373C93-71A2-46E9-8AF7-EF407C39429F/Documents/

Click on Go -> Go to Folder -> Paste Path -> Hit Enter

Then Go to Library -> Application Support -> filename.sqlite

Edited

OR

open your terminal and type find ~ -name 'HitTest.sqlite' and hit enter.

Ashoks-MacBook-Pro:Desktop Ashok$ find ~ -name 'HitTest.sqlite'
/Users/Ashok/Library/Developer/CoreSimulator/Devices/F629F99F-C745-46EB-8A11-01BC9FF1E592/data/Containers/Data/Application/3B373C93-71A2-46E9-8AF7-EF407C39429F/Documents/HitTest.sqlite

From above output you can clearly see the path of your sqlite db

You can use DB Browser for SQLite to open.



回答2:

Just try this i haven't check it on ios 10 but its working in previous all versions

Product > Scheme > Edit Scheme > Run > Arguments

Add this argument in "Arguments Passed on launch"

-com.apple.CoreData.SQLDebug 1

Everytime when application launches It will print path to database See This argument look like this



回答3:

Swift 3.x

Locate didFinishLaunchingWithOptions in your AppDelegate file and add this line.

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


回答4:

For swift 5

func getCoreDataDBPath() {
        let path = FileManager
            .default
            .urls(for: .applicationSupportDirectory, in: .userDomainMask)
            .last?
            .absoluteString
            .replacingOccurrences(of: "file://", with: "")
            .removingPercentEncoding

        print("Core Data DB Path :: \(path ?? "Not found")")
    }

This will give detailed path till sqlite file (dbname.sqlite)

print("CoreData path :: \(self.getCoreDataDBPath())")

Note: Click on Go -> Go to Folder -> Paste path here -> Enter



回答5:

Since your app's Core Data file's location is changeable, after you find one, you can use a SQLite Browser like SQLiteFlow to browse your Core Data file's content. The reason is straightforward, it can handle SQLite file location changes. From SQLiteFlow's document:

Handle database file name or directory changes. This makes SQLiteFlow can work friendly with your SQLite database in iOS simulator.



回答6:

For XCODE 8.0 (iOS 10):-

The path to the .sqlite persistent store is:

/Users/Ashish/Library/Developer/CoreSimulator/Devices/"YourDeviceId"/data/Containers/Data/Application/"Application Id"/Library/Application Support/"FileNamePassedInPersistentContainer.sqlite"