Xcode 6 iPhone Simulator расположение поддержки приложений
в Xcode 6 у меня есть приложение, в котором я использую основные данные, но в поддержке приложений для iOS 8 iPhone Simulator нет папки. Где хранятся мои файлы и основные данные базы данных sqlite?
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 находится в виде значка в системном трее и предоставляет возможность "запустить при входе в систему".
Примечание: это работает только с 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
С помощью Swift 4 Вы можете использовать приведенный ниже код, чтобы получить домашний каталог вашего приложения. Каталог документов вашего приложения находится там.
print(NSHomeDirectory())
Я думаю, вы уже знаете, что домашний каталог вашего приложения можно изменить, поэтому, если вы не хотите добавлять дополнительный код в свою кодовую базу,SimPholder - это хороший инструмент для вас.
и дальше больше, вы можете задаться вопросом, есть ли инструмент, который может помочь вам сэкономить время от закрытия и повторного открытия одной и той же базы данных 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