Путь к каталогу документа Xcode Device Simulator

91

В iOS 7 каталог документов симуляторов iOS можно найти в:

/Users/Sabo/Library/Application Support/iPhone Simulator/

Однако в iOS 8 Beta Simulator я не могу найти соответствующий каталог для iOS 8 в каталоге выше.

Где путь к каталогу документов для симулятора iOS 8?

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

Огонь кулак
источник
Попробуй это . Существует приложение, которое напрямую открывает каталог документов последнего запущенного приложения.
NSRover
попробуйте эту ссылку stackoverflow.com/questions/24133022/…
Tunvir Rahman Tusher
Если вы не можете найти папку с библиотекой, она, вероятно, скрыта. Если ввести эту команду в терминал, она отобразится: chflags nohidden ~ / Library
simon_smiley
Если вам нравится плагин Xcode, попробуйте github.com/onmyway133/XcodeWay , плагин Xcode, который может перемещаться в папку вашего симулятора и во многие другие места
onmyway133

Ответы:

156

на моем компьютере путь:

~/Library/Developer/CoreSimulator/Devices/1A8DF360-B0A6-4815-95F3-68A6AB0BCC78/data/Container/Data/Application/

ПРИМЕЧАНИЕ: возможно, эти длинные идентификаторы (например, UDID) на вашем компьютере разные.

холекс
источник
1
Если ваше приложение использует CoreData, может быть более простой способ поиска местоположения папки: stackoverflow.com/a/25937606/1103584
DiscDev
13
Нет, это неверно. Нет различия между проектами ObjC и проектами Swift. Это UDID (уникальные идентификаторы устройства), и вы можете увидеть свой, запустив «xcrun simctl list»
Джереми Хаддлстон Секвойя
@JeremyHuddlestonSequoia, правильно это или нет, именно так Swift и проект ObjC были скопированы на мой компьютер. Мне не нужно упоминать, что оба были скомпилированы только на симуляторе (это был исходный вопрос). если Xcode имеет различие между UDID для разных языков и вы считаете, что это неверно, вам может потребоваться сообщить об этом в Apple.
holex
7
Holex, я говорю, что ваше утверждение неверно, а не то, что дизайн неправильный (обратите внимание, что на самом деле я тот парень в Apple, который разработал CoreSimulator, поэтому я, вероятно, буду первым, кто исправит там что-то, что, как мне кажется, является неправильным. неправильно). UDID соответствуют отдельным устройствам. Единственная причина, по которой ваши проекты swift и objc будут использовать разные идентификаторы UDID, заключается в том, что вы развернули свои проекты на разных устройствах-симуляторах (например: для одного вы развернули на iPhone 5s, а другого - на iPhone 6).
Джереми Хаддлстон Секвойя
@JeremyHuddlestonSequoia, вы всегда можете исправить мой ответ, если чувствуете себя достаточно уверенно.
holex
76

NSLogниже кода где-нибудь в "AppDelegate", запустите свой проект и следуйте по пути. Вам будет проще получить доступ к документам, а не искать в произвольном порядке внутри "~ / Library / Developer / CoreSimulator / Devices /"

Цель-C

NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);

Swift
Если вы используете Swift 1.2, используйте приведенный ниже код, который будет выводиться только при разработке при использовании Simulator из-за #if #endifблока:

#if arch(i386) || arch(x86_64)
  let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
  NSLog("Document Path: %@", documentsPath)
#endif

Скопируйте свой путь из «/ Users / ankur / Library / Developer / CoreSimulator / Devices / 7BA821 ...», перейдите в « Finder », а затем « Go to Folder » или command+ shift+ gи вставьте свой путь, пусть Mac перенесет вас на ваш каталог документов :)

Анкур
источник
просто и эффективно!
loretoparisi
43

Просто напишите приведенный ниже код в AppDelegate -> didFinishLaunchingWithOptions
Objective C

#if TARGET_IPHONE_SIMULATOR 
// where are you? 
NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 
#endif 


Swift 2.X

if let documentsPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.path {
    print("Documents Directory: " + documentsPath)   
}

Swift 3.X

#if arch(i386) || arch(x86_64)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

Swift 4.2

#if targetEnvironment(simulator)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

Выходные данные
/ Пользователи / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A / data / Containers / Data / Application / 25174F64-7130-4B91-BC41-AC74257CCC6E / Documents

Скопируйте свой путь из «/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A ...», перейдите в «Finder», а затем «Перейти в папку» или команду + shift + g и вставьте свой путь , пусть Mac перенесет вас в каталог документов

Митул Марсония
источник
Как вы узнаете, в какой папке находится ваше приложение? Слишком много каталогов, мне нужно искать в каждом из них?
KarenAnne
ваш
ответ
это жестко запрограммированный путь к вашему собственному симулятору. Ни для кого другого это не сработает. На самом деле этот путь также изменится для вас, когда вы снова запустите симулятор.
NSRover
#if TARGET_IPHONE_SIMULATOR // где ты? NSLog (@ "Каталог документов:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); #endif
Mitul Marsoniya
16

Я рекомендую хорошее служебное приложение под названием SimPholder, которое упрощает поиск файлов и папок при разработке приложения для iOS. У него есть новая версия для работы с новыми симуляторами под названием SimPholder2. Его можно найти на simpholders.com

JDibble
источник
Это было бы классное приложение сейчас, когда iOS8 Simulator похоронен в неизвестности папок, но это приложение не было обновлено для поддержки iOS8.
wibobm
@wibobm. SimPholder2, безусловно, поддерживает iOS 8.0 и iOS 8.1
JDibble
О, МОЙ БОГ. Я, должно быть, был полностью слеп. Спасибо!
wibobm
16

Несмотря на то, что здесь много ответов, ни один из них не дает понимания того, как изменилась структура папок симуляторов iOS 8.3, и не предоставляет быстрый способ найти данные приложения (папка документов).

Начиная с iOS 8, папки для хранения данных приложения отделены от исполняемых файлов приложения, в то время как iOS 7 и ниже имеют одинаковую структуру папок, с той лишь разницей, что все симуляторы (разных типов и версий) теперь в одной большой папке.

Итак, путь к симулятору iOS 8,7,6 следующий:

~/Library/Developer/CoreSimulator/Devices

Каждый симулятор теперь содержится в папке с уникальным идентификатором, который изменяется при каждом сбросе симулятора.

Вы можете найти Identifierдля каждого из ваших устройств и симуляторов, перейдя вXcode > Window > Devices (первых 3 или 4 символа идентификатора более чем достаточно, чтобы запомнить).

Чтобы найти тот, на котором вы установили свои приложения, взгляните на свой Run scheme > devices(экран 2).

экран 1

экран 2

Теперь, после того как вы определите свой симулятор, в зависимости от его версии структура папок сильно отличается:

В iOS 8 исполняемый файл и папка данных приложения находятся в разных папках:

Исполняемый : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

Папка данных : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

Папка документов : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

В iOS 7 и ниже структура папок такая же, как и раньше, только помните, что теперь все симуляторы находятся в одной папке (см. Выше).

Разван
источник
13

Если ваше приложение использует CoreData, отличным трюком будет поиск имени файла sqlite с помощью терминала.

find ~ -name my_app_db_name.sqlite

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

Я действительно хотел бы, чтобы Apple просто добавила кнопку в меню файла iOS Simulator, например «Показать папку документов в Finder».

DiscDev
источник
1
Должен полюбить терминал.
kakubei
2
Это кажется довольно долгим способом найти это. Искать по всему домашнему каталогу?
shortstuffsushi
11

Это правильно, что нам нужно заглянуть в путь ~ / Library / Developer / CoreSimulator / Devices /.

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

Дипак GM
источник
Я тоже это вижу.
Натан Джонс
5
Пути не меняются каждый раз, когда вы запускаете приложение. В вашей библиотеке есть один путь для каждого устройства. Запустите 'xcrun simctl list', чтобы просмотреть список устройств и их UDID, чтобы увидеть, какой подкаталог вам следует рассмотреть.
Джереми Хаддлстон Секвойя
9

В iOS 9.2 и Xcode 7.2 следующий скрипт откроет папку Documents последнего установленного приложения на последнем использованном симуляторе;

cd ~/Library/Developer/CoreSimulator/Devices/
cd `ls -t | head -n 1`/data/Containers/Data/Application 
cd `ls -t | head -n 1`/Documents
open .

Чтобы создать легко запускаемый сценарий, поместите его в приложение Automator с помощью «Run Shell Script»:

Запустить сценарий оболочки внутри приложения Automator

Bouke
источник
7

С принятием CoreSimulator в Xcode 6.0 каталоги данных для каждого устройства, а не для каждой версии. Каталог данных ~ / Library / Developer / CoreSimulator / Devices // данные, которые можно определить из 'xcrun simctl list'

Обратите внимание, что вы можете безопасно удалить ~ / Library / Application Support / iPhone Simulator и ~ / Library / Logs / iOS Simulator, если вы не планируете возвращаться к Xcode 5.x или более ранней версии.

Джереми Хаддлстон Секвойя
источник
Спасибо, что дали то, что, вероятно, можно рассматривать как авторитетный ответ. Есть ли простой способ (кроме ведения журнала из приложения) найти местоположение определенного приложения в симуляторе?
fzwo
К сожалению, нет, но я видел несколько запросов об этом здесь и на форумах. Пожалуйста, отправьте
Джереми Хаддлстон Секвойя
7

обновление: Xcode 11.5 • Swift 5.2

if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
    print(documentsPath)   // "var/folder/.../documents\n" copy the full path
}

Перейдите в Finder, нажмите command-shift-g (или Go> Go to Folder ... под строкой меню) и вставьте туда полный путь "var / folder /.../ documents" и нажмите go.

Лео Дабус
источник
4

Пытаться ~/Library/Developer/CoreSimulator/Devices/

Дроппи
источник
4

Я столкнулся с той же проблемой, когда сохранил полный путь с помощью CoreData. При получении полного пути возвращается значение null, потому что UUID папки документов отличается каждый раз при перезапуске приложения. Вот мое решение:

  1. Убедитесь, что в CoreData сохраняется только относительный путь к документу / файлу. Например, сохраните «Files / image.jpg» вместо «/Users/yourname/.../Applications/UUID/Document/Files/image.jpg».
  2. Используйте следующее, чтобы получить местоположение документа приложения:

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

  3. Объедините как # 2, так и # 1, чтобы получить полный путь к документу / файлу, который вы хотите получить.
Вы можете обратиться к примечанию разработчика Apple: https://developer.apple.com/library/ios/technotes/tn2406/_index.html

netliner
источник
3

Где находится каталог документов для симулятора iOS 8

Возможно, вы заметили, что iPhone Simulator изменился с появлением Xcode 6 и, конечно же, с ним - путь к каталогу документов ваших смоделированных приложений. Иногда нам может потребоваться взглянуть на это.

Найти этот путь не так просто, как раньше, а именно: Библиотека / Поддержка приложений / iPhone Simulator / 7.1 / Приложения /, за которым следует загадочный номер, представляющий ваше приложение.

Что касается Xcode 6 и iOS 8, вы найдете его здесь: Library / Developer / CoreSimulator / Devices / cryptic number / data / Containers / Data / Application / cryptic number

http://pinkstone.co.uk/where-is-the-documents-directory-for-the-ios-8-simulator/

jbchitaliya
источник
3

в Appdelegate поместите этот код, чтобы увидеть Document and Cache Dir:

#if TARGET_IPHONE_SIMULATOR
    NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
    NSArray* cachePathArray = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString* cachePath = [cachePathArray lastObject];
    NSLog(@"Cache Directory: %@", cachePath);
#endif

в журнале:

Каталог документов: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Documents /

Каталог кэша: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Library / Caches

Иканимо
источник
3

Если вам нравится заходить в папки приложений, чтобы увидеть, что происходит, и не нужно проходить через лабиринтные UUDID, я сделал следующее: https://github.com/kallewoof/plget

и используя его, я сделал это: https://gist.github.com/kallewoof/de4899aabde564f62687

Обычно, когда я хочу перейти в папку какого-то приложения, я делаю:

$ cd ~/iosapps
$ ./app.sh
$ ls -l
total 152
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/BD660795-9131-4A5A-9A5D-074459F6A4BF
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/A74C9F8B-37E0-4D89-80F9-48A15599D404
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/07BA5718-CF3B-42C7-B501-762E02F9756E
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/5A4642A4-B598-429F-ADC9-BB15D5CEE9B0
-rwxr-xr-x  1 me  staff  3282 Nov 14 17:04 app.sh
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/69F7E3EF-B450-4840-826D-3830E79C247A
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/976D1E91-DA9E-4DA0-800D-52D1AE527AC6
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/473F8259-EE11-4417-B04E-6FBA7BF2ED05
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/CB21C38E-B978-4B8F-99D1-EAC7F10BD894
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.otherapp-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/DE3FF8F1-303D-41FA-AD8D-43B22DDADCDE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-7-1_iPad-Retina.dr -> simulator/4DC11775-F2B5-4447-98EB-FC5C1DB562AD/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-2.dr -> simulator/6FC02AE7-27B4-4DBF-92F1-CCFEBDCAC5EE/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-Retina.dr -> simulator/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-1_iPad-Retina.dr -> simulator/414E8875-8875-4088-B17A-200202219A34/data
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 org.cocoapods.demo.pajdeg-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/C3069623-D55D-462C-82E0-E896C942F7DE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 simulator -> /Users/me/Library/Developer/CoreSimulator/Devices

В ./app.shчасти синхронизируется ссылки. В настоящее время это необходимо практически всегда, поскольку приложения меняют UUID для каждого запуска в Xcode, начиная с 6.0. Также, к сожалению, приложения по идентификатору пакета для 8.x и по имени приложения для <8.

Kalle
источник
3

На основе ответа Анкура, но для нас, пользователей Swift:

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

Поместите его во ViewDidLoad, и он будет распечатан сразу после выполнения приложения.

Какубей
источник
3

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

~/Library/Developer/CoreSimulator/

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

/data/Containers/Data/Application/

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

ПРИМЕЧАНИЕ. Xcode изменяет имя каталога каждый раз, когда вы запускаете приложение, поэтому не полагайтесь на создание псевдонимов / ярлыков на рабочем столе.

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

NSRover
источник
2

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

 ~/Library/Developer/CoreSimulator

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

~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite
hmdeep
источник
2

Лучший способ найти путь - это сделать с помощью кода.

Используя Swift, просто вставьте приведенный ниже код в приложение- функцию в свой AppDelegate.swift.

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsPath = paths.first as String
println(documentsPath)

Для кода Obj-C посмотрите ответ от @Ankur

rsc
источник
2

Для Swift 3.x

if let documentsPath = FileManager.default.urls(for:.documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: " + documentsPath)
    }
Борис
источник
1

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first {
    debugPrint("documentsPath = \(documentsPath)")
}
SwiftАрхитектор
источник