Sqlite文件位置核心数据

enl*_*yte 86 sqlite core-data objective-c ios swift

通常,核心数据应用程序的sqlite存储文件位于

库>应用程序支持> iPhone模拟器> 7.1(或您使用的任何版本)>应用程序>(无论哪个文件夹包含您的应用程序)>文档

文件夹,但我在IOS 8中找不到它.我认为他们只会在iPhone模拟器文件夹中添加一个8.0文件夹,但它不存在.有没有人找到它?

enl*_*yte 128

我设法找到了sqlite文件,现在它在这条路径中:

图书馆/开发人员/ CoreSimulator /设备/(数字和字母)/数据/容器/数据/应用/(数字和字母)/文件/

(数字和字母)代表一个应用程序/计算机独有的文件夹,但如下所示:779AE2245-F8W2-57A9-8C6D-98643B1CF01A

我可以通过进入appDelegate.m找到它,向下滚动到

- (NSURL *)applicationDocumentsDirectory 
Run Code Online (Sandbox Code Playgroud)

方法和NSLogging返回路径,如下所示:

// 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];
 }
Run Code Online (Sandbox Code Playgroud)

这将为您提供独特的路径,使您更容易,因为使用2个未命名的文件夹/字母和数字字符串定位它是棘手的.

Swift 4.2:

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])
Run Code Online (Sandbox Code Playgroud)

  • 使用`xcrun simctl list`获取模拟器名称及其UUID列表. (4认同)
  • 请注意,在** 2019 **中,``库/开发人员/ CoreSimulator /设备/(数字和字母)/数据/容器/数据/应用程序/(数字和字母)/文档/''不再正确。现在,您可以在“库/开发人员/ CoreSimulator /设备/(数字和字母)/数据/容器/数据/应用程序/(数字和字母)/库/应用程序支持/”中找到.sqlite及其相关的两个文件。 (3认同)
  • 请注意,如果您为应用程序组使用共享数据库(例如,当您使用扩展程序时),路径为 Library/Developer/CoreSimulator/Devices/$number/data/Containers/Shared/AppGroup/$number/Name.sqlite (2认同)

hyp*_*not 56

没有一个答案提到了实际获取DB文件位置的最简单方法.

它甚至不需要您修改源代码,因为它是XCode中的简单运行时开关.

  1. 选择"运行"按钮旁边的"编辑方案...".

    编辑方案

  2. 选择Run/Arguments并添加以下两个选项:

    -com.apple.CoreData.SQLDebug 1
    -com.apple.CoreData.Logging.stderr 1
    
    Run Code Online (Sandbox Code Playgroud)

    选项

  3. 运行应用程序,您将在日志中看到:

    日志

  • 这确实是最简单和最好的解决方案。谢谢! (3认同)
  • 对我来说日志没有出现,你能帮助我吗? (2认同)

Tun*_*her 51

试试这个简单的3步

  1. 在下面的代码复制didFinishLaunchingWithOptionsappdelegate.m和前添加一个破发点NSLog()

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

或者在Swift中:

let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
print(paths[0])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

2.打开Finder-> Go - >转到文件夹并粘贴从步骤1复制的路径

在此输入图像描述

呀!!! 你在目的地.

  • 对于swift3使用:NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory,.userDomainMask,true) (2认同)

Dis*_*Dev 37

如果您的应用程序使用的是Core Data,则只需在终端中搜索sqlite文件:

find ~ -name app_db_file_name.sqlite
Run Code Online (Sandbox Code Playgroud)

结果将列出包含您的应用程序的模拟器文件夹的完整路径.

  • @AlexWei我希望Apple在文件菜单上添加一个按钮,以"在Finder中显示模拟器文档文件夹"或类似的东西.看起来他们仍在那里,考虑到他们不断改变存储文件的位置,这似乎很荒谬...... (2认同)

Ale*_*der 20

我砍了这个单线(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'" \;

这打印:

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
Run Code Online (Sandbox Code Playgroud)

更新:

正如有人在指出的那样,也可以运行xcrun simctl list devices以获得类似的结果:

== 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)
Run Code Online (Sandbox Code Playgroud)


Mik*_*das 17

如果您正在使用Swift,这将返回文档目录的绝对路径:

func applicationDirectoryPath() -> String {
    return NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as String
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*ook 13

我编写了一个bash脚本,用于在模拟器中查找Application文件夹和Application数据文件夹的位置,您可以在此处下载.解压缩脚本后,您可以导航到脚本所在的文件夹并使用它.如果您在没有选项的情况下调用它,它将为您提供已安装的iOS模拟器列表.然后,您可以使用这些选项来查找您的程序.写作:

./simulatorAppFolders -s "iPad Air" -i iOS-8-0 -a <MyApp>
Run Code Online (Sandbox Code Playgroud)

将在iPad Air iOS 8模拟器上找到应用程序的应用程序文件夹和主区域文件夹.这是一个例子:

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
Run Code Online (Sandbox Code Playgroud)

更新

原始脚本有一个更新,允许您使用-d选项基于设备类型进行搜索.我还编写了另一个脚本,它创建了一系列明智的命名文件夹,以便您可以找到您的应用程序和应用程序文档.此脚本将在您的家庭区域中创建一个名为iOS_SIMULATORS的文件夹,您可以从那里轻松导航到您的应用程序.


vir*_* us 6

我能够使用下一个控制台输出找到simulators文件夹:

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

在我的情况下它是(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/
Run Code Online (Sandbox Code Playgroud)


Joc*_*fer 6

基于Michaels的答案,这是针对Swift 3的

    func applicationDirectoryPath() -> String {
        return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String
    }
Run Code Online (Sandbox Code Playgroud)


Naz*_*zir 5

在 Xcode 的新更新后,我发现 sql 文件现在存储在新文件夹中,/Library/Application Support这可能是一种独特的情况,但如果您没有在文档文件夹中找到 sql 文件,请在此处搜索它们:

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

在它被存储在Documents文件夹之前:

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


Tec*_*ech 5

对于Swift 3.0

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])
Run Code Online (Sandbox Code Playgroud)

你可以在Xcode 8.2中获得Coredata的位置