Шлях до каталогу документів Xcode Device Simulator


90

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

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

Однак у iOS 8 Beta Simulator я не можу знайти відповідний каталог для iOS 8 у каталозі вище.

Де шлях до каталогу документів для iOS 8 Simulator?

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


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


спробуйте це посилання stackoverflow.com/questions/24133022 / ...
Tunvir Рахман Tusher

Якщо ви не можете знайти свою папку бібліотеки, вона, ймовірно, прихована. Введення цієї команди в термінал покаже її: chflags nohidden ~ / Бібліотека
simon_smiley

Якщо вам подобається плагін Xcode, спробуйте github.com/onmyway133/XcodeWay , плагін Xcode, який може переходити до вашої папки симулятора та багатьох інших місць
onmyway133

Відповіді:


155

на моєму комп’ютері шлях:

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

ПРИМІТКА. Можливо, ці довгі ідентифікатори (тобто UDID) відрізняються на вашому комп’ютері.


1
Якщо ваш додаток використовує CoreData, може бути простішим способом для пошуку місця розташування папки: stackoverflow.com/a/25937606/1103584
DiscDev

12
Ні, це неправильно. Не існує різниці між проектами ObjC та проектами Swift. Це UDID (унікальні ідентифікатори пристроїв), і ви можете побачити свій, запустивши 'xcrun simctl list'
Джеремі Хаддлстон, секвойя,

@JeremyHuddlestonSequoia, правильно чи ні, саме так скопіювали проект Swift та ObjC на мій комп’ютер. Мені не потрібно згадувати, що обидва вони були скомпільовані лише на симуляторі (це було початкове питання). якщо Xcode має різницю між UDID для різних мов, і ви вважаєте, що це неправильно, можливо, вам доведеться повідомити про це Apple.
holex

7
Холекс, я кажу, що ваше твердження неправильне, а не те, що дизайн неправильний (зауважте, що насправді я хлопець в Apple, який розробляв CoreSimulator, тому я, мабуть, був би першою людиною, яка там виправила щось, що, на мою думку, є неправильно). UDID відповідають окремим пристроям. Єдина причина, через яку ваші швидкі та objc-проекти використовуватимуть різні UDID, - це те, що ви розгорнули свої проекти на різних пристроях-симуляторах (наприклад: для одного ви розгорнули на iPhone 5s, а інший - на iPhone 6).
Джеремі Хаддлстон, секвойя,

@JeremyHuddlestonSequoia, ми запрошуємо Вас виправити мою відповідь у будь-який час, якщо Ви почуваєтесь досить впевнено.
holex

75

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

Завдання-C

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

Swift
Якщо ви використовуєте Swift 1.2, скористайтеся наведеним нижче кодом, який буде розроблений лише під час використання симулятора через #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
Ціль C

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


Свіфт 2.X

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

Свіфт 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

Свіфт 4.2

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

Output
/ Users / 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", а потім "Go to Folder" або команда + shift + g і вставте свій шлях , нехай mac перенесе вас до каталогу ваших документів


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

ваші АНС заслуховувати> stackoverflow.com/questions/24133022 / ...
Mitul Marsoniya

це жорстко закодований шлях до власного симулятора. Ні для кого іншого це не спрацює. Насправді цей шлях також зміниться для вас, як тільки ви знову запустите симулятор.
NSR,

#if TARGET_IPHONE_SIMULATOR // де ти? NSLog (@ "Каталог документів:% @", [[[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); #endif
Мітул Марсонія

16

Я рекомендую симпатичну програму під назвою SimPholders, яка полегшує пошук файлів і папок під час розробки програми для iOS. Він має нову версію для роботи з новими симуляторами під назвою SimPhold2. Її можна знайти на сайті simphold.com


Це було б круто, тепер, коли iOS8 Simulator похований у папці, але ця програма не оновлена ​​для підтримки iOS8.
wibobm

@wibobm. SimPhold2, безумовно, підтримує 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".


1
Потрібно любити термінал.
kakubei

2
Це здається досить довгим способом знайти це. Шукати у всьому домашньому каталозі?
shortstuffsushi

11

Правильно, що нам потрібно заглянути в шлях ~ / Library / Developer / CoreSimulator / Devices /.

Але проблема, яку я бачу, полягає в тому, що шлях постійно змінюється кожного разу, коли я запускаю програму. Шлях містить інший набір довгих ідентифікаторів після рядка програми, який постійно змінюється кожного разу, коли я запускаю програму. Це в основному означає, що моя програма не матиме кешованих даних при наступному запуску.


Я теж це бачу.
Nathan Jones

5
Шляхи не змінюються постійно під час запуску програми. У вашій бібліотеці є один шлях на пристрій. Запустіть 'xcrun simctl list', щоб переглянути список пристроїв та їх UDID, щоб побачити, який підкаталог вам слід розглянути.
Jeremy Huddleston Sequoia

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 із "Запустити сценарій оболонки":

Запустіть сценарій оболонки всередині програми Automator


7

З прийняттям CoreSimulator в Xcode 6.0 каталоги даних визначаються для кожного пристрою, а не для кожної версії. Каталог даних ~ / Бібліотека / Розробник / CoreSimulator / Пристрої // дані, де їх можна визначити зі списку xcrun simctl

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


Дякуємо за те, що даєте те, що, мабуть, можна розглядати як авторитетну відповідь. Чи є простий спосіб (крім реєстрації в додатку) знайти місце розташування конкретного додатка всередині симулятора?
fzwo

На жаль, ні, але я бачив кілька запитів щодо цього тут і на форумах. Будь ласка, подайте радар за адресою bugreport.apple.com
Джеремі Хаддлстон Секвойя

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

З тією ж проблемою я зіткнувся, коли зберігав повний шлях за допомогою CoreData. Під час отримання повного шляху він повертає значення null, оскільки папка документа UUID відрізняється кожного разу, коли програма перезавантажується. Ось моя резолюція:

  1. Обов’язково зберігайте лише відносний шлях до документа / файлу в CoreData. Наприклад, зберігати "Files / image.jpg" замість "/Users/yourname/.../Applications/UUID/Document/Files/image.jpg".
  2. Використовуйте наступне, щоб отримати місце розташування документа програми:

    [[[NSFileManager defaultManager] URL-адресиForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject];

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


3

Де знаходиться каталог документів для симулятора iOS 8

Можливо, ви помітили, що iPhone Simulator змінився з Xcode 6, а разом із ним - звичайно, і шлях до каталогу документів ваших модельованих програм. Іноді нам може знадобитися поглянути на це.

Знайти цей шлях не так просто, як колись, а саме Бібліотека / Підтримка програм / Симулятор iPhone / 7.1 / Програми /, за яким слідує загадкове число, що представляє вашу програму.

Станом на Xcode 6 та iOS 8 ви знайдете його тут: Бібліотека / Розробник / CoreSimulator / Пристрої / загадковий номер / дані / Контейнери / Дані / Застосування / загадковий номер

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


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.


3

На основі відповіді Ankur, але для нас, швидких користувачів:

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

Помістіть його всередину ViewDidLoad, і він роздрукується відразу після запуску програми.


3

Тренажери розташовані за адресою:

~/Library/Developer/CoreSimulator/

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

/data/Containers/Data/Application/

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

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

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


2

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

2

Найкращий спосіб знайти шлях - це зробити за допомогою коду.

Використання Swift, просто вставте код нижче в функції додатка в вашому AppDelegate.swift

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

Код Obj-C шукайте у відповіді @Ankur


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)")
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.