W Xcode 6 mam aplikację, w której używam danych podstawowych, ale nie ma folderu w obsłudze aplikacji dla symulatora iPhone'a iOS 8. Gdzie są przechowywane moje pliki i baza danych Core Data sqlite?
jest to ogólnie poprawne, ale wydaje się, że jest więcej zmian w folderach wewnętrznych. To jest ścieżka, która działa dla mnie w Xcode Beta 3:~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn,
1
Czy istnieje sposób, aby zrozumieć, że liczby lub brutalna siła to jedyna szansa na dotarcie do danych?
nas
89
NSLog (@ "katalog aplikacji:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); - drukuje pełną ścieżkę do folderu danych
vir nam
2
Potrzebowałem trwałego skrótu do katalogu dokumentów mojej aplikacji w celu szybkiego debugowania. Po zastosowaniu didFinishLaunchingWithOptions. #if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif Teraz mam simlink, który działa, mimo że iOS8 + XCode6 zmienia identyfikator GUID danych mojej aplikacji za każdym razem, gdy buduję.
labraks
32
xcrun simctl listKomenda może być używana do sprawdzania korespondencji pomiędzy nazwami i symulator do identyfikatorów urządzeń. A dokładniej xcrun simctl list devicespolecenie.
ThomasW
36
Sugerowałbym, abyś użył SimPholder do znalezienia plików symulatora. Jest to element paska menu, który śledzi aplikacje symulatora i pozwala przejść bezpośrednio do ich folderów i zawartości. To jest zajebiste.
Miałem również problemy z SimPholderami2 w Yosemite, więc uruchomiłem skrypt wiersza poleceń, który pomoże Ci znaleźć i otworzyć okno Findera do symulatora i wybranej aplikacji. Przechodzi przez foldery i listy metadanych, aby wyświetlić wszystkie foldery i aplikacje symulatora. Jeśli jesteś zainteresowany, sprawdź tutaj
Rodrigo Lima
SimPholder2 działa w Yosemite, ale jest trochę powolne; po kliknięciu ikony na pasku stanu poczekaj kilka sekund, a powinna się pojawić.
Jason
Whoa, to niesamowite i najnowsze działa z Yosemite + Xcode 6.3!
TruMan1,
21
Uważam, że aplikacja SimulatorManager jest bardzo przydatna. Przenosi Cię bezpośrednio do folderu aplikacji zainstalowanych symulatorów. Próbowałem z symulatorami 7.1, 8.0 i 8.1.
SimulatorManager znajduje się w postaci ikony w zasobniku systemowym i udostępnia opcję „Uruchom przy logowaniu”.
Uwaga : działa to tylko z Xcode 6 (w moim przypadku 6.1.1) i nowszymi.
Amar, jak zainstalować SimulatorManager? Myślałem, że to wtyczka do Xcode, ale jest to projekt Xcode
malena
1
w górnym pasku wybierz: Produkt -> Archiwum -> a następnie Eksportuj archiwum jako aplikację Mac bez ponownego podpisywania (ostatnia opcja) otrzymasz plik .app, który możesz umieścić w folderze aplikacji jak zwykła aplikacja. ..
Heckscheibe,
11
Aby dowiedzieć się, gdzie jest przechowywany plik .sqlite w pliku AppDelegate.m, dodaj następujący kod
Zmagałem się z tym przez jakiś czas. Po prostu dotarcie do mojej lokalnej bazy danych sqlite stało się ogromnym problemem. Napisałem ten skrypt i zrobiłem z niego fragment kodu wewnątrz XCode. Umieszczam go w mojej aplikacjiDidFinishLaunching inside my appDelegate.
//xcode 6 moves the documents dir every time. haven't found out why yet. #if DEBUG NSLog(@"caching documents dir for xcode 6. %@",[NSBundle mainBundle]);NSString*toFile =@"XCodePaths/lastBuild.txt";NSError*err =nil;[DOCS_DIR writeToFile:toFile atomically:YES encoding:NSUTF8StringEncoding error:&err];if(err)NSLog(@"%@",[err localizedDescription]);NSString*appName =[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];NSString*aliasPath =[NSString stringWithFormat:@"XCodePaths/%@", appName];remove([aliasPath UTF8String]);[[NSFileManager defaultManager] createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil];#endif
Tworzy to łącze simlink w katalogu głównym dysku. (Być może za pierwszym razem będziesz musiał samodzielnie utworzyć ten folder i chmod go lub możesz zmienić lokalizację w inne miejsce) Następnie zainstalowałem wtyczkę xcodeway https://github.com/onmyway133/XcodeWay
Zmodyfikowałem go trochę tak, że pozwoli mi po prostu nacisnąć cmd + d i otworzy wyszukiwarkę winder do katalogu trwałych dokumentów mojej bieżącej aplikacji. W ten sposób, niezależnie od tego, ile razy XCode zmienia twoją ścieżkę, zmienia się tylko podczas działania i aktualizuje twoje łącze simlink natychmiast po każdym uruchomieniu.
Symulator umieszcza plik w katalogu ~ / Library / Developer / CoreSimulator / Devices / ..., ale ścieżka po / Devices jest inna dla każdego.
Użyj tej poręcznej metody. Zwraca ścieżkę do katalogu tymczasowego dla bieżącego użytkownika i nie przyjmuje argumentów.
NSString*NSTemporaryDirectory(void);
Dlatego w mojej klasie ViewController zwykle umieszczam ten wiersz w moim viewDidLoad tylko jako odniesienie, gdy muszę pobrać mój przechowywany plik CoreData. Mam nadzieję że to pomoże.
NSLog(@"FILE PATH :%@",NSTemporaryDirectory());
(Uwaga: aby przejść do ścieżki, w menu wyszukiwarki kliknij Idź i wpisz ~ / Library, aby otworzyć ukryty katalog, a następnie w oknie Findera możesz kliknąć ścieżkę wyświetlaną na konsoli).
Ta lokalizacja ponownie się zmieniła, jeśli używasz Swift, użyj tego, aby dowiedzieć się, gdzie jest folder (jest to kopiowane z pliku AppDelegate.swift, który tworzy dla Ciebie Apple, więc jeśli nie działa na twoim komputerze, wyszukaj w ten plik dla odpowiedniej składni, działa to na moim przy użyciu symulatora Xcode 6.1 i iOS 8):
let urls =NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains:.UserDomainMask)
println("Possible sqlite file: \(urls)")
W Swift 4 lub Swift 5 możesz użyć NSHomeDirectory().
Najłatwiejszym sposobem w Xcode 10 (lub Xcode 11) jest wstrzymanie aplikacji (np. Gdy osiągnie punkt przerwania) i uruchomienie tego wiersza w konsoli debugera:
po NSHomeDirectory()
po oznacza drukowany obiekt i drukuje większość rzeczy
Dzięki Swift 4 możesz użyć poniższego kodu, aby uzyskać katalog domowy swojej aplikacji. Tam znajduje się katalog dokumentów Twojej aplikacji.
print(NSHomeDirectory())
Myślę, że już wiesz, że katalog domowy twojej aplikacji jest zmienny, więc jeśli nie chcesz dodawać dodatkowego kodu do swojej bazy kodu, SimPholder jest dla Ciebie miłym narzędziem.
Co więcej, możesz się zastanawiać, czy istnieje narzędzie, które pomoże Ci zaoszczędzić czas związany z zamykaniem i ponownym otwieraniem tej samej bazy danych SQLite za każdym razem po zmianie katalogu domowego aplikacji. Odpowiedź brzmi: tak, narzędziem, które znam, jest SQLiteFlow . Z jego dokumentu jest napisane, że:
Obsługa zmian nazw plików lub katalogów bazy danych. To sprawia, że SQLiteFlow może współpracować z bazą danych SQLite w symulatorze iOS.
Odpowiedzi:
Katalog symulatora został przeniesiony wraz z Xcode 6 beta do ...
Przeglądanie katalogu do folderu Dokumenty aplikacji jest nieco bardziej uciążliwe, np.
źródło
~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
#if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif
Teraz mam simlink, który działa, mimo że iOS8 + XCode6 zmienia identyfikator GUID danych mojej aplikacji za każdym razem, gdy buduję.xcrun simctl list
Komenda może być używana do sprawdzania korespondencji pomiędzy nazwami i symulator do identyfikatorów urządzeń. A dokładniejxcrun simctl list devices
polecenie.Sugerowałbym, abyś użył SimPholder do znalezienia plików symulatora. Jest to element paska menu, który śledzi aplikacje symulatora i pozwala przejść bezpośrednio do ich folderów i zawartości. To jest zajebiste.
źródło
Uważam, że aplikacja SimulatorManager jest bardzo przydatna. Przenosi Cię bezpośrednio do folderu aplikacji zainstalowanych symulatorów. Próbowałem z symulatorami 7.1, 8.0 i 8.1.
SimulatorManager znajduje się w postaci ikony w zasobniku systemowym i udostępnia opcję „Uruchom przy logowaniu”.
Uwaga : działa to tylko z Xcode 6 (w moim przypadku 6.1.1) i nowszymi.
Mam nadzieję, że to pomoże!
źródło
Aby dowiedzieć się, gdzie jest przechowywany plik .sqlite w pliku AppDelegate.m, dodaj następujący kod
teraz wywołaj tę metodę w AppDelegate.m
źródło
To zadziałało szybko:
źródło
Zmagałem się z tym przez jakiś czas. Po prostu dotarcie do mojej lokalnej bazy danych sqlite stało się ogromnym problemem. Napisałem ten skrypt i zrobiłem z niego fragment kodu wewnątrz XCode. Umieszczam go w mojej aplikacjiDidFinishLaunching inside my appDelegate.
Tworzy to łącze simlink w katalogu głównym dysku. (Być może za pierwszym razem będziesz musiał samodzielnie utworzyć ten folder i chmod go lub możesz zmienić lokalizację w inne miejsce) Następnie zainstalowałem wtyczkę xcodeway https://github.com/onmyway133/XcodeWay
Zmodyfikowałem go trochę tak, że pozwoli mi po prostu nacisnąć cmd + d i otworzy wyszukiwarkę winder do katalogu trwałych dokumentów mojej bieżącej aplikacji. W ten sposób, niezależnie od tego, ile razy XCode zmienia twoją ścieżkę, zmienia się tylko podczas działania i aktualizuje twoje łącze simlink natychmiast po każdym uruchomieniu.
Mam nadzieję, że jest to przydatne dla innych!
źródło
Otwórz wyszukiwarkę> Biblioteka> Deweloper> CoreSimulator> Urządzenia
Następnie ikonę Zmień układ z wyszukiwarki wybierz Data dodania
Wybierz swoją aplikację> dane> Kontener> dane> Aplikacje>
wybierz swoją aplikację> Dokumenty> Oto Twój plik db
W moim przypadku:
W przeciwnym razie zrób to:
- Wyświetli pełną ścieżkę do folderu danych.
Szybki:
źródło
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
Użyj Findera -> przejdź do folderu i wprowadź podaną ścieżkę bazową, aby dotrzeć do folderów aplikacji
źródło
Symulator umieszcza plik w katalogu ~ / Library / Developer / CoreSimulator / Devices / ..., ale ścieżka po / Devices jest inna dla każdego.
Użyj tej poręcznej metody. Zwraca ścieżkę do katalogu tymczasowego dla bieżącego użytkownika i nie przyjmuje argumentów.
Dlatego w mojej klasie ViewController zwykle umieszczam ten wiersz w moim viewDidLoad tylko jako odniesienie, gdy muszę pobrać mój przechowywany plik CoreData. Mam nadzieję że to pomoże.
(Uwaga: aby przejść do ścieżki, w menu wyszukiwarki kliknij Idź i wpisz ~ / Library, aby otworzyć ukryty katalog, a następnie w oknie Findera możesz kliknąć ścieżkę wyświetlaną na konsoli).
źródło
Ta lokalizacja ponownie się zmieniła, jeśli używasz Swift, użyj tego, aby dowiedzieć się, gdzie jest folder (jest to kopiowane z pliku AppDelegate.swift, który tworzy dla Ciebie Apple, więc jeśli nie działa na twoim komputerze, wyszukaj w ten plik dla odpowiedniej składni, działa to na moim przy użyciu symulatora Xcode 6.1 i iOS 8):
źródło
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.
źródło
Stworzyłem ten skrypt, który spakuje najnowszą aplikację zbudowaną dla dowolnego symulatora i spakuje ją na pulpit.
https://gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c
źródło
W Swift 4 lub Swift 5 możesz użyć
NSHomeDirectory()
.Najłatwiejszym sposobem w Xcode 10 (lub Xcode 11) jest wstrzymanie aplikacji (np. Gdy osiągnie punkt przerwania) i uruchomienie tego wiersza w konsoli debugera:
po
oznacza drukowany obiekt i drukuje większość rzeczyźródło
źródło
Dzięki Swift 4 możesz użyć poniższego kodu, aby uzyskać katalog domowy swojej aplikacji. Tam znajduje się katalog dokumentów Twojej aplikacji.
print(NSHomeDirectory())
Myślę, że już wiesz, że katalog domowy twojej aplikacji jest zmienny, więc jeśli nie chcesz dodawać dodatkowego kodu do swojej bazy kodu, SimPholder jest dla Ciebie miłym narzędziem.
Co więcej, możesz się zastanawiać, czy istnieje narzędzie, które pomoże Ci zaoszczędzić czas związany z zamykaniem i ponownym otwieraniem tej samej bazy danych SQLite za każdym razem po zmianie katalogu domowego aplikacji. Odpowiedź brzmi: tak, narzędziem, które znam, jest SQLiteFlow . Z jego dokumentu jest napisane, że:
źródło
Oto sh dla ostatnio używanego symulatora i aplikacji. Po prostu uruchom sh i skopiuj wydrukowany tekst i wklej i uruchom polecenie pokazu w Finderze.
źródło