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
