ios - Xcode 6 iPhone Simulator应用程序支持位置

Translate

在Xcode 6中,我有一个正在使用Core Data的应用程序,但“应用程序支持”中没有针对iOS 8 iPhone Simulator的文件夹。我的文件和Core Data sqlite数据库存储在哪里?

This question and all comments follow the "Attribution Required."

所有的回答

Translate

模拟器目录已随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
来源
Translate

我建议您使用SimPholders查找您的模拟器文件。这是一个菜单栏项目,可跟踪您的模拟器应用程序,并让您直接进入其文件夹和内容。这很棒。

来源
Translate

我发现模拟器管理器应用程序非常有用。它直接将您带到已安装的模拟器的应用程序文件夹。我已经尝试使用7.1、8.0和8.1模拟器。

SimulatorManager作为图标驻留在系统任务栏中,并提供“登录时启动”选项。

enter image description here

注意注意:仅适用于Xcode 6(在我的情况下为6.1.1)和更高版本。

希望有帮助!

来源
Translate

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

}
来源
Translate

这对我迅速起作用:

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

我为此花了一段时间。简单地进入我本地的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。

我希望这对其他人有用!

来源
Translate

打开查找器>库>开发人员> CoreSimulator>设备

然后从查找程序中更改安排图标,选择添加日期

选择您的应用程序> data> Container> data> Applications>

选择您的应用>“文档”>这是您的数据库文件

就我而言:

/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)")
来源
Translate

使用Finder->转到文件夹并输入给定的基本路径以访问应用程序文件夹

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

NSLog(@"%@",basePath);
来源
Translate

模拟器会将文件放在〜/ Library / Developer / CoreSimulator / Devices / ...中,但每个人/ Devices之后的路径都不相同。

使用这种方便的方法。它为当前用户返回临时目录的路径,并且不带参数。

NSString * NSTemporaryDirectory ( void );

因此,在我的ViewController类中,通常当我需要获取CoreData存储的文件时,通常将此行放入viewDidLoad中,以供参考。希望这可以帮助。

  NSLog(@"FILE PATH :%@", NSTemporaryDirectory());

(注意:要转到路径,请从finder菜单中单击Go并键入〜/ Library打开隐藏目录,然后在Finder窗口中单击控制台上显示的路径。)

来源
Translate

此位置再次更改,如果使用Swift,请使用此位置查找文件夹的位置(此位置是从Apple为您创建的AppDelegate.swift文件中复制的,因此如果它在您的计算机上不起作用,请搜索该文件以正确的语法显示,这在我的Xcode 6.1和iOS 8模拟器上可以正常运行):

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

模拟器位于以下位置:

~/Library/Developer/CoreSimulator/

在这里,它们被列为具有UUID名称的目录。使用按“修改日期”排序以查找最新的。内部导航到:

/data/Containers/Data/Application/

在这里,您将获得该设备上所有应用程序的列表。您可以再次对其进行排序以获取最新的应用程序。

注意:Xcode每次运行应用程序时都会更改目录名称,因此不要依赖在桌面上进行别名/快捷方式。

最简单的方法是使用应用程序这里,它会自动执行所有操作。

来源
Translate

我创建了此脚本,该脚本将压缩为任何模拟器构建的最新应用程序,并将其压缩到桌面。

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"
来源
Translate
 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
来源
Tim
Translate
  1. 使用Swift 4,您可以使用以下代码获取应用程序的主目录。应用程序的文档目录位于其中。

    print(NSHomeDirectory())

  2. 我想您已经知道应用程序的主目录是可更改的,因此,如果您不想在代码库中添加其他代码,SimPholder对您来说是个不错的工具。

  3. 更进一步,您可能想知道是否有一个工具,可以在您更改应用程序的主目录后每次关闭和重新打开相同的SQLite数据库时节省时间。答案是肯定的,我知道的工具是SQLiteFlow。从文档中可以看出:

    处理数据库文件名或目录更改。这使得SQLiteFlow可以与iOS模拟器中的SQLite数据库友好地工作。

来源
Translate

这里是sh最后使用的模拟器和应用程序。只需运行sh并复制打印的文本并粘贴并运行命令以在finder中显示。

#!/bin/zsh

lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`

echo $lastUsedSimulatorAndApplication
来源
exp
Translate

在Swift 4或Swift 5中,您可以使用NSHomeDirectory().

Xcode 10(或Xcode 11)中最简单的方法是暂停您的应用程序(例如遇到断点时),然后在调试器控制台中运行以下行:

po NSHomeDirectory()

po代表打印对象并打印大多数内容

来源