Pytanie Jak wyeksportować udostępniony kontener aplikacji na iOS za pomocą Xcode6.2?


W naszej aplikacji na iOS używamy współdzielonego kontenera do udostępniania plików między naszą główną aplikacją na iOS a jej rozszerzeniem (w szczególności Rozszerzenie WatchKit), używając [NSFileManager containerURLForSecurityApplicationGroupIdentifier:] metoda. Do celów debugowania musimy uzyskać dostęp do zawartości tego udostępnionego kontenera, więc próbowaliśmy wyeksportować cały kontener aplikacji za pomocą okna Urządzenia w Xcode:

Screenshot from Xcode

Jednak pamięć współużytkowana nie jest zawarta w kontenerze, prawdopodobnie dlatego, że znajduje się w innej ścieżce na samym urządzeniu.

Pytanie brzmi, w jaki sposób możemy uzyskać wspólny kontener, jeśli jest to nawet możliwe?


11
2018-04-19 08:01


pochodzenie




Odpowiedzi:


Członkowie zespołu Xcode powiedzieli mi podczas WWDC, że nie jest to możliwe (w czasie pisania, Xcode 7.3 i 8 beta 1). Złożyłem radar, które polecam wszystkim naśladować lub komentować, abyśmy mogli uzyskać tę funkcjonalność.


6
2018-06-16 22:21



Wszelkie aktualizacje dotyczące tego? - Rygen


Używam tego kodu, aby wydrukować w konsoli ścieżkę do mojej lokalnej bazy danych SQLite:

NSString *groupContainer = [[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.myapp.mycontainer"] path];
NSString *sqlitePath = [NSString stringWithFormat:@"%@/Database.sqlite", groupContainer];
NSURL *url = [NSURL fileURLWithPath:sqlitePath];

Następnie skopiuj i wklej ciąg znaków w Finderze -> Idź do, aby przejść bezpośrednio do folderu. To działa dobrze w Symulatorze, ale wydaje mi się, że nie masz dostępu do grupy kontenerów Twojego iPhone'a z komputera Mac.


1
2018-04-19 15:58



Dzięki @BalestraPatrick, znam się na rozwiązaniu Simulator, ale potrzebujemy rozwiązania dla prawdziwych urządzeń do chrupania dziennika po fakcie z urządzeń beta testerów. - Sagi Iltus


Skopiuj dane z kontenera grupowego do katalogu dokumentów. Następnie pobierz kontener aplikacji za pomocą xcode.

NSFileManager.defaultManager().copyItemAtURL(url, toURL: NSURL.fileURLWithPath(AppDelegate.applicationUserDirectory()))

Url tutaj można uzyskać za pomocą poniższej funkcji NSFileManager

func containerURL(forSecurityApplicationGroupIdentifier groupIdentifier: String) -> URL?

1
2018-05-02 13:20



Twoja zmienna tutaj adres URL, co by to było, gdyby próbować uzyskać dostęp do domyślnej lokalizacji db domeny, tj. taki, który jest widoczny w Dokumenty po wyświetleniu zawartości pakietu? - user2363025
@ user2363025 możesz skopiować całą zawartość kontenera do katalogu dokumentów, a następnie wybrać to, co chcesz sprawdzić. - Vishun


Obejście rzeczywistego urządzenia -

Generalnie wstrzymuję wykonywanie mojej aplikacji, a następnie uruchamiam następujące polecenie debugger lldb skopiować żądany plik ze współdzielonego kontenera do kontenera piaskownicy, a następnie pobrać kontener z Xcode.

po [[NSFileManager defaultManager] copyItemAtPath: [[[NSFileManager   defaultManager]   containerURLForSecurityApplicationGroupIdentifier: GROUP_NAME]   URLByAppendingPathComponent: FILE_NAME] .path to Path: [[[[NSFileManager   defaultManager] URLsForDirectory: NSDocumentDirectory   inDomains: NSUserDomainMask] lastObject]   URLByAppendingPathComponent: FILE_NAME] ścieżka] error: nil]

Powyżej może wyglądać skomplikowanie, ale jeśli przełamiesz powyższe, robimy 3 rzeczy -

  1. Pobierz udostępniony plik kontenera

    [[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: GROUP_NAME] URLByAppendingPathComponent: FILE_NAME] .path

  2. Pobierz ścieżkę do katalogu dokumentu sandbox:

    [[[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject] URLByAppendingPathComponent: FILE_NAME] ścieżka]

  3. Skopiuj plik z Udostępnionego kontenera do piaskownicy

    [[NSFileManager defaultManager] copyItemAtPath: SHARED_PATH toPath: SANDBOX_PATH error: nil]


1
2018-05-10 20:26





Najlepszym rozwiązaniem, jakie znalazłem, jest utworzenie kopii zapasowej urządzenia, a następnie użycie iExplorer do eksploracji kopii zapasowej. Istnieje kilka AppDomainGroup-* lornetka składana. Chociaż z jakiegoś powodu nie wszystkie pliki są tam zapisywane (prawdopodobnie z powodu zastosowanych ustawień do plików, które mają zostać zignorowane podczas tworzenia kopii zapasowej).


0
2017-09-22 04:31