Ścieżka do katalogu dokumentów Xcode Device Simulator


91

W iOS 7 katalog dokumentów symulatorów iOS można znaleźć w:

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

Jednak w iOS 8 Beta Simulator nie mogę znaleźć odpowiedniego katalogu dla iOS 8 w powyższym katalogu.

Gdzie jest ścieżka do katalogu dokumentów dla symulatora iOS 8?

wprowadź opis obrazu tutaj


Spróbuj tego . Istnieje aplikacja, która bezpośrednio otwiera katalog Dokumenty ostatniego uruchomienia aplikacji.
NSRover



Jeśli nie możesz znaleźć folderu biblioteki, prawdopodobnie jest on ukryty. Wpisanie tego polecenia w terminalu spowoduje jego odkrycie: chflags nohidden ~ / Library
simon_smiley

Jeśli podoba Ci się wtyczka Xcode, wypróbuj github.com/onmyway133/XcodeWay , wtyczkę Xcode, która może przejść do folderu symulatora i wielu innych miejsc
onmyway133

Odpowiedzi:


156

na moim komputerze ścieżka to:

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

UWAGA: prawdopodobnie te długie identyfikatory (tj. UDID) są różne na twoim komputerze.


1
Jeśli Twoja aplikacja korzysta z CoreData, może istnieć prostszy sposób wyszukiwania lokalizacji folderu: stackoverflow.com/a/25937606/1103584
DiscDev

13
Nie, to nieprawda. Nie ma rozróżnienia między projektami ObjC i Swift. To są UDID (Unique Device IDentifiers) i możesz zobaczyć swoje, uruchamiając 'xcrun simctl list'
Jeremy Huddleston Sequoia

@JeremyHuddlestonSequoia, poprawne czy nie, w ten sposób projekt Swift i ObjC został skopiowany na mój komputer. Nie muszę wspominać, że oba zostały skompilowane tylko na symulatorze (to było oryginalne pytanie). jeśli Xcode powoduje różnicę między identyfikatorami UDID dla różnych języków i uważasz, że jest nieprawidłowy, może być konieczne zgłoszenie tego do Apple.
holex

7
Holex, mówię, że twoje stwierdzenie jest niepoprawne, a nie, że projekt jest nieprawidłowy (zwróć uwagę, że tak naprawdę jestem facetem w Apple, który zaprojektował CoreSimulator, więc prawdopodobnie byłbym pierwszą osobą, która poprawiła coś, co moim zdaniem jest źle). Identyfikatory UDID odpowiadają oddzielnym urządzeniom. Jedynym powodem, dla którego projekty swift i objc byłyby używanie różnych identyfikatorów UDID, jest fakt, że projekty zostały wdrożone na różnych urządzeniach symulujących (np. W przypadku jednego wdrożono go na telefonie iPhone 5s, a w drugim na telefonie iPhone 6).
Jeremy Huddleston Sequoia

@JeremyHuddlestonSequoia, możesz w każdej chwili poprawić moją odpowiedź, jeśli poczujesz się wystarczająco pewnie.
holex

76

NSLogponiżej kodu gdzieś w „AppDelegate”, uruchom swój projekt i podążaj ścieżką. Ułatwi Ci to dotarcie do dokumentów zamiast losowego wyszukiwania w „~ / Library / Developer / CoreSimulator / Devices /”

Cel C

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

Swift
Jeśli używasz języka Swift 1.2, użyj poniższego kodu, który będzie wyświetlany w fazie programowania tylko podczas korzystania z symulatora z powodu #if #endifbloku:

#if arch(i386) || arch(x86_64)
  let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
  NSLog("Document Path: %@", documentsPath)
#endif

Skopiuj ścieżkę z „/ Users / ankur / Library / Developer / CoreSimulator / Devices / 7BA821…” przejdź do „ Finder ”, a następnie „ Go to Folder ” lub command+ shift+ gi wklej ścieżkę, niech Mac zabierze Cię do katalog dokumentów :)


proste i wydajne!
loretoparisi

43

Po prostu napisz poniżej kod w AppDelegate -> didFinishLaunchingWithOptions
Objective C

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


Swift 2.X

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

Swift 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

Swift 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 / Dokumenty

Skopiuj swoją ścieżkę z „/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A ...”, przejdź do „Finder”, a następnie „Go to Folder” lub polecenie + shift + g i wklej swoją ścieżkę , niech Mac przeniesie Cię do katalogu dokumentów


Skąd masz wiedzieć, w którym folderze znajduje się Twoja aplikacja? Jest zbyt wiele katalogów, czy muszę przeszukiwać każdy z nich?
KarenAnne

Twoja odpowiedź jest słyszalna> stackoverflow.com/questions/24133022/…
Mitul Marsoniya

to jest zakodowana ścieżka do własnego symulatora. To nie zadziała dla nikogo innego. W rzeczywistości ta ścieżka również się zmieni po ponownym uruchomieniu symulatora.
NSRover

#if TARGET_IPHONE_SIMULATOR // gdzie jesteś? NSLog (@ "Katalog dokumentów:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); #endif
Mitul Marsoniya

16

Polecam fajną aplikację narzędziową o nazwie SimPholder, która ułatwia znajdowanie plików i folderów podczas tworzenia aplikacji na iOS. Ma nową wersję do współpracy z nowymi symulatorami o nazwie SimPholder2. Można go znaleźć na simpholders.com


To byłaby fajna aplikacja teraz, gdy symulator iOS8 jest ukryty w folderze, ale ta aplikacja nie została zaktualizowana do obsługi iOS8.
wibobm

@wibobm. SimPholder2 z pewnością obsługuje iOS 8.0 i iOS 8.1
JDibble

O MÓJ BOŻE. Musiałem być całkowicie ślepy. Dziękuję Ci!
wibobm

16

Pomimo faktu, że tutaj jest wiele odpowiedzi, żadna z nich nie zapewnia zrozumienia, jak zmieniła się struktura folderów symulatorów iOS 8.3 i nie zapewnia szybkiego sposobu na znalezienie danych aplikacji (folder Dokumenty).

Od iOS 8 foldery przechowywania danych aplikacji są oddzielne od plików wykonywalnych aplikacji, podczas gdy iOS 7 i nowsze mają tę samą strukturę folderów, jedyną różnicą jest fakt, że wszystkie symulatory (różne typy i wersje) są teraz w jednym, dużym folderze.

Tak więc ścieżka do symulatora iOS 8,7,6 jest następująca:

~/Library/Developer/CoreSimulator/Devices

Każdy symulator jest teraz zawarty w folderze o nazwie z unikalnym identyfikatorem, który zmienia się przy każdym resetowaniu symulatora.

Możesz znaleźć Identifierdla każdego urządzenia i symulatorów, przechodząc doXcode > Window > Devices (pierwsze 3 lub 4 znaki identyfikatora są więcej niż wystarczające do zapamiętania).

Aby znaleźć ten, na którym zainstalowałeś swoje aplikacje, spójrz na swój Run scheme > devices(ekran 2).

ekran 1

ekran 2

Teraz, po zidentyfikowaniu symulatora, w zależności od jego wersji, struktura folderów jest bardzo różna:

W systemie iOS 8 plik wykonywalny i folder danych aplikacji znajdują się w różnych folderach:

Wykonywalne : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

Folder danych : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

Folder dokumentów : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

Na iOS 7 i poniżej struktura folderów jest taka sama jak wcześniej, pamiętaj tylko, że teraz każdy symulator znajduje się w tym samym folderze (patrz wyżej).


13

Jeśli Twoja aplikacja korzysta z CoreData, sprytną sztuczką jest wyszukanie nazwy pliku sqlite za pomocą terminala.

find ~ -name my_app_db_name.sqlite

Wyniki będą zawierać pełne ścieżki plików do wszystkich symulatorów, na których uruchomiono Twoją aplikację.

Naprawdę chciałbym, żeby Apple po prostu dodał przycisk do menu plików symulatora iOS, np. „Pokaż folder Dokumenty w Finderze”.


1
Pokocham terminal.
kakubei

2
Wydaje się, że to dość odległy sposób na znalezienie tego. Przeszukać cały katalog domowy?
shortstuffsushi

11

To prawda, że ​​musimy zajrzeć do ścieżki ~ / Library / Developer / CoreSimulator / Devices /.

Ale problem, który widzę, polega na tym, że ścieżka zmienia się za każdym razem, gdy uruchamiam aplikację. Ścieżka zawiera kolejny zestaw długich identyfikatorów po ciągu Application, który zmienia się za każdym razem, gdy uruchamiam aplikację. Zasadniczo oznacza to, że moja aplikacja nie będzie miała żadnych danych w pamięci podręcznej, gdy zostanie uruchomiona następnym razem.


Ja też to widzę.
Nathan Jones

5
Ścieżki nie zmieniają się po uruchomieniu aplikacji. Istnieje jedna ścieżka na urządzenie, które masz w swojej bibliotece. Uruchom „xcrun simctl list”, aby wyświetlić listę urządzeń i ich identyfikatory UDID, aby zobaczyć, który podkatalog należy wziąć pod uwagę.
Jeremy Huddleston Sequoia

9

W przypadku iOS 9.2 i Xcode 7.2 następujący skrypt otworzy folder Dokumenty ostatniej zainstalowanej aplikacji na ostatnio używanym symulatorze;

cd ~/Library/Developer/CoreSimulator/Devices/
cd `ls -t | head -n 1`/data/Containers/Data/Application 
cd `ls -t | head -n 1`/Documents
open .

Aby utworzyć łatwy do uruchomienia skrypt, umieść go w aplikacji Automatora za pomocą opcji „Uruchom skrypt powłoki”:

Uruchom skrypt powłoki w aplikacji Automator


7

Po przyjęciu CoreSimulatora w Xcode 6.0 katalogi danych są przypisane do urządzenia, a nie do wersji. Katalog danych to ~ / Library / Developer / CoreSimulator / Devices // data, gdzie można określić na podstawie „xcrun simctl list”

Pamiętaj, że możesz bezpiecznie usunąć ~ / Library / Application Support / iPhone Simulator i ~ / Library / Logs / iOS Simulator, jeśli nie planujesz konieczności powrotu do Xcode 5.x lub wcześniejszej.


Dziękuję za udzielenie czegoś, co prawdopodobnie można uznać za autorytatywną odpowiedź. Czy istnieje łatwy sposób (poza rejestrowaniem z poziomu aplikacji), aby znaleźć lokalizację określonej aplikacji w symulatorze?
fzwo

Przepraszamy, nie, ale widziałem kilka próśb o to tutaj i na forach. Proszę zgłosić radar na bugreport.apple.com
Jeremy Huddleston Sequoia

7

aktualizacja: 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
}

Przejdź do Findera i naciśnij Command-Shift-g (lub Idź> Idź do folderu ... pod paskiem menu) i wklej tam pełną ścieżkę „var / folder /.../ dokumenty” i naciśnij go.



4

Napotkałem ten sam problem, gdy zapisałem pełną ścieżkę za pomocą CoreData. Podczas pobierania pełnej ścieżki zwraca wartość null, ponieważ identyfikator UUID folderu dokumentów jest inny przy każdym ponownym uruchomieniu aplikacji. Oto moja rezolucja:

  1. Upewnij się, że przechowujesz tylko względną ścieżkę dokumentu / pliku w CoreData. Np. Przechowuj „Files / image.jpg” zamiast „/Users/yourname/.../Applications/UUID/Document/Files/image.jpg”.
  2. Aby pobrać lokalizację dokumentu aplikacji, użyj następujących poleceń:

    [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject];

  3. Połącz oba punkty # 2 i # 1, aby uzyskać pełną ścieżkę do dokumentu / pliku, który chcesz odzyskać.
Możesz zapoznać się z Notą programistyczną Apple: https://developer.apple.com/library/ios/technotes/tn2406/_index.html


3

Gdzie jest katalog dokumentów dla symulatora iOS 8

Być może zauważyłeś, że iPhone Simulator zmienił się wraz z Xcode 6, a wraz z nim - oczywiście - ścieżka do katalogu dokumentów symulowanych aplikacji. Czasami trzeba się temu przyjrzeć.

Znalezienie tej ścieżki nie jest tak łatwe, jak kiedyś, a mianowicie Biblioteka / Obsługa aplikacji / Symulator iPhone'a / 7.1 / Aplikacje /, po której następuje tajemniczy numer reprezentujący twoją aplikację.

Od Xcode 6 i iOS 8 znajdziesz go tutaj: Library / Developer / CoreSimulator / Devices / Cryptic Number / Data / Containers / Data / Application / Cryptic number

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


3

w Appdelegate umieść ten kod, aby wyświetlić katalog dokumentów i pamięci podręcznej:

#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

w dzienniku:

Katalog dokumentów: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Documents /

Katalog pamięci podręcznej: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Library / Caches


3

Jeśli chcesz wejść do folderów aplikacji, aby zobaczyć, co się dzieje i nie chcesz przechodzić przez labiryntowe identyfikatory UUDID, zrobiłem to: https://github.com/kallewoof/plget

i używając go, zrobiłem to: https://gist.github.com/kallewoof/de4899aabde564f62687

Zasadniczo, gdy chcę przejść do folderu jakiejś aplikacji, robię:

$ 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

W ./app.shczęści synchronizacje linki. Jest to konieczne w zasadzie zawsze w dzisiejszych czasach, ponieważ aplikacje zmieniają UUID dla każdego uruchomienia w Xcode od 6.0. Ponadto aplikacje są niestety według identyfikatora pakietu dla 8.x i według nazwy aplikacji dla <8.


3

Na podstawie odpowiedzi Ankur, ale dla nas użytkowników Swift:

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

Umieść go w ViewDidLoad, a zostanie wydrukowany natychmiast po uruchomieniu aplikacji.


3

Symulatory znajdują się pod:

~/Library/Developer/CoreSimulator/

Tutaj są wymienione jako katalogi z nazwami UUID. Użyj opcji sortowania według „Daty modyfikacji”, aby znaleźć najnowszą. Wewnątrz przejdź do:

/data/Containers/Data/Application/

Tutaj otrzymasz listę wszystkich aplikacji na tym urządzeniu. Możesz ponownie posortować to, aby pobrać najnowszą aplikację.

UWAGA: Xcode zmienia nazwę katalogu za każdym razem, gdy uruchamiasz aplikację, więc nie polegaj na tworzeniu aliasów / skrótów na pulpicie.

Najłatwiej jest użyć tutaj aplikacji , która robi wszystko automatycznie.


2

Katalog symulatora został przeniesiony wraz z Xcode 6 beta do ...

 ~/Library/Developer/CoreSimulator

Przeglądanie katalogu do folderu Dokumenty Twojej aplikacji jest nieco bardziej uciążliwe, np.

~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite

2

Najlepszym sposobem na znalezienie ścieżki jest skorzystanie z kodu.

Używając Swift, po prostu wklej poniższy kod do aplikacji funkcji w pliku AppDelegate.swift

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

W przypadku kodu Obj-C poszukaj odpowiedzi z @Ankur


2

Dla 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)")
}
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.