How can I check what is stored in my Core Data Database?
If you use sqlite
as the storage media for Core Data
, you can run your app in simulator and try to check the database file which is located in the sandbox's Library folder.
The path shall be something like: ~/Library/Application Support/iPhone Simulator/5.1/Applications/3BF8A4B3-4959-4D8F-AC12-DB8EF4C3B6E1/Library/YourAppName.sqlite
To open the sqlite
file, you need a tool. I use a free tool called Liya (http://itunes.apple.com/us/app/liya/id455484422?mt=12).
Swift 4, 5
Add this line in AppDelegate
>> didFinishLaunchingWithOptions
function:
print("Documents Directory: ", FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last ?? "Not Found!")
Your modelName.sqlite
file will be there.
You can open it with any SQLite browser tools like http://sqlitebrowser.org/ that is free.
The other solutions are either old or does not direct you easily or quickly to the SQLite files, so I came up with my own solution using FileManager.SearchPathDirectory.applicationSupportDirectory
that gets the exact path where the sqlite file will be.
Solution #1 using FileManager.default
:
func whereIsMySQLite() {
let path = FileManager
.default
.urls(for: .applicationSupportDirectory, in: .userDomainMask)
.last?
.absoluteString
.replacingOccurrences(of: "file://", with: "")
.removingPercentEncoding
print(path ?? "Not found")
}
Solution #2 using NSPersistentContainer.defaultDirectoryURL()
:
func whereIsMySQLite() {
let path = NSPersistentContainer
.defaultDirectoryURL()
.absoluteString
.replacingOccurrences(of: "file://", with: "")
.removingPercentEncoding
print(path ?? "Not found")
}
Either whereIsMySQLite()
will print the path which you can simply copy-paste on your Mac here:
Finder > Go > Go to folder
Here is my solution(works on iOS 9):
I use an automator/bash script that open the database in sqllitebrowser. the script finds the latest installed app in the simulator. Instructions:
- Install DB Browser for SQLite (http://sqlitebrowser.org/)
- Create new workflow in Apple Automator.
- Drag "Run Shell script block" and paste this code:
cd ~/Library/Developer/CoreSimulator/Devices/ cd `ls -t | head -n 1`/data/Containers/Data/Application cd `ls -t | head -n 1`/Documents open -a DB\ Browser\ for\ SQLite ./YOUR_DATABASE_NAME.sqlite
- (Optional) Convert this workflow to application, save it and drag it to your dock. To refresh the database just click on the app icon.