容器应用程序无法读取VPN网络扩展写入的用户默认数据

时间:2017-06-22 21:21:23

标签: ios objective-c xcode appgroups

我正在尝试使用App Groups在VPN Extension和它在iOS中的容器应用程序之间共享数据。

我一直在关注Apple如何执行此操作的说明,但它似乎没有起作用。

我在Apple Developer配置文件中创建了名为group.com.fisc.vpnapp.datashare的App Group。 (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是我的团队ID)来消除该消息,它消除了消息但仍然无法访问我的消息共享数据。

我还尝试将通过NSUserDefaults访问App Group的所有代码放在各个主进程的每个进程上,没有区别。

修改

我还尝试在从它们读取之前同步NSUserDefaults。

0 个答案:

没有答案