Контейнерное приложение не может прочитать данные по умолчанию пользователя, которые были записаны расширением сети VPN
Я пытаюсь использовать группы приложений для обмена данными между расширением VPN и его контейнерным приложением в iOS.
Я следовал инструкциям Apple, как это сделать, но, похоже, это не работает.
Я создал группу приложений в своем профиле Apple Developer с именем group.com.fisc.vpnapp.datashare
, (The group
префикс был автоматически добавлен к идентификатору Apple).
Затем я использую этот код для установки значения в коде моего VPN-расширения
- (void) setStatus:(int) status
{
NSUserDefaults *dataShare = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.fisc.vpnapp.datashare"];
[dataShare setObject:@(status) forKey:@"status"];
[dataShare synchronize];
}
Затем внутри моего приложения-контейнера я использую следующий код для получения значения.
/**
* Retrieve the status of the VPN Connection.
*
* @return int
*/
- (int) getStatus
{
NSUserDefaults *providerData = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.fisc.vpnapp.datashare"];
if ([providerData objectForKey:@"status"] != NULL) {
long providerStatus = [providerData integerForKey:@"status"];
// Logger is just a class that wraps
// around NSLog to supply headers and
// other information.
[Logger info:[NSString stringWithFormat:@"Found status in shared provider: %@", @(providerStatus)]];
// Validate that the stored status is within the
// range of valid status values.
if
(
providerStatus >= VPN_STATUS_DISCONNECTED &&
providerStatus <= VPN_STATUS_CONNECTED
) {
return (int)providerStatus;
}
}
// Default to disconnected status.
return VPN_STATUS_DISCONNECTED;
}
Но, похоже, что ничего не читается обратно из группы приложений.
Когда я пытаюсь прочитать значение обратно в моем приложении контейнера, я получаю следующее сообщение.
[User Defaults] Failed to read values in CFPrefsPlistSource<0x1c4116c80> (Domain: group.com.fisc.vpnapp.datashare, User: kCFPreferencesAnyUser, ByHost: Yes, Container: (null), Contents Need Refresh: Yes): Using kCFPreferencesAnyUser with a container is only allowed for System Containers, detaching from cfprefsd
Я могу избавиться от этого сообщения, изменив строковое представление группы приложений в моем коде на group.com.XXXXXXX.fisc.vpnapp.datashare
(где XXXXXXXX - это идентификатор моей команды), он избавляется от сообщения, но все равно не может получить доступ к моим общим данным.
Я также попытался поместить весь код, который обращается к группе приложений через NSUserDefaults, в каждый из процессов, соответствующих основным потокам, без разницы.
редактировать
Я также пытался синхронизировать NSUserDefaults перед чтением с них.