В документации о правах описан метод, в котором несколько приложений, созданных одной командой разработчиков, могут совместно использовать доступ к специальному групповому контейнеру
Я добавил ключ доступа к основному приложению и вспомогательному приложению, включенному в основной пакет приложений. Каталог группы никогда не создается, и метод получения пути — [NSURL containerURLForSecurityApplicationGroupIdentifier:]
— на самом деле не существует ни в одном заголовке.
Что мне не хватает для создания общего группового контейнера?
ОБНОВЛЕНИЕ: добавлены права и создание группового контейнера.
Вот мой файл прав для основного приложения и вспомогательного приложения. (заменив TEAM_ID моим фактическим идентификатором)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>TEAM_ID.com.pinepointsoftware</string>
</array>
</dict>
</plist>
Я попытался создать каталог группового контейнера самостоятельно, основываясь на некоторой информации с форумов разработчиков:
NSFileManager *fm = [NSFileManager defaultManager];
NSString *path = [@"~/Library/Group Containers/TEAM_ID.com.pinepointsoftware" stringByExpandingTildeInPath];
if ([fm createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:NULL]) {
[fm createFileAtPath:[path stringByAppendingPathComponent:@"test.txt"] contents:nil attributes:nil];
}
Выполняя это внутри основного и вспомогательного приложений, создайте два разных каталога внутри каждой песочницы.
Я нашел образец проекта Apple AppSandboxLoginItemXPCDemo, в котором используются группы приложений для XPC. Я могу заставить его работать, изменив права и идентификаторы пакетов, чтобы они соответствовали моей команде, но не могу сделать так, чтобы групповые контейнеры были общими.