Sqlite File Location Core Data

106,534

Solution 1

I managed to locate the sqlite file, and its in this path now:

Library/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Documents/

(numbers and letters) stands for a folder that would be unique to your app/computer, but would look like this: 779AE2245-F8W2-57A9-8C6D-98643B1CF01A

I was able to find it by going into appDelegate.m, scrolling down to the

- (NSURL *)applicationDocumentsDirectory 

method, and NSLogging the return path, like this:

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

This will give you your unique path, making it easier for you, because it is tricky locating it with the 2 unnamed folders/strings of letters and numbers.

Swift 4.2:

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

Solution 2

None of the answers mentioned the simplest way to actually get the location of the DB file.

It doesn't even require you to modify your source code, as it's a simple run time switch in XCode.

  1. Choose Edit Scheme... next to the Run button.

    edit scheme

  2. Select Run / Arguments and add the following two options:

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

    option

  3. Run the app, and you'll see in the logs:

    logs

Solution 3

Try this Simple 3 Step

  1. Copy the following code in didFinishLaunchingWithOptions your appdelegate.m and add a break point before the NSLog()

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

Or in Swift:

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

enter image description here

2.Open Finder->Go -> Go to folder and paste the path copied from step 1

enter image description here

3. Yah!!! You are in your Destination.

Solution 4

If your app is using Core Data, it's just a matter of searching for the sqlite file in Terminal:

find ~ -name app_db_file_name.sqlite

The results will list the full path to the simulator folders containing your app.

Solution 5

I hacked this one-liner (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'" \;

This prints:

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

Update:

As someone pointed out here, it is also possible to run xcrun simctl list devices to get a similar result:

== 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)
Share:
106,534

Related videos on Youtube

enlyte
Author by

enlyte

I'm currently an independent iOS developer based out of Boston, Mass. I have 4 apps in the Apple App Store Check out my projects at: stephenmoy.com Beta Testers Welcome

Updated on September 01, 2021

Comments

  • enlyte
    enlyte over 2 years

    Typically, the sqlite store file for core data apps is located in

    Library>Application Support>iPhone Simulator>7.1(or whichever version you are using)>Applications>(Whichever folder contains your app)>Documents

    folder, but I can't find it in IOS 8. I would assume they would just add an 8.0 folder inside the iPhone Simulator folder, but it's not there. Has anybody been able to locate it?

    • enlyte
      enlyte almost 10 years
      I'm Pretty sure your question is the duplicate, considering I asked it over a week before yours was asked. It would be appreciated if you let me get the credit for this question, considering it's the first question I've ever asked, and it seems like you already have a reputation @HenryGlendening
    • Nagarjun
      Nagarjun over 9 years
      Check out this how to check dbpath stackoverflow.com/a/27358291/3840428
    • Tunvir Rahman Tusher
      Tunvir Rahman Tusher over 9 years
    • Bocaxica
      Bocaxica over 7 years
      Does anybody know how to get the CoreData files from the actual device? I used to do this via iTunes in older versions of Xcode, but since Xcode 8 / iOS10 I don't think the CoreData files are stored in the documents directory of the app, hence not visible in iTunes. Is there a way to get the CoreDate files from the device on your computer?
    • RegularExpression
      RegularExpression over 7 years
      I do not know why they continue to move this. They should put it somewhere and just leave it.
  • fbeeper
    fbeeper over 9 years
    You can adapt this script to automate some things. But I must say that this GUI app that I just found sounds as a really useful alternative if you just want access to the app folders :)
  • DiscDev
    DiscDev over 9 years
    @AlexWei I wish that Apple would add a button on the File menu to "Reveal Simulator documents folder in finder" or something similar. Seems ridiculous that it's still not there, considering they keep changing where they are storing files...
  • Sandy Chapman
    Sandy Chapman about 9 years
    Use xcrun simctl list to get the list of simulator names and their UUIDs.
  • andreacipriani
    andreacipriani over 8 years
    Note that if you use a shared database for an app group (for example when you are using an extension) the path is Library/Developer/CoreSimulator/Devices/$number/data/Contain‌​ers/Shared/AppGroup/‌​$number/Name.sqlite
  • Martin
    Martin over 8 years
    Perfect, I edited your script to make another one which reinit all simulator data of a certain app. Thanks a lot James!
  • David Hersey
    David Hersey over 8 years
    Thanks! Great solution to a common PITA.
  • David Hersey
    David Hersey over 8 years
    This is also quite nice but I prefer the 2nd script posted by James Snook as it creates soft links to the data directories as well.
  • Yohst
    Yohst over 7 years
    Should be named "func documentDirectoryPath()" what that is where you are going...
  • Yohst
    Yohst over 7 years
    For swift3 use: NSSearchPathForDirectoriesInDomains(.applicationSupportDirec‌​tory, .userDomainMask, true)
  • toast
    toast over 7 years
    In case others are interested, I added this command as an alias to my .profile: alias myapp_simulator_db="find ~/Library/Developer/CoreSimulator/Devices -name MyApp.sqlite". Its handy when you need to repetitively run this command.
  • Fattie
    Fattie over 7 years
    The only solution here!
  • Qadir Hussain
    Qadir Hussain about 7 years
    sudo find ~ -name app_db_file_name.sqlite helped me
  • Qadir Hussain
    Qadir Hussain about 7 years
    This helped me. but when I try to goto that path via terminal it says: No such file or directory but when I try to goto folder option it actually exists.
  • Jacksonsox
    Jacksonsox over 6 years
    This worked for me on OSX. I needed to go 1 more directory within the "Application Support" directory named <my app name> to fine the .sqlite file.
  • Omid Ariyan
    Omid Ariyan over 6 years
    This is indeed the simplest and best solution. Thanks!
  • Augusto
    Augusto about 6 years
    For me the log not appears, you can help me?
  • hyperknot
    hyperknot about 6 years
    @Augusto I cannot help you here, but if you ask a new question about it people can probably answer it and help you.
  • Gang Fang
    Gang Fang about 5 years
    Note that, in 2019,Library/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Documents/ is no longer true. Now you find the .sqlite and related two files in Library/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Library/Application Support/
  • Admin
    Admin over 4 years
    Great answer! This should be the accepted answer. Also is there any way that you know of to change the color of this output in the console, other than through Xcode preferences? It would be nice if it stood out a bit more
  • AlKir
    AlKir about 4 years
    Thank you for the hint! Path changes constantly, for me now (iOS 13.3.1) path is /Users/***/Library/Developer/CoreSimulator/Devices/A91CEB1C-‌​B15D-46B5-9B83-DB220‌​56DEFD1/data/Contain‌​ers/Shared/AppGroup/‌​B835599A-CA36-432F-8‌​71A-17EDA181CC54/ So it's better to get it from CoreData debug information rather than trying to guess yourself.
  • Sanjay Shah
    Sanjay Shah about 4 years
    @GangFang I'm trying to convert my Objective C code which is build in Xcode 7 to the latest swift version and create new project, so how I can migrate this two different .sqlite file into once place.
  • MiltsInit
    MiltsInit about 3 years
    Try NSLog(@"APPLICATION SUPPORT DIRECTORY: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject]); @Gang Fang 's pointer to the change in directory structure highlights the need to change the search location from NSDocumentDirectory