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?

Codebeef
źródło

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

dsmudger
źródło
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
1
@bugloaf Zobacz to pytanie lub odpowiedź poniżej
Raviprakash
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

Sergey Lost
źródło
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/
Codebeef
źródło
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 /

Wagh
źródło
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.

Rafael Moreira
źródło
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

Lal Krishna
źródło
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
Russbishop
źródło
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.

Pisca46
źródło
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]

Wilk
źródło
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 :)

Shubhendu
źródło
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.

joshuakcockrell
źródło
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)
LembergSun
źródło
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] /

Karthi
źródło
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]);
Durai Amuthan.H
źródło
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
ohho
źródło
2

jeśli ktoś nadal doświadcza tego problemu w lwie, jest świetny artykuł z 19 różnymi wskazówkami, aby zobaczyć twój katalog ~ / Library. znajdź artykuł Dana Frakesa tutaj http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

Pamiętaj, że katalog symulatora znajduje się poniżej

~ / Biblioteka / Obsługa aplikacji / iPhone Simulator / Użytkownik /

Edwin
źródło
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.

Stevenspiel
źródło
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.*'

owczarek
źródło
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);
Raees Madathil Valapuram
źródło
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
Mike Zriel
źródło
0

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

Jason
źródło