Где iPhone Simulator хранит свои данные?

234

У меня есть база данных SQLite, которую я использую для хранения данных приложения, и я мог бы заглянуть внутрь нее, чтобы устранить возникшую проблему - но где iPhone Simulator хранит свои данные, как правило?

Codebeef
источник

Ответы:

291

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

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

если у вас установлен предыдущий SDK, симулятор 3.1.x продолжит сохранять свои данные в:

~ / Библиотека / Поддержка приложений / iPhone Simulator / Пользователь / Приложения / [appGUID] /

Для Xcode6 и iOS8

~ / Library / Developer / CoreSimulator / Devices / [DeviceId] / данные / Контейнеры / Data / Application / [AppID] /

dsmudger
источник
6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Роберт
174
Вместо того, чтобы искать в искателе, для которого GUID ваш, обратите внимание на ответ pisca46 ниже: Просто введите po NSHomeDirectory()отладчик. Вырежьте и вставьте в Go> Go To Folder (Cmd-Shift-G).
Маккворт
Я немного обеспокоен тем, что при запуске симулятора появляется надпись 8.2, но когда я просматриваю эту папку, я вижу только номер версии 7.1. Это заставляет меня беспокоиться, что я смотрю не в том месте.
bugloaf
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 идентификатор, который вы получаете, не имеет никакого отношения к идентификатору устройства или appFolder симулятора; Я использую Xcode 11.2.1 и iOS 13.2.2
DawnSong
78

Нашел это:

~/Library/Application Support/iPhone Simulator/User/
Codebeef
источник
16
Как искать: в Finder нажмите CMD + SHIFT + G
rohan-patel
Пожалуйста, посмотрите обновленный ответ ниже dsmudger, это правильный ответ на данный момент.
Том Сусел
74

iOS 8 ~ / Библиотека / Разработчик / CoreSimulator / Устройства / [Идентификатор устройства] / Данные / Приложения / [appGUID] / Документы /

Wagh
источник
1
Есть ли способ получить идентификатор устройства?
MSMQ
2
@msmq попробуйxcrun instruments -s
Shazron
11
@msmq Включите ваш текущий симулятор, Оборудование -> Устройство -> Управление устройствами ... -> Выберите свой симулятор в списке «СИМУЛЯТОРЫ». Тогда справа "Идентификатор". Это идентификатор устройства.
RichX
Как найти [appGUID] здесь?
Ян
66

На льве Users/[username]/Libraryскрыто.

Чтобы просто просмотреть в Finder, нажмите меню «Перейти» в верхней части экрана и удерживайте нажатой клавишу «Alt», чтобы отобразить «Библиотека».

Нажмите «Библиотека», и вы увидите ранее скрытую папку библиотеки.

Ранее рекомендовано:

использование

chflags nohidden /users/[username]/library

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

Рафаэль Морейра
источник
1
затем вы можете найти его по адресу: ~ / Библиотека / Поддержка приложений / Симулятор iPhone / [Версия ОС] / Приложения / [appGUID] /
Рафаэль Морейра,
Это интересное предложение для обычных пользователей, но мне кажется, что разработчики iOS / OS X должны получать доступ к библиотеке на довольно регулярной основе и поэтому не хотели бы, чтобы она снова спряталась. (Опять же, я полагаю, многие разработчики используют терминал вместо Finder?)
ArtOfWarfare,
58

Самый простой способ.

  1. Поймать точку останова где-нибудь.

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

Результат:

(lldb) po NSHomeDirectory () / Пользователи / usernam / Библиотека / Разработчик / CoreSimulator / Устройства / 4734F8C7-B90F-4566-8E89-5060505E387F / data / Containers / Data / Application / 395818BB-6D0F-499F-AAFE-068A783D9753

Лал Кришна
источник
1
Если бы я только знал это раньше. Это должен был быть правильный ответ
Иван Кантарино
Я думаю, что все остальные ответы тоже правильные. Но мне кажется, что это легко: -]
Лал Кришна
37

Если симулятор запущен, вы можете получить путь к контейнеру любого приложения:

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

Pisca46
источник
16
Это также работает в отладчике: po NSHomeDirectory()
mackworth
30

Похоже, Xcode 6.0 переместил это место еще раз, по крайней мере, для симуляторов iOS 8.

~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / данные / Контейнеры / Data / Application / [AppID]

волк
источник
4
в ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / также есть файл .plist с именем «device.plist», если вы заглянете внутрь, вы сможете узнать имя устройства, например, iphone-6 или iphone-5s. deviceID очень запутанный, поэтому я думаю, что вы должны заглянуть внутрь файла .plist.
EFE
1
Как получить AppID?
Отображаемое имя
1
Я обманул, чтобы найти идентификатор приложения, используя 'ls -l' и выясняя, какие файлы приложения были созданы последними. Может работать и для других.
Майя Вебстер
1
Или в поиске сортировки по «дате создания», чтобы получить приложение в верхней части списка.
Аммар Муджиб
30

Один из самых простых способов найти приложение в симуляторе. Пользователь "NSTevenDirectory ()"

Steps-

  1. Примените точку останова в любом месте приложения и запустите приложение.
  2. Когда приложение останавливается в точке останова, введите следующую команду в консоли XCode.

    по NSTeditionalDirectory ()

См. Изображение ниже для правильного пониманиявведите описание изображения здесь

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

Надеюсь, это также помогает. Удачного кодирования :)

Shubhendu
источник
1
Классный совет, но почему бы и нет po NSHomeDirectory()?
Код Roadie
9

Где Xcode хранит симуляторы в 2019+ Catalina, Xcode 11.0

Runtimes

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

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

joshuakcockrell
источник
8

Просто сделайте это:

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

И вы получите что-то вроде этого:

/ Users / администратор / Library / Developer / CoreSimulator / Devices / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / данные / Контейнеры / Data / Application / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Документы

Перейдите туда, и вы увидите папку с документами вашего приложения независимо от версии XCode. (Используйте команду «Перейти к папке ...» в Finder и укажите путь «~ / library»).

Swift версия для строкового пути:

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

и URL папки:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)
LembergSun
источник
Собирался опубликовать почти тот же ответ. Преимущество этого метода - всегда указывать правильный путь в любой версии симулятора iOS. Кстати, вы также можете скопировать значение переменной url в отладчике, если вы не хотите его регистрировать;)
Moose
7

В iOS 5:

/ Пользователи / [Имя пользователя] / Библиотека / Поддержка приложений / iPhone Simulator / 5.0 / Приложения / [AppGUID] /

Karthi
источник
6

Для Xcode 4.6 это сохранено в следующем пути ...

/ Пользователи / [currentuser] / Библиотека / Поддержка приложений / iPhone Simulator / 6.1 / Приложения /

Чтобы узнать это программно используйте следующий код

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);
Durai Amuthan.H
источник
2
Swift :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
ohho
источник
2

если кто-то все еще испытывает эту проблему во льве, есть отличная статья с 19 различными советами, чтобы просмотреть ~ / Library dir. найти статью Дэна Фрейкса здесь http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

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

~ / Библиотека / Поддержка приложений / iPhone Simulator / Пользователь /

Эдвин
источник
2

Для macOS Catalina я нашел свою базу данных в:

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

Чтобы получить applicationId, я просто отсортировал папки по дате изменения, хотя я уверен, что есть лучший способ сделать это.

stevenspiel
источник
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 Windor (значок смайлика)
  2. затем нажмите GO -> Перейти к папке
  3. Тип: ~ / Библиотека / Поддержка приложений / iPhone Simulator
  4. Каталоги - это iOS-версия различных симуляторов.
  5. Подкаталоги - это приложения, установленные на симуляторе
  6. Папка «Документы» - это место, где пользовательский контент создает резервную копию на iCloud.
Майк Зриэль
источник
0

Я не имею никакого отношения к этой программе, но если вы хотите открыть что-либо из этого в поисковике, SimPholder делает это невероятно простым.

Джейсон
источник