Де iPhone Simulator зберігає свої дані?


234

У мене є SQLite DB, який я використовую для зберігання даних додатків, і я міг би заглянути в нього, щоб налагодити проблему, яку я маю - але де iPhone Simulator зберігає свої дані, як правило?

Відповіді:


291

Прийнята відповідь є правильною для SDK 3.2 - SDK 4 замінює папку / User на цьому шляху цифрою для кожної застарілої версії iPhone OS / iOS, яку вона може імітувати, тому шлях стає:

~ / Бібліотека / Підтримка програм / iPhone Simulator / [версія ОС] / Програми / [appGUID] /

якщо поруч встановлений попередній SDK, його симулятор 3.1.x продовжить зберігати свої дані у:

~ / Бібліотека / Підтримка програм / iPhone Simulator / Користувач / Програми / [appGUID] /

Для Xcode6 та iOS8

~ / Бібліотека / Розробник / CoreSimulator / Пристрої / [DeviceID] / Дані / Контейнери / Дані / Застосування / [AppID] /


6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Роберт

174
Замість того, щоб шукати в пошуку, для якого є GUID, зверніть увагу на відповідь Pisca46 нижче: Просто введіть po NSHomeDirectory()налагоджувач. Виріжте та вставте в «Go»> «Перехід до папки» (Cmd-Shift-G).
Макворт

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


4
Важко увагу , наскільки простіше, зручніше, менше помилок і менше засмучує ця відповідь (як рекомендується в коментарі Макворта в вище). Ви можете просто додати рядок в NSLogце в ваших AppDelegate«з didFinishLaunchingWithOptions:, або ви можете po NSHomeDirectory()з відладчика. В будь-якому випадку скопіюйте рядок і відкрийте його у пошуку Cmd+Shift+G. Це працює краще, тому що ви запитуєте зі стандартною командою замість того, щоб знати щось, що змінюється.
Бенджон

93

Існує ще один (швидший?) Спосіб знайти місце ваших даних додатка без терміналу:

  1. Запустіть додаток у тренажері
  2. Відкрийте монітор активності
  3. Знайдіть назву свого додатка на вкладці CPU
  4. Двічі клацніть по ньому та відкрийте "Відкрити файли та порти"

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


1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];дає вам ідентифікатор пристрою
oabarca

@oabarca ідентифікатор, який ви отримаєте, не має нічого спільного з пристроємID або appFolder симулятора; Я використовую Xcode 11.2.1 та iOS 13.2.2
DawnSong

78

Знайшов це:

~/Library/Application Support/iPhone Simulator/User/

16
Як шукати: У Finder натисніть CMD + SHIFT + G
rohan-patel

Будь ласка, дивіться оновлену відповідь нижче від dsmudger, це правильна відповідь на даний момент.
Том Сузель

74

iOS 8 ~ / Бібліотека / Розробник / CoreSimulator / Пристрої / [Ідентифікатор пристрою] / Дані / Програми / [appGUID] / Документи /


1
Будь-який спосіб отримати ідентифікатор пристрою?
msmq

2
@msmq tryxcrun instruments -s
Шазрон

11
@msmq Увімкніть поточний тренажер, Обладнання -> Пристрій -> Управління пристроями ... -> Виберіть свій тренажер у списку "SIMULATORS". Тоді праворуч - "Ідентифікатор". Це ідентифікатор пристрою.
RichX

Як знайти [appGUID] тут?
Ян ти

66

На Леві Users/[username]/Libraryприховано.

Щоб просто переглянути в Finder, натисніть меню "Go" у верхній частині екрана і утримуйте клавішу "alt", щоб відобразити "Library".

Клацніть на «Бібліотека», і ви зможете побачити вашу приховану раніше папку бібліотеки.

Раніше радили:

Використовуйте

chflags nohidden /users/[username]/library

в терміналі для відображення папки.


1
після цього ви можете знайти його за адресою: ~ / Бібліотека / Підтримка додатків / iPhone Simulator / [версія ОС] / Програми / [appGUID] /
Рафаель Морейра

Це цікава пропозиція для звичайних користувачів, але мені здається, що розробникам iOS / OS X потрібно регулярно отримувати доступ до бібліотеки, і тому вони не хотіли б її ховати ніколи більше. (Знову ж таки, я думаю, багато розробників використовують термінал замість Finder?)
ArtOfWarfare

58

Найпростіший спосіб.

  1. Кудись зловити точку перерви.

  2. Введіть po NSHomeDirectory()у вікно консолі

Результат:

(lldb) po NSHomeDirectory () / Користувачі / usernam / Бібліотека / Розробник / CoreSimulator / Пристрої / 4734F8C7-B90F-4566-8E89-5060505E387F / Дані / Контейнери / Дані / Застосування / 395818BB-6D0F-499F-AAFE-068A783D


1
Якби я тільки знав це раніше. Це мала бути правильна відповідь
Іван Кантаріно

Я думаю, що всі інші відповіді також є правильними. Але мені здається, що це легко: -]
Лал Кришна

37

Якщо Simulator працює, ви можете отримати шлях до контейнера будь-якого додатка:

xcrun simctl get_app_container booted <app bundle identifier>

Приклад виводу:

$ xcrun simctl get_app_container booted com.example.app
/Users/jappleseed/Library/Developer/CoreSimulator/Devices/7FB6CB8F-63CB-4F27-BDAB-884814DA6FE0/data/Containers/Bundle/Application/466AE987-76BC-47CF-A207-266E65E7DE0A/example.app

"завантажений" може бути заміщений більшості simctl команд, де очікується UDID пристрою.

Ви можете переглянути список пристроїв із xcrun simctl listта отримати довідку щодо конкретних командxcrun simctl help .

Оновлення : За популярним запитом у Xcode 8.3 тепер ви можете вказати потрібний тип контейнера, додавши "додаток", "дані", "групи" або ідентифікатор групи додатків.

Щоб отримати контейнер даних:

$ xcrun simctl get_app_container booted com.example.app data

відмінний. Не потрібно запускати команду, щоб отримати device_id та appId. Один крок, щоб отримати все
iamhite

Це слід прийняти, адже це найбільш "стабільний" спосіб робити такі речі.
Ольга

35

З Xcode 5 ви можете використовувати код нижче:

#import <Foundation/NSFileManager.h>

і:

NSString *homeDir = NSHomeDirectory();
NSLog(@"%@",homeDir);

Результат може виглядати так:

"/Users/<your user name>/Library/Application Support/iPhone Simulator/7.1/Applications/hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh"

Де hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhє шістнадцятковий рядок, що ідентифікує ваш додаток для iOS.


16
Це також працює у налагоджувачі: po NSHomeDirectory()
mackworth

30

Схоже, що Xcode 6.0 перемістив це місце ще раз, принаймні для тренажерів iOS 8.

~ / Бібліотека / Розробник / CoreSimulator / Пристрої / [DeviceID] / Дані / Контейнери / Дані / Застосування / [AppID]


4
в ~ / Бібліотека / Розробник / CoreSimulator / Пристрої / [DeviceID] / також є файл .plist з назвою "device.plist", якщо ви заглянете всередину, ви можете дізнатися назву пристрою, як iphone-6 або iphone-5s. deviceID дуже заплутано, тому я думаю, вам слід заглянути все до .plist-файлу.
EFE

1
Як отримати AppID?
Відображуване ім’я

1
Я обдурив, щоб знайти ідентифікатор програми, використовуючи 'ls -l' і з'ясовуючи, які файли програми були створені останнім часом. Може працювати і для інших.
Майя Вебстер

1
Або впорядкуйте пошук у сортуванні за "датою створення", щоб додаток опинився в списку.
Ammar Mujeeb

30

Один з найпростіших способів знайти місце, де додаток знаходиться в тренажері. Користувач "NSTemvremeDirectory ()"

Кроки-

  1. Застосуйте точку перерви в будь-якому місці програми та запустіть програму.
  2. Коли програма зупиняється на точці розриву, введіть наступну команду в консолі Xcode.

    po NSTemporaryDirectory ()

Дивіться зображення нижче для правильного розуміннявведіть тут опис зображення

Тепер у вас є точний шлях до тимчасової папки. Ви можете повернутися назад і переглянути всі пов’язані з додатком папки.

Сподіваюся, що це також допомагає. Щасливе кодування :)


1
Класна порада, але чому б і ні po NSHomeDirectory()?
Code Roadie

9

Там, де Xcode зберігає тренажери у 2019 році + Каталіна, Xcode 11.0

Час виконання

$ open /Library/Developer/CoreSimulator/Profiles/Runtimes

Наприклад: iOS 13.0, watchOS 6.0Вони приймають найбільше простір, на сьогоднішній день. Кожна з них може бути до ~ 5 Гб

Прилади

$ open ~/Library/Developer/CoreSimulator/Devices

Наприклад: iPhone Xr, iPhone 11 Pro Max. Зазвичай це <15 мб кожен.

Пояснення

Симулятори розділені між режимами виконання та пристроями. Якщо ти біжиш$ xcrun simctl list ви можете побачити огляд, але якщо ви хочете знайти фізичне розташування цих тренажерів, погляньте в ці каталоги, які я показав.

Видалити умови виконання, які ви не підтримуєте, цілком безпечно. Ви можете перевстановити їх пізніше, якщо хочете.


8

Просто зробіть це:

NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@", docDirPath);

І ви отримаєте щось таке:

/ Користувачі / Адміністратор / Бібліотека / Розробник / CoreSimulator / Пристрої / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / дані / Контейнери / Дані / Застосування / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Документи

Зайдіть туди, і ви побачите папку документів свого додатка незалежно від версії XCode. (Використовуйте команду "Перейти до папки ..." у Finder та вкажіть шлях "~ / library").

Швидка версія для рядкового контуру:

let docDirPath =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                    .userDomainMask, true).first
print(docDirPath)

URL-адреса папки:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)

Збирався опублікувати майже таку ж відповідь. Цей метод має перевагу в тому, щоб завжди давати правильний шлях у будь-якій версії симулятора iOS. До речі, ви також можете скопіювати значення змінної url у відладчик, якщо ви не хочете його реєструвати;)
Moose

7

У iOS 5:

/ Користувачі / [Ім'я користувача] / Бібліотека / Підтримка додатків / iPhone Simulator / 5.0 / Програми / [AppGUID] /


6

Для Xcode 4.6 він зберігається у наступному шляху ...

/ Користувачі / [currentuser] / Бібліотека / Підтримка додатків / iPhone Simulator / 6.1 / Програми /

Щоб знати це програмно, використовуйте наступний код

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);

2
Свіфт :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect

4

Для iOS 8

Щоб знайти папку « Документи» , ви можете записати файл у папку «Документи»:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Words.txt"];
NSString *content = @"Apple";
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];

скажімо, в didFinishLaunchingWithOptions.

Потім ви можете відкрити термінал і знайти папку:

$ find ~/Library -name Words.txt

2

якщо хтось все ще відчуває цю проблему у Лева, є чудова стаття з 19 різними порадами для перегляду вашого ~ / Бібліотечного реєстру. знайти статтю Дена Фрейкса тут http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

Пам'ятайте, що каталог з тренажером наведено нижче

~ / Бібліотека / Підтримка програм / iPhone Simulator / Користувач /


2

Для macOS Catalina я знайшов свій db у:

~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db

Щоб отримати те applicationId, я просто сортував папки за датою зміни, хоча я впевнений, що є кращий спосіб зробити це.


1

Для початкових користувачів, які не використовують Xcode часто, ви можете просто використовувати find. Відкрийте термінал та виконайте пошук за назвою бази даних.

$ find ~/Library/Developer -name 'myname.db'

Якщо ви не знаєте точної назви, можете скористатися символами:

$ find ~/Library/Developer -name 'myname.*'


0

Ви можете спробувати скористатися наведеним нижче кодом

NSString *fileName = @"Demo.pdf";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
    NSLog(@"File path%@",pdfFileName);

0

Щоб відкрити словники, де ви додаєте, що ви будуєте в xCode на тренажерах, виконайте наступне:

  1. відкрити вітер Finder (значок смайлика)
  2. потім натисніть GO -> Перейти до папки
  3. тип: ~ / Бібліотека / Підтримка програм / iPhone Simulator
  4. Каталоги - це версія iOS різних симуляторів
  5. Підкаталоги - це програми, встановлені на тренажері
  6. У папці "Документи" - це те, де користувач створив вміст, який створює резервну копію на iCloud

0

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

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