Xcode 6 iPhone Simulator расположение поддержки приложений


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

15 135

15 ответов:

каталог симулятора был перемещен с помощью бета-версии Xcode 6...

~/Library/Developer/CoreSimulator

просмотр каталога в папку документов вашего приложения немного сложнее, например,

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

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

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

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

enter image description here

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

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

чтобы знать, где ваш .файл sqlite хранится в вашем AppDelegate.м добавьте следующий код

- (NSURL *)applicationDocumentsDirectory
{
    NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory      inDomains:NSUserDomainMask] lastObject]);

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory     inDomains:NSUserDomainMask] lastObject];
 }

теперь вызовите этот метод в AppDelegate.м

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

  //call here
   [self applicationDocumentsDirectory];

}

это сработало для меня в swift:

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

Я боролся с этим в течение некоторого времени. Это стало огромной болью, чтобы просто добраться до моей локальной базы данных 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

это создает SIM-ссылку в корне вашего диска. (Возможно, вам придется создать эту папку самостоятельно в первый раз, и chmod его, или вы можете изменить местоположение в другое место) затем я установил xcodeway плагин https://github.com/onmyway133/XcodeWay

Я немного изменил его, чтобы он позволил мне просто нажать cmd+d, и он откроет Finder winder в каталог постоянных документов моего текущего приложения. Таким образом, независимо от того, сколько раз XCode изменяет ваш путь, он изменяется только при запуске, и он обновляет вашу simlink сразу при каждом запуске.

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

открыть finder > библиотека>разработчик>CoreSimulator>устройства

затем измените значок расположения из finder выберите дату добавления

выберите приложение >данные > контейнер>данные > приложения>

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

- Он будет печатать полный путь к папке data.

Swift:

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

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

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

NSLog(@"%@",basePath);

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

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

NSString * NSTemporaryDirectory ( void );

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

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

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

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

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

тренажеры расположены под:

~/Library/Developer/CoreSimulator/

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

/data/Containers/Data/Application/

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

Примечание: Xcode изменяет имя каталога каждый раз, когда вы запускаете приложение, поэтому не полагайтесь на создание псевдоним / короткие пути на рабочем столе.

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

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

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
  1. С помощью Swift 4 Вы можете использовать приведенный ниже код, чтобы получить домашний каталог вашего приложения. Каталог документов вашего приложения находится там.

    print(NSHomeDirectory())

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

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

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

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

#!/bin/zsh

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

echo $lastUsedSimulatorAndApplication