Місцезнаходження програми підтримки Xcode 6 iPhone Simulator


137

У Xcode 6 у мене є додаток, в якому я використовую основні дані, але в службі підтримки програм для iOS 8 iPhone Simulator немає папки. Де зберігаються мої файли та база даних sqlite sql?


Спробуйте це . Існує додаток, який безпосередньо відкриває каталог Документи останнього запуску програми.
NSRover

Я додав відповідь (внизу інших відповідей), яка показує, як програмно пройти шлях, де проживають файли Core Data.
SpokaneDude

Подивіться на це посилання .. stackoverflow.com/questions/24133022 / ...
Tunvir Rahman Tusher

Використовуйте "NSTemvremeDirectory ()". Подивіться this- stackoverflow.com/questions/1108076 / ...
Shubhendu

Відповіді:


296

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

4
це взагалі правильно, але, здається, є більше внутрішніх змін папок. Це шлях, який працює для мене в Xcode Beta 3:~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn

1
Чи є спосіб зрозуміти, що цифри чи груба сила - це єдиний шанс потрапити до даних?
vir us

89
NSLog (@ "dir app:% @", [[[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); - надрукує повний шлях до папки даних
vir us

2
Для швидкої налагодження мені потрібен був постійний ярлик до каталогу документів мого додатка. Після застосування didFinishLaunchingWithOptions. #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 даних мого додатка щоразу, коли я створюю.
морський бас

32
xcrun simctl listКоманда може бути використана , щоб побачити відповідність між іменами тренажерів і UDIDs пристроїв. Або більш конкретно xcrun simctl list devicesкоманду.
ThomasW

36

Я б запропонував вам використовувати SimPholders для пошуку своїх файлів Simulator. Це пункт рядка меню, який відстежує ваші програми тренажера та дозволяє безпосередньо переходити до їх папок та вмісту. Це приголомшливо.


У мене також виникли проблеми із SimPholders2 на Yosemite, тому я запустив сценарій командного рядка, щоб допомогти вам знайти та відкрити вікно Finder до тренажера та потрібного додатка. Він проходить через папки та списки метаданих, щоб перелічити всі папки симулятора та програми. Якщо цікаво, перевірити його тут
Родріго Ліма

SimPholders2 працює в Yosemite, але це трохи повільно; як тільки ви натискаєте на піктограму в рядку стану, просто зачекайте кілька секунд, і вона повинна з’явитися.
Джейсон

Ось це дивовижні та новітні роботи з Yosemite + Xcode 6.3!
TruMan1

21

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

SimulatorManager розташований як значок у системному треї та надає опцію "Запуск при вході".

введіть тут опис зображення

Примітка . Це працює лише з Xcode 6 (в моєму випадку 6.1.1) і вище.

Сподіваюся, що це допомагає!


Amar, як встановити SimulatorManager? Я думав, що це плагін до Xcode, але це проект Xcode
malena

1
у верхній панелі виберіть: Продукт -> Архів ->, а потім експортуйте Архів як додаток для Mac без повторного підписання (остання опція), ви отримаєте файл .app, який ви можете помістити в папку програми, як звичайний додаток. ..
Heckscheibe

11

Щоб знати, де ваш файл .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];

}

чудово .. особливо корисно, коли є декілька тренажерів
Yasitha Waduge

6

Це працювало для мене швидко:

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

3

Я боровся з цим деякий час. Мені стало величезним болем просто доїхати до мого локального бібліотеки 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 змінює ваш шлях, він змінюється лише під час запуску, і він оновлює ваше симлінк негайно під час кожного запуску.

Сподіваюся, це корисно для інших!


Дякую, я просто оновлюю XcodeWay для підтримки папки симулятора iOS 8
onmyway133

3

Відкрити пошук> Бібліотека> Розробник> 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)")

Swift 3.0:let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
AtomicBoolean

2

Використовуйте Finder -> перейдіть до папки та введіть заданий базовий шлях, щоб дістатися до папок додатків

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

NSLog(@"%@",basePath);

1

Симулятор розміщує файл у ~ / Бібліотека / Розробник / CoreSimulator / Пристрої / ..., але шлях після / Пристрої для всіх різний.

Скористайтеся цим зручним методом. Він повертає шлях до тимчасового каталогу для поточного користувача і не бере аргументів.

NSString * NSTemporaryDirectory ( void );

Тому в моєму класі ViewController я зазвичай розміщую цей рядок у своєму viewDidLoad лише для ознайомлення, коли мені потрібно схопити свій збережений файл CoreData. Сподіваюся, це допомагає.

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

.


1

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

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

1

Симулятори розташовані під:

~/Library/Developer/CoreSimulator/

Тут вони перераховані як каталоги з іменами UUID. Використовуйте сортування за "Дата зміни", щоб знайти останню. Всередині перейдіть до:

/data/Containers/Data/Application/

Тут ви отримаєте список усіх програм на цьому пристрої. Ви знову можете сортувати це, щоб отримати останню програму.

ПРИМІТКА. Xcode змінює ім'я каталогу кожного разу, коли ви запускаєте додаток, тому не покладайтеся на створення псевдонімів / скорочень на робочому столі.

Найпростіший спосіб - тут скористатися додатком , який все робить автоматично.


1

Я створив цей скрипт, який буде завантажувати найновіший додаток, створений для будь-якого симулятора, та завантажувати його на робочий стіл.

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

У Swift 4 або Swift 5 ви можете використовувати NSHomeDirectory().

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

po NSHomeDirectory()

po стоїть для об’єкта друку і друкує більшість речей


0
 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

0
  1. За допомогою Swift 4 ви можете використовувати код нижче, щоб отримати домашній каталог свого додатка. Документ вашого додатка знаходиться там.

    print(NSHomeDirectory())

  2. Я думаю, ви вже знаєте, що домашній каталог вашої програми може змінюватися, тому якщо ви не хочете додавати додатковий код у свою кодову базу, SimPholder - це приємний інструмент для вас.

  3. Крім того, вам може бути цікаво, чи існує інструмент, який допоможе вам заощадити час від закриття та повторного відкриття тієї ж бази даних SQLite кожного разу після зміни домашнього каталогу вашого додатка. І відповідь - так, інструмент, про який я знаю, - це SQLiteFlow . З цього документа йдеться про те, що:

    Обробіть зміни файлу бази даних або зміни каталогу. Це дозволяє SQLiteFlow працювати дружньо з вашою базою даних SQLite в тренажері iOS.


0

Ось ш для останнього використовуваного тренажера і застосування. Просто запустіть sh і скопіюйте надрукований текст, вставте і запустіть команду для показу в пошуку.

#!/bin/zsh

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

echo $lastUsedSimulatorAndApplication
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.