Должны ли контейнеры группы приложений иметь идентификатор команды или нет?

Я создаю приложение для Mac со встроенным расширением общего доступа и пытаюсь настроить группы приложений для обмена данными между ними. В Xcode в разделе «Возможности» я включил группы приложений и установил одно значение: $(TeamIdentifierPrefix)com.company.App как в родительском приложении, так и в расширении общего доступа. Когда я запускаю родительское приложение, оно создает папку: Library/Group Containers/com.company.App (без идентификатора команды). Когда я запускаю расширение, оно создает папку: Library/Group Containers/TEAMID.com.company.App с идентификатором команды.

Почему два исполняемых файла создают разные контейнеры и как определить один и тот же контейнер для обоих?


person Mike T    schedule 13.01.2015    source источник
comment
У меня такая же проблема. По какой-то причине $(TeamIdentifierPrefix) иногда оценивается как пустая строка. Мой обходной путь: использование фактического идентификатора команды вместо переменной   -  person nschum    schedule 18.05.2015
comment
@nschum то же самое здесь - пробовал разные вещи и варианты, но у меня это сработало только после замены переменной статической строкой, содержащей идентификатор команды. Спасибо что подметил это!   -  person Jay    schedule 31.07.2016
comment
Хотя $(TeamIdentifierPrefix) у меня отлично работало на macOS 10.11, например, с 10.12 я получил предупреждение о том, что отключить звук можно только с помощью префикса буквальной группы: group.$(TeamIdentifierPrefix).com.company.App. См. здесь: stackoverflow .com/questions/38275395/   -  person ctietze    schedule 17.06.2017


Ответы (1)


Вы не должны включать расширение «App» в возможности Xcode.

Методы, используемые для управления групповыми контейнерами, специфичны.

Чтобы получить доступ к групповому контейнеру, вы должны использовать в обоих приложениях метод [myFileManager containerURLForSecurityApplicationGroupIdentifier:TEAMID.com.company] без расширения APP.

Чтобы получить доступ к UserDefaults (общим для двух приложений) и сохранить их в контейнере группы, следует вызвать [NSUserDefaults alloc] initWithSuiteName:TEAMID.com.company]

person Lionel_A    schedule 14.01.2015