在Xcode 6中,我有一个正在使用Core Data的应用程序,但“应用程序支持”中没有针对iOS 8 iPhone Simulator的文件夹。我的文件和Core Data sqlite数据库存储在哪里?
在Xcode 6中,我有一个正在使用Core Data的应用程序,但“应用程序支持”中没有针对iOS 8 iPhone Simulator的文件夹。我的文件和Core Data sqlite数据库存储在哪里?
Answers:
模拟器目录已随Xcode 6 Beta移至...
~/Library/Developer/CoreSimulator
将目录浏览到应用程序的Documents文件夹比较麻烦,例如,
~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite
~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
#if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif
现在,即使我每次构建时iOS8 + XCode6都会更改应用程序的数据GUID,我也可以使用simlink。
xcrun simctl list
命令可用于查看模拟器名称和设备UDID之间的对应关系。或更具体地说是xcrun simctl list devices
命令。
我建议您使用SimPholders查找模拟器文件。这是一个菜单栏项,可跟踪您的模拟器应用程序,并让您直接转到其文件夹和内容。这很棒。
我发现SimulatorManager应用程序非常有用。它直接将您带到已安装的模拟器的应用程序文件夹。我已经尝试使用7.1、8.0和8.1模拟器。
SimulatorManager作为图标驻留在系统任务栏中,并提供“登录时启动”选项。
注意:这仅适用于Xcode 6(在我的情况下为6.1.1)和更高版本。
希望有帮助!
要知道您的.sqlite文件在AppDelegate.m中的存储位置,请添加以下代码
- (NSURL *)applicationDocumentsDirectory
{
NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
现在在AppDelegate.m中调用此方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//call here
[self applicationDocumentsDirectory];
}
我为此花了一段时间。简单地进入我本地的sqlite数据库变得非常痛苦。我编写了此脚本,并在XCode中将其作为代码段。我将其放在appDelegate的appDidFinishLaunching内部。
//xcode 6 moves the documents dir every time. haven't found out why yet.
#if DEBUG
NSLog(@"caching documents dir for xcode 6. %@", [NSBundle mainBundle]);
NSString *toFile = @"XCodePaths/lastBuild.txt"; NSError *err = nil;
[DOCS_DIR writeToFile:toFile atomically:YES encoding:NSUTF8StringEncoding error:&err];
if(err)
NSLog(@"%@", [err localizedDescription]);
NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName];
remove([aliasPath UTF8String]);
[[NSFileManager defaultManager] createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil];
#endif
这将在驱动器的根目录下创建一个simlink。(您可能需要第一次自行创建此文件夹,然后对其进行chmod修改,或者可以将位置更改为其他位置)然后我安装了xcodeway插件https://github.com/onmyway133/XcodeWay
我对其进行了一些修改,以便可以简单地按cmd + d,它将打开finder winder到当前应用程序的持久Documents目录。这样,无论XCode更改路径多少次,它都只会在运行时更改,并且每次运行时都会立即更新simlink。
我希望这对其他人有用!
打开查找器>库>开发人员> CoreSimulator>设备
然后从查找程序中更改安排图标,选择添加日期
选择您的应用程序> data> Container> data> Applications>
选择您的应用程序> Documents> 这是您的db文件
就我而言:
/Users/pluto/Library/Developer/CoreSimulator/Devices/A75107D2-A535-415A-865D-978B2555370B/data/Containers/Data/Application/265A12BC-FF5B-4235-B5EF-6022B83754B4/Documents/dboPhotoBucket.sqlite
否则,请执行以下操作:
NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
-它将打印数据文件夹的完整路径。
迅速:
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
模拟器会将文件放在〜/ Library / Developer / CoreSimulator / Devices / ...中,但每个人/ Devices之后的路径都不相同。
使用这种方便的方法。它为当前用户返回临时目录的路径,并且不带参数。
NSString * NSTemporaryDirectory ( void );
因此,在我的ViewController类中,通常当我需要获取CoreData存储的文件时,通常将此行放入viewDidLoad中,以供参考。希望这可以帮助。
NSLog(@"FILE PATH :%@", NSTemporaryDirectory());
(注意:要转到路径,请从finder菜单中单击Go并键入〜/ Library打开隐藏目录,然后在Finder窗口中单击控制台上显示的路径。)
我创建了此脚本,该脚本将压缩为任何模拟器构建的最新应用程序,并将其压缩到桌面。
https://gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c
#!/bin/bash
DESTINATION_DIR="$HOME/Desktop"
APP_PATH=$(find ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Bundle/Application/*/*.app -type d -maxdepth 0 -print0 | xargs -0 ls -td | head -n1)
APP_DIRNAME=$(dirname "$APP_PATH")
APP_BASENAME=$(basename "$APP_PATH")
FILE_NAME="${APP_BASENAME%.*}"
cd "$APP_DIRNAME"
zip -qr "$DESTINATION_DIR/$FILE_NAME.zip" "$APP_BASENAME"
1. NSTemporaryDirectory() gives this:
/Users/spokaneDude/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/Data/Application/199B1ACA-A80B-44BD-8E5E-DDF3DCF0D8D9/tmp
2. remove "/tmp" replacing it with "/Library/Application Support/<app name>/" --> is where the .sqlite files reside
使用Swift 4,您可以使用以下代码获取应用程序的主目录。应用程序的文档目录位于其中。
print(NSHomeDirectory())
我想您已经知道应用程序的主目录是可更改的,因此,如果您不想在代码库中添加其他代码,SimPholder是您的理想工具。
更进一步,您可能想知道是否有一个工具,该工具可以在每次更改应用程序的主目录后帮助您节省关闭和重新打开同一SQLite数据库的时间。答案是肯定的,我知道的工具是SQLiteFlow。从文档中可以看出:
处理数据库文件名或目录更改。这使得SQLiteFlow可以与iOS模拟器中的SQLite数据库友好地工作。