Каталог документов Путь к бета-симулятору iOS 8

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

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

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

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

enter image description here

Ответ 1

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

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

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

Ответ 2

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

Objective-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", а затем " Перейти в папку" или command + shift + g и вставьте свой путь, дайте Mac взять вас в каталог документов:)

Ответ 3

Просто напишите следующий код в AppDelegatedidFinishLaunchingWithOptions
Цель 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

Вывод
/Users/mitul_marsonia/Library/Developer/CoreSimulator/Devices/E701C1E9-FCED-4428-A36F-17B32D32918A/данные/Контейнеры/Data/Application/25174F64-7130-4B91-BC41-AC74257CCC6E/Документы

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

Ответ 4

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

Ответ 5

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

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

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

~/Library/Developer/CoreSimulator/Devices

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

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

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

screen 1

screen 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 и ниже структура папок такая же, как и раньше, только помните, что теперь каждый симулятор находится в одной папке (см. выше).

Ответ 6

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

find ~ -name my_app_db_name.sqlite

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

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

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":

Run Shell Script inside Automator Application

Ответ 10

update: Xcode 7.2 • Swift 2.1.1

if let documentsPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .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.

Ответ 11

Попробуйте ~/Library/Developer/CoreSimulator/Devices/

Ответ 12

Симуляторы расположены под:

~/Library/Developer/CoreSimulator/

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

/data/Containers/Data/Application/

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

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

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

Ответ 13

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

  • Обязательно сохраняйте только относительный путь документа/файла в CoreData. Например. магазин "Files/image.jpg" вместо "/Users/yourname/.../Applications/UUID/Document/Files/image.jpg".
  • Для получения местоположения документа приложения используйте следующее:

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

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

Ответ 14

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

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

Поиск этого пути не так прост, как когда-то, а именно Library/Application Support/iPhone Simulator/7.1/Applications/, за которым следует критическое число, представляющее ваше приложение.

Как и Xcode 6 и iOS 8, вы найдете его здесь: Библиотека/Разработчик/CoreSimulator/Devices/cryptic number/data/Containers/Data/Application/cryptic number

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

Ответ 15

в Appdelegate, поставьте этот код, чтобы увидеть Document и 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

в журнале:

Каталог документов:/Пользователи/xxx/Library/Разработчик/CoreSimulator/Devices/F90BBF76-C3F8-4040-9C1E-448FAE38FA5E/data/Контейнеры/Данные/Приложение/3F3F6E12-EDD4-4C46- BFC3-58EB64D4BCCB/Документы/

Каталог кэша:/Пользователи/xxx/Library/Разработчик/CoreSimulator/Devices/F90BBF76-C3F8-4040-9C1E-448FAE38FA5E/data/Контейнеры/Данные/Приложение/3F3F6E12-EDD4-4C46- BFC3-58EB64D4BCCB/Library/кэши

Ответ 16

Если вы хотите зайти в папки приложений, чтобы посмотреть, что происходит, и не хотите проходить через лабиринтные 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.

Ответ 17

На основе ответа Ankur, но для нас пользователи Swift:

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

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

Ответ 18

Каталог симулятора был перемещен с помощью Xcode 6 beta, чтобы...

 ~/Library/Developer/CoreSimulator

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

~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite

Ответ 19

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

С помощью Swift просто вставьте код внутри приложения функций в AppDelegate.swift

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

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

Ответ 20

Для Swift 3.x

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

Ответ 21

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first {
    debugPrint("documentsPath = \(documentsPath)")
}