Gdzie iPhone Simulator przechowuje swoje dane?


234

Mam bazę danych SQLite, której używam do przechowywania danych aplikacji, i mógłbym zajrzeć do środka, aby zdebugować problem, który mam - ale gdzie zazwyczaj iPhone Simulator przechowuje swoje dane?

Odpowiedzi:


291

Zaakceptowana odpowiedź jest poprawna dla SDK 3.2 - SDK 4 zastępuje folder / User w tej ścieżce numerem dla każdej ze starszych wersji iPhone OS / iOS, którą może symulować, więc ścieżka staje się:

~ / Biblioteka / Obsługa aplikacji / iPhone Simulator / [wersja systemu operacyjnego] / Aplikacje / [appGUID] /

jeśli masz zainstalowany poprzedni zestaw SDK, jego symulator 3.1.x będzie nadal zapisywał swoje dane w:

~ / Biblioteka / Obsługa aplikacji / iPhone Simulator / Użytkownik / Aplikacje / [appGUID] /

Dla Xcode6 i iOS8

~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / data / Containers / Data / Application / [AppID] /


6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert,

174
Zamiast szukać w wyszukiwarce, dla której GUID jest twój, zwróć uwagę na odpowiedź pisca46 poniżej: Wystarczy wpisać po NSHomeDirectory()debugger. Wytnij i wklej do Go> Idź do folderu (Cmd-Shift-G).
mackworth

Jestem trochę zaniepokojony tym, że kiedy uruchamiam symulator, mówi 8.2, ale kiedy patrzę w ten folder, jedyny numer wersji, który widzę, to 7.1. Martwi mnie to, że patrzę w niewłaściwe miejsce.
bugloaf


4
Trudno podkreślić, o ile prostsza, wygodniejsza, mniej podatna na błędy i mniej frustrująca jest ta odpowiedź (jak zalecono w komentarzu Mackwortha powyżej). Można po prostu dodać linię do NSLogtego w swoim AppDelegate„s didFinishLaunchingWithOptions:, lub można po NSHomeDirectory()z debuggera. W obu przypadkach skopiuj ciąg i otwórz go w wyszukiwarce za pomocą Cmd+Shift+G. Działa to lepiej, ponieważ pytasz standardową komendą zamiast wiedzieć, co się zmienia.
Benjohn

93

Istnieje inny (szybszy?) Sposób znalezienia danych aplikacji bez terminalu:

  1. Uruchom aplikację w symulatorze
  2. Otwórz Monitor aktywności
  3. Znajdź nazwę swojej aplikacji na karcie Procesor
  4. Kliknij dwukrotnie i otwórz „Otwórz pliki i porty”

wprowadź opis zdjęcia tutaj


1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];daje identyfikator urządzenia
oabarca

@oabarca identyfikator, który dostajesz, nie ma nic wspólnego z ID urządzenia lub appFolder symulatora; Używam Xcode 11.2.1 i iOS 13.2.2
DawnSong

78

Znaleziono to:

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

16
Jak wyszukiwać: W Finderze naciśnij CMD + SHIFT + G
rohan-patel

Zobacz zaktualizowaną odpowiedź poniżej dsmudger, w tej chwili jest to poprawna odpowiedź.
Tom Susel

74

iOS 8 ~ / Library / Developer / CoreSimulator / Devices / [Device ID] / data / Applications / [appGUID] / Documents /


1
W jakiś sposób uzyskać identyfikator urządzenia?
msmq

2
@msmq tryxcrun instruments -s
Shazron,

11
@msmq Włącz obecny symulator, Sprzęt -> Urządzenie -> Zarządzaj urządzeniami ... -> Wybierz symulator z listy „SYMULATORY”. Następnie po prawej stronie znajduje się „Identyfikator”. To jest identyfikator urządzenia.
RichX

Jak znaleźć [appGUID] tutaj?
Yang You

66

Na lwie Users/[username]/Libraryukryta jest.

Aby po prostu wyświetlić w Finderze, kliknij menu „Idź” u góry ekranu i przytrzymaj klawisz „alt”, aby wyświetlić „Biblioteka”.

Kliknij „Biblioteka”, aby zobaczyć poprzednio ukryty folder biblioteki.

Wcześniej zalecane:

Posługiwać się

chflags nohidden /users/[username]/library

w terminalu, aby wyświetlić folder.


1
potem można go znaleźć pod adresem: ~ / Library / Application Support / iPhone Simulator / [Wersja systemu operacyjnego] / Applications / [appGUID] /
Rafael Moreira

To interesująca propozycja dla zwykłych użytkowników, ale wydaje mi się, że programiści iOS / OS X muszą uzyskiwać dostęp do biblioteki dość regularnie i dlatego nie chcieliby, aby była ona ponownie ukryta. (Z drugiej strony
wydaje

58

Najłatwiejszy sposób w historii.

  1. Złap gdzieś punkt przerwania.

  2. Wejdź po NSHomeDirectory()w okno konsoli

Wynik:

(lldb) po NSHomeDirectory () / Users / usernam / Library / Developer / CoreSimulator / Devices / 4734F8C7-B90F-4566-8E89-5060505E387F / data / Containers / Data / Application / 395818BB-6D0F-499F-AAFE-068A783D9753


1
Gdybym tylko wiedział o tym wcześniej. To powinna być poprawna odpowiedź
Ivan Cantarino

myślę, że wszystkie inne odpowiedzi są również poprawne. Ale wydaje mi się to łatwe: -]
Lal Krishna,

37

Jeśli symulator jest uruchomiony, możesz uzyskać ścieżkę do kontenera dowolnej aplikacji:

xcrun simctl get_app_container booted <app bundle identifier>

Przykładowe dane wyjściowe:

$ 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

„bootowany” można zastąpić większością simctlpoleceń wszędzie tam, gdzie oczekiwany jest identyfikator UDID urządzenia.

Możesz zobaczyć listę urządzeń xcrun simctl listi uzyskać pomoc dotyczącą określonych poleceń za pomocą xcrun simctl help.

Aktualizacja : na podstawie popularnego żądania w Xcode 8.3 możesz teraz określić rodzaj kontenera, który chcesz, dołączając „app”, „data”, „groups” lub identyfikator grupy aplikacji.

Aby uzyskać kontener danych:

$ xcrun simctl get_app_container booted com.example.app data

doskonała. Nie trzeba uruchamiać polecenia, aby uzyskać identyfikator_urządzenia i identyfikator aplikacji. Jeden krok do zdobycia wszystkiego
iamhite

Ten należy zaakceptować, ponieważ jest to najbardziej „stabilny” sposób na robienie takich rzeczy.
Olha,

35

W Xcode 5 możesz użyć poniższego kodu:

#import <Foundation/NSFileManager.h>

i:

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

Wynik może wyglądać następująco:

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

Gdzie hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhjest jakiś ciąg szesnastkowy identyfikujący twoją aplikację na iOS.


16
Działa to również w debuggerze: po NSHomeDirectory()
mackworth

30

Wygląda na to, że Xcode 6.0 ponownie przeniósł tę lokalizację, przynajmniej w przypadku symulatorów iOS 8.

~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / data / Containers / Data / Application / [AppID]


4
w ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / znajduje się również plik .plist o nazwie „device.plist”, jeśli zajrzysz do środka, możesz znaleźć nazwę urządzenia takiego jak iPhone-6 lub iPhone-5s. deviceID jest bardzo mylące, więc myślę, że powinieneś zajrzeć do pliku .plist.
EFE

1
Jak uzyskać identyfikator aplikacji?
Nazwa wyświetlana

1
Oszukałem, aby znaleźć identyfikator aplikacji, używając „ls -l” i dowiedzieć się, które pliki aplikacji zostały ostatnio utworzone. Może działać także na innych.
Maya Webster,

1
Lub w wyszukiwarce sortuj według „daty utworzenia”, aby umieścić aplikację na szczycie listy.
Ammar Mujeeb,

30

Jeden z najłatwiejszych sposobów znalezienia aplikacji w symulatorze. Użytkownik „NSTemporaryDirectory ()”

Kroki-

  1. Zastosuj punkt przerwania w dowolnym miejscu w aplikacji i uruchom aplikację.
  2. Gdy aplikacja zatrzyma się w punkcie przerwania, wpisz następujące polecenie w konsoli Xcode.

    po NSTemporaryDirectory ()

Zobacz poniższy obraz, aby uzyskać właściwy wglądwprowadź opis zdjęcia tutaj

Teraz masz dokładną ścieżkę do folderu tymczasowego. Możesz wrócić i zobaczyć wszystkie foldery związane z aplikacją.

Mam nadzieję, że to również pomaga. Happy Coding :)


1
Fajna wskazówka, ale dlaczego nie po NSHomeDirectory()?
Code Roadie

9

Gdzie Xcode przechowuje symulatory w 2019+ Catalina, Xcode 11.0

Runtimes

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

Na przykład iOS 13.0,watchOS 6.0 Przyjmują one najwięcej miejsca, zdecydowanie. Każdy może mieć do ~ 5 GB

Urządzenia

$ open ~/Library/Developer/CoreSimulator/Devices

Na przykład iPhone Xr,iPhone 11 Pro Max . Zazwyczaj są one mniejsze niż 15 mb.

Wyjaśnienie

Symulatory są podzielone między środowiska wykonawcze i urządzenia. Jeśli uciekniesz$ xcrun simctl list , zobaczysz przegląd, ale jeśli chcesz znaleźć fizyczną lokalizację tych symulatorów, zajrzyj do tych katalogów, które pokazałem.

Usuwanie środowisk uruchomieniowych, które nie są obsługiwane, jest całkowicie bezpieczne. Możesz zainstalować je później, jeśli chcesz.


8

Po prostu zrób to:

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

I dostaniesz coś takiego:

/ Users / admin / Library / Developer / CoreSimulator / Devices / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / data / Containers / Data / Application / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Dokumenty

Idź tam, a zobaczysz folder dokumentów swojej aplikacji, niezależnie od wersji XCode. (Użyj polecenia „Idź do folderu ...” w Finderze i podaj ścieżkę „~ / library”).

Szybka wersja ścieżki ciągów:

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

i adres URL folderu:

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

Już miał opublikować prawie taką samą odpowiedź. Zaletą tej metody jest zawsze podanie poprawnej ścieżki w dowolnej wersji symulatora iOS. Nawiasem mówiąc, możesz również skopiować wartość zmiennej url do debuggera, jeśli nie chcesz jej rejestrować;)
Łoś

7

W iOS 5:

/ Users / [Nazwa użytkownika] / Library / Application Support / iPhone Simulator / 5.0 / Applications / [AppGUID] /


6

W przypadku Xcode 4.6 jest on zapisywany w następującej ścieżce ...

/ Users / [currentuser] / Library / Application Support / iPhone Simulator / 6.1 / Applications /

Aby to wiedzieć programowo, użyj następującego kodu

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

2
Swift :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect

4

Na iOS 8

Aby zlokalizować folder Dokumenty , możesz napisać plik w folderze Dokumenty:

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];

powiedzmy w didFinishLaunchingWithOptions.

Następnie możesz otworzyć terminal i znaleźć folder:

$ find ~/Library -name Words.txt


2

W przypadku macOS Catalina znalazłem moją bazę danych w:

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

Aby to zrobić applicationId, właśnie posortowałem foldery według daty modyfikacji, ale jestem pewien, że jest na to lepszy sposób.


1

Dla rodzimych użytkowników, którzy często nie używają Xcode, możesz po prostu użyć find. Otwórz terminal i wyszukaj według nazwy bazy danych.

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

Jeśli nie znasz dokładnej nazwy, możesz użyć symboli wieloznacznych:

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


0

Możesz spróbować użyć poniższego kodu

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

Aby otworzyć dyktafony, w których twoja aplikacja jest wbudowana w xCode na symulatorach, wykonaj następujące czynności:

  1. otwórz windę Findera (ikona buźki)
  2. następnie kliknij GO -> Idź do folderu
  3. typ: ~ / Library / Application Support / iPhone Simulator
  4. Katalogi to wersja różnych symulatorów na iOS
  5. Podkatalogi to aplikacje instalowane na symulatorze
  6. Folder Dokumenty to miejsce, w którym użytkownik wygenerował zawartość, która zostaje utworzona kopia zapasowa na iCloud

0

Nie mam żadnego powiązania z tym programem, ale jeśli chcesz otworzyć to w wyszukiwarce, SimPholder sprawia, że ​​jest to niezwykle łatwe.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.