Местоположение приложения Xcode 6 iPhone Simulator

В Xcode 6 у меня есть приложение, в котором я использую Core Data, но нет никакой папки в Application Support для iOS 8 iPhone Simulator. Где хранятся мои файлы и база данных sqlite Core Data?

Ответ 1

Каталог симулятора был перемещен с помощью 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

Ответ 2

Я бы посоветовал вам использовать SimPholders, чтобы найти файлы вашего симулятора. Это элемент меню, который отслеживает ваши приложения симулятора и позволяет перейти непосредственно к их папкам и контенту. Это потрясающе.

Ответ 3

Я нашел SimulatorManager приложение очень полезным. Он напрямую переносит вас в папку приложений установленных имитаторов. Я пробовал с 7.1, 8.0 и 8.1 симуляторами.

SimulatorManager находится в виде значка в системном трее и предоставляет возможность "Запуск при входе".

enter image description here

Примечание. Это работает только с Xcode 6 (6.1.1 в моем случае) и выше.

Надеюсь, что это поможет!

Ответ 4

Чтобы узнать, где хранится ваш .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];

}

Ответ 5

Это сработало для меня быстрым:

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

Ответ 6

Я боролся с этим в течение некоторого времени. Это стало огромной болью, чтобы просто добраться до моего локального sqlite db. Я написал этот script и сделал его фрагментом кода внутри 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, и он откроет намотку поиска в моем текущем каталоге постоянных документов приложения. Таким образом, не важно, сколько раз XCode изменяет ваш путь, он изменяется только при запуске и мгновенно обновляет вашу симуляцию при каждом запуске.

Надеюсь, это полезно для других!

Ответ 7

Открыть поиск > Библиотекa > Разработчик > CoreSimulator > Устройства

Затем нажмите значок "Изменить расположение" на панели поиска. Дата добавления

Выберите приложение > данные > Контейнеp > данные > Приложения >

выберите приложение > Документы > Вот ваш файл 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]); 

- Он напечатает полный путь к папке с данными.

Swift:

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

Ответ 8

Использовать Finder → перейти в папку и ввести данный базовый путь для доступа к папкам приложений

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

NSLog(@"%@",basePath);

Ответ 9

Симулятор помещает файл в ~/Library/Developer/CoreSimulator/Devices/... но путь после/Устройства различен для всех.

Используйте этот удобный метод. Он возвращает путь к временному каталогу для текущего пользователя и не принимает никаких аргументов.

NSString * NSTemporaryDirectory ( void );

Итак, в моем классе ViewController я обычно помещаю эту строку в свой viewDidLoad только для справки, когда мне нужно захватить мой сохраненный файл CoreData. Надеюсь это поможет.

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

(Примечание: чтобы перейти к пути, в меню поиска нажмите "Перейти" и введите ~/Библиотека, чтобы открыть скрытый каталог, а затем в окне "Finder" вы можете щелкнуть путь, показанный на вашей консоли.)

Ответ 10

Это место снова изменилось, если вы используете Swift, используйте это, чтобы узнать, где находится папка (это скопировано из файла AppDelegate.swift, который Apple создает для вас, поэтому, если он не работает на вашей машине, поиск в этом файле для правильного синтаксиса, это работает на моем, используя Xcode 6.1 и симулятор iOS 8):

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

Ответ 11

Симуляторы расположены под:

~/Library/Developer/CoreSimulator/

Здесь они перечислены как каталоги с именами UUID. Используйте сортировку по "Дата изменения", чтобы найти последнюю. Внутри перейдите к:

/data/Containers/Data/Application/

Здесь вы получите список всех приложений на этом устройстве. Вы можете снова отсортировать это, чтобы получить последнее приложение.

ПРИМЕЧАНИЕ. Xcode изменяет имя каталога при каждом запуске приложения, поэтому не полагайтесь на создание псевдонима/коротких сокращений на рабочем столе.

Самый простой способ - использовать приложение здесь, которое делает все автоматически.

Ответ 12

Я создал этот script, который закроет последнее приложение, созданное для любого симулятора, и запустит его на рабочий стол.

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"

Ответ 13

 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

Ответ 14

  1. В Swift 4 вы можете использовать приведенный ниже код, чтобы получить домашний каталог вашего приложения. Ваш каталог документов приложения находится там.

    print(NSHomeDirectory())

  2. Я думаю, вы уже знаете, что домашний каталог вашего приложения может быть изменен, поэтому, если вы не хотите добавлять дополнительный код в свою кодовую базу, SimPholder - хороший инструмент для вас.

  3. Более того, вы можете спросить, есть ли инструмент, который поможет вам сэкономить время после закрытия и повторного открытия одной и той же базы данных SQLite каждый раз после изменения домашнего каталога вашего приложения. И ответ - да, инструмент, который я знаю, это SQLiteFlow. Из этого документа говорится, что:

    Обрабатывать имя файла базы данных или изменения каталога. Это позволяет SQLiteFlow работать с вашей базой данных SQLite в симуляторе iOS.

Ответ 15

Вот sh для последнего использованного симулятора и приложения. Просто запустите sh, скопируйте напечатанный текст, вставьте и выполните команду show в finder.

#!/bin/zsh

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

echo $lastUsedSimulatorAndApplication

Ответ 16

В Swift 4 или Swift 5 вы можете использовать NSHomeDirectory().

Самый простой способ в Xcode 10 (или Xcode 11) - приостановить работу вашего приложения (например, когда оно достигает точки останова) и запустить эту строку в консоли отладчика:

po NSHomeDirectory()

po обозначает объект печати и печатает большинство вещей