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?
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.
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
Swift 3.x
Locate didFinishLaunchingWithOptions in your AppDelegate file and add this line.
let path = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)
print("\(path)")
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
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.
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"