Xcode 6 iPhone模拟器应用程序支持位置

137
在 Xcode 6 中,我正在使用 Core Data 的应用程序,但是在 iOS 8 iPhone 模拟器的 Application Support 文件夹中找不到任何文件夹。我的文件和 Core Data sqlite 数据库存储在哪里?

尝试使用这个链接。有一个应用程序可以直接打开最近运行的应用程序的文档目录。 - NSRover
我添加了一个答案(在其他答案的底部),展示了如何以编程方式获取Core Data文件所在的路径。 - SpokaneDude
请查看此链接:https://dev59.com/o2Af5IYBdhLWcg3w7mU_#27461267 - Tunvir Rahman Tusher
使用 "NSTemporaryDirectory()"。查看此链接 - https://dev59.com/JnNA5IYBdhLWcg3wC5bh#32087374 - Shubhendu
16个回答

298

Xcode 6 beta将模拟器目录移动到了...

~/Library/Developer/CoreSimulator

访问您的应用程序文档文件夹的目录有些费劲,例如:

~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite

4
总体而言这是正确的,但似乎有更多内部文件夹的更改。以下是我在 Xcode beta 3 中有效的路径: ~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/ - harryhorn
1
有没有办法了解数字或暴力破解是获取数据的唯一机会? - vir us
90
NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
  • 这段代码将打印数据文件夹的完整路径。
- vir us
2
我需要一个持久的快捷方式到我的应用程序文档目录,以进行快速调试。在应用程序 didFinishLaunchingWithOptions 之后。 `#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。
- seabass
32
еҸҜд»ҘдҪҝз”Ёxcrun simctl listе‘Ҫд»ӨжҹҘзңӢжЁЎжӢҹеҷЁеҗҚз§°дёҺи®ҫеӨҮUDIDд№Ӣй—ҙзҡ„еҜ№еә”е…ізі»гҖӮжӣҙе…·дҪ“ең°иҜҙпјҢжҳҜдҪҝз”Ёxcrun simctl list devicesе‘Ҫд»ӨгҖӮ - ThomasW
显示剩余5条评论

36

我建议您使用 SimPholders 查找模拟器文件。 它是一个菜单栏项目,可跟踪您的模拟器应用程序,并允许您直接访问它们的文件夹和内容。 真是太棒了。


我在Yosemite上也遇到了SimPholders2的问题,因此我启动了一个命令行脚本来帮助你查找并打开所需的模拟器和应用程序的Finder窗口。它会浏览文件夹和元数据plist以列出所有的模拟器文件夹和应用程序。如果您感兴趣,请点击这里 - Rodrigo Lima
SimPholders2在Yosemite上可以使用,但速度有点慢;一旦您点击状态栏中的图标,请等待几秒钟,它就会出现。 - Jason
哇,这太棒了,而且可以在Yosemite + Xcode 6.3上使用! - TruMan1

21

我觉得 SimulatorManager 应用非常有用。它能直接带你进入已安装的模拟器应用程序文件夹内。我尝试过使用 7.1、8.0 和 8.1 模拟器。

SimulatorManager 将作为系统托盘图标存在,并提供了一个“登录启动”选项。

输入图片描述

注意:这仅适用于 Xcode 6(我的版本为 6.1.1)及以上版本。

希望这能帮到你!


Amar,你如何安装SimulatorManager?我以为它是Xcode的插件,但实际上它是一个Xcode项目。 - malena
1
在顶部菜单栏中选择: 产品 -> 存档 -> 然后将存档导出为 Mac 应用程序而无需重新签名(最后一个选项) 您将获得一个 .app 文件,您可以像普通应用程序一样将其放入应用程序文件夹中... - Heckscheibe

11

要知道你的 .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];

}

非常好..在有多个模拟器的情况下特别有用 - Yasitha Waduge

6

这个在Swift中对我起了作用:

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")

3

我曾经为此苦苦挣扎。只是想访问本地的 SQLite 数据库变得异常麻烦。于是我写了这个脚本,并将其作为代码片段放在 XCode 中。我将其放在 appDidFinishLaunching 函数中,即我的 appDelegate 文件。


//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


这将在您的驱动器根目录创建一个符号链接。(第一次可能需要自己创建此文件夹并进行chmod,或者您可以将位置更改为其他地方)然后我安装了xcodeway插件https://github.com/onmyway133/XcodeWay。我稍微修改了它,以便我只需按下cmd+d,就会打开Finder窗口到我的当前应用程序的持久文档目录。这样,无论XCode更改路径多少次,它仅在运行时更改,并且每次运行都会立即更新您的符号链接。
希望对其他人有用!

谢谢,我刚刚更新了XcodeWay以支持iOS 8模拟器文件夹。 - onmyway133

3

打开Finder>Library>Developer>CoreSimulator>Devices

然后在Finder中选择“按添加日期排序”图标

选择您的应用程序 >数据>容器>数据>应用程序>

选择您的应用程序 >文档>这里是您的数据库文件

以我为例:

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

- 它将打印数据文件夹的完整路径。

Swift:

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")

Swift 3.0: let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App 路径: \(dirPaths)") - AtomicBoolean

2

使用Finder-->前往文件夹,并输入给定的基础路径以到达应用程序文件夹。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

NSLog(@"%@",basePath);

1

这个位置已经再次更改,如果使用Swift,请使用以下代码查找文件夹的位置(这是从苹果为您创建的AppDelegate.swift文件中复制的,因此如果在您的机器上不起作用,请在该文件中搜索正确的语法,这对我使用的Xcode 6.1和iOS 8模拟器有效):

let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")

1
我创建了一个脚本,可以将任何模拟器的最新构建的应用程序压缩并保存到桌面。

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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接