У Xcode 6 у мене є додаток, в якому я використовую основні дані, але в службі підтримки програм для iOS 8 iPhone Simulator немає папки. Де зберігаються мої файли та база даних sqlite sql?
У Xcode 6 у мене є додаток, в якому я використовую основні дані, але в службі підтримки програм для iOS 8 iPhone Simulator немає папки. Де зберігаються мої файли та база даних sqlite sql?
Відповіді:
Каталог симулятора переміщено з бета-версією 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
~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
#if DEBUG 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
Тепер у мене є посилання, яке працює, хоча iOS8 + XCode6 змінює GUID даних мого додатка щоразу, коли я створюю.
xcrun simctl list
Команда може бути використана , щоб побачити відповідність між іменами тренажерів і UDIDs пристроїв. Або більш конкретно xcrun simctl list devices
команду.
Я б запропонував вам використовувати SimPholders для пошуку своїх файлів Simulator. Це пункт рядка меню, який відстежує ваші програми тренажера та дозволяє безпосередньо переходити до їх папок та вмісту. Це приголомшливо.
Я знайшов додаток SimulatorManager дуже корисним. Він перенесе вас безпосередньо в папку додатків встановлених тренажерів. Я спробував з тренажерами 7.1, 8.0 і 8.1.
SimulatorManager розташований як значок у системному треї та надає опцію "Запуск при вході".
Примітка . Це працює лише з Xcode 6 (в моєму випадку 6.1.1) і вище.
Сподіваюся, що це допомагає!
Щоб знати, де ваш файл .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];
}
Я боровся з цим деякий час. Мені стало величезним болем просто доїхати до мого локального бібліотеки sqlite. Я написав цей скрипт і зробив його фрагмент коду всередині XCode. Я розміщую його всередині свого додаткаDidFinishLaunching у своєму додаткуDelegate.
//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 змінює ваш шлях, він змінюється лише під час запуску, і він оновлює ваше симлінк негайно під час кожного запуску.
Сподіваюся, це корисно для інших!
Відкрити пошук> Бібліотека> Розробник> CoreSimulator> Пристрої
Потім змініть значок розташування в пошуку, виберіть Дата додана
Виберіть додаток> дані> контейнер> дані> програми>
виберіть додаток> Документи> Ось ваш файл 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]);
- Він надрукує повний шлях до папки даних.
Швидкий:
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
Використовуйте Finder -> перейдіть до папки та введіть заданий базовий шлях, щоб дістатися до папок додатків
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSLog(@"%@",basePath);
Симулятор розміщує файл у ~ / Бібліотека / Розробник / CoreSimulator / Пристрої / ..., але шлях після / Пристрої для всіх різний.
Скористайтеся цим зручним методом. Він повертає шлях до тимчасового каталогу для поточного користувача і не бере аргументів.
NSString * NSTemporaryDirectory ( void );
Тому в моєму класі ViewController я зазвичай розміщую цей рядок у своєму viewDidLoad лише для ознайомлення, коли мені потрібно схопити свій збережений файл CoreData. Сподіваюся, це допомагає.
NSLog(@"FILE PATH :%@", NSTemporaryDirectory());
.
Це місце ще раз змінилося, якщо ви користуєтесь Swift, використовуйте це, щоб дізнатися, де знаходиться папка (це скопійовано з файлу AppDelegate.swift, який Apple створює для вас, тому, якщо він не працює на вашій машині, шукайте в цей файл для правильного синтаксису, він працює на шахті за допомогою симулятора Xcode 6.1 та iOS 8):
let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")
Симулятори розташовані під:
~/Library/Developer/CoreSimulator/
Тут вони перераховані як каталоги з іменами UUID. Використовуйте сортування за "Дата зміни", щоб знайти останню. Всередині перейдіть до:
/data/Containers/Data/Application/
Тут ви отримаєте список усіх програм на цьому пристрої. Ви знову можете сортувати це, щоб отримати останню програму.
ПРИМІТКА. Xcode змінює ім'я каталогу кожного разу, коли ви запускаєте додаток, тому не покладайтеся на створення псевдонімів / скорочень на робочому столі.
Найпростіший спосіб - тут скористатися додатком , який все робить автоматично.
Я створив цей скрипт, який буде завантажувати найновіший додаток, створений для будь-якого симулятора, та завантажувати його на робочий стіл.
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"
У Swift 4 або Swift 5 ви можете використовувати NSHomeDirectory()
.
Найпростіший спосіб у Xcode 10 (або Xcode 11) - призупинити додаток (наприклад, коли він потрапить у точку розриву) та запустити цей рядок у консолі налагодження:
po NSHomeDirectory()
po
стоїть для об’єкта друку і друкує більшість речей
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.
Ось ш для останнього використовуваного тренажера і застосування. Просто запустіть sh і скопіюйте надрукований текст, вставте і запустіть команду для показу в пошуку.
#!/bin/zsh
lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`
echo $lastUsedSimulatorAndApplication