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

0 ответов

Другие вопросы по тегам