Группы изолированных приложений Cocoa

В документации о правах описан метод, в котором несколько приложений, созданных одной командой разработчиков, могут совместно использовать доступ к специальному групповому контейнеру

Я добавил ключ доступа к основному приложению и вспомогательному приложению, включенному в основной пакет приложений. Каталог группы никогда не создается, и метод получения пути — [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. Я могу заставить его работать, изменив права и идентификаторы пакетов, чтобы они соответствовали моей команде, но не могу сделать так, чтобы групповые контейнеры были общими.


person Jason Harwig    schedule 26.07.2012    source источник
comment
Можете ли вы опубликовать список xml того, как выглядит ваша декларация о правах?   -  person Dov    schedule 27.07.2012


Ответы (1)


«~» будет автоматически преобразован в каталог вашего контейнера в изолированной среде.

Таким образом, один из способов сделать это - добавить "~" с числом шагов назад ("../"), пока вы не достигнете ~/Library, а затем вы создадите свой групповой контейнер, начиная с него.

person Samir    schedule 13.08.2012
comment
Большое спасибо. Создание каталога с использованием этого сработало: NSString *groupContainer = [@"~/../../../Group Containers/TEAM_ID.com.pinepointsoftware" stringByExpandingTildeInPath]; - person Jason Harwig; 14.08.2012
comment
Хотя это работает, я беспокоюсь, что это может сломаться в будущем, когда Apple исправит это! Как ни странно, эта функция была введена в 10.7.4, сейчас это 10.8.1, и они до сих пор не исправили эту серьезную ошибку. - person strange; 01.09.2012
comment
Это не ошибка. Если у вас нет доступа к пути, он не будет работать. Это обходной путь, позволяющий получить путь к контейнеру группы до тех пор, пока не будет реализован метод containerURLForSecurityApplicationGroupIdentifier. - person Samir; 01.09.2012