Как экспортировать общий контейнер приложения iOS с Xcode6.2?

В нашем приложении iOS мы используем общий контейнер для обмена файлами между нашим основным приложением iOS и его расширением (в частности, WatchKit Extension) с использованием метода [NSFileManager containerURLForSecurityApplicationGroupIdentifier:]. Для целей отладки нам нужно получить доступ к содержимому этого общего контейнера, поэтому мы попытались экспортировать весь контейнер App с помощью окна "Устройства" в Xcode:

Screenshot from Xcode

Но хранилище Shared не входит в контейнер, возможно потому, что оно находится по другому пути на самом устройстве.

Вопрос в том, как мы можем получить общий контейнер, если это возможно?

Ответ 1

Мне сказали члены команды Xcode на WWDC, что это невозможно (на момент написания, Xcode 7.3 и 8 beta 1). Я зарегистрировал radar, который я рекомендую всем обмануть или прокомментировать, чтобы мы могли получить эту функциональность.

Ответ 2

Я использую этот код для вывода на консоль пути к моей локальной базе данных SQLite:

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

Затем я копирую и вставляю строку в Finder → Go, поэтому я перехожу непосредственно в папку. Это отлично работает в симуляторе, но я не думаю, что вы можете получить доступ к своей общей группе контейнеров iPhone с вашего Mac.

Ответ 3

Скопируйте данные из контейнера группы в каталог документов. Затем загрузите контейнер приложения с помощью xcode.

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

url здесь можно получить, используя следующую функцию NSFileManager

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

Ответ 4

Лучшим решением, которое я нашел, является создание резервной копии вашего устройства, а затем с помощью iExplorer для изучения резервной копии. Есть папка AppDomainGroup-*. Хотя по некоторым причинам не все резервные копии файлов (возможно, из-за применения настроек к файлам, которые следует игнорировать во время резервного копирования).