无法加载 Safari contentBlocker。因为无法访问应用组的 NSUserDefault

can't load Safari contentBlocker. because can't access app group's NSUserDefault

我正在制作 iOS 9 Safari AdBlocker 应用程序。 我正在使用 AdBlockPlusSafari 的模块。 应用程序在模拟器上运行良好。

但是当尝试在设备上 运行 它时 (iPhone6),它无法重新加载 contentBlocker。

[SFContentBlockerManager 
 reloadContentBlockerWithIdentifier:self.contentBlockerIdentifier 
 completionHandler:^(NSError *error) {
    if (error) {
        NSLog(@"Error in reloadContentBlocker: %@", error);
    }

    dispatch_async(dispatch_get_main_queue(), ^{
        wSelf.reloading = NO;
        [wSelf checkActivatedFlag];
        if (completion) {
            completion(error);
        }
    });
}];

报错 错误域=ContentBlockerErrorDomain 代码=3“(空)”

访问 NSUserDefault (App Group) 中的值引起的。

- (instancetype)init
{
    if (self = [super init])
    {
        _bundleName = [[[[[NSBundle mainBundle] bundleIdentifier] componentsSeparatedByString:@"."] subarrayWithRange:NSMakeRange(0, 2)] componentsJoinedByString:@"."];
        NSString *group = [NSString stringWithFormat:@"group.%@.%@", _bundleName, @"AdBlockerPro"];

        NSLog(@"Group name: %@", group);
        _adblockProDetails = [[NSUserDefaults alloc] initWithSuiteName:group];
        [_adblockProDetails registerDefaults:
     @{ AdblockProActivated: @NO,
        AdblockProEnabled: @YES
        }]; 

        _enabled = [_adblockProDetails boolForKey:AdblockProEnabled];
        _activated = [_adblockProDetails boolForKey:AdblockProActivated];
    }
    return self;
}

主机应用和 Safari 扩展中的应用组名称相同。 但是在 Safari 扩展中,当应用程序访问 NSUserDefault 中的设置时,它会给我错误。 在项目setting/Capabilities中,我为App Group做了一切。在app id中,正好涉及到app组名。 这只发生在设备上。在模拟器上,效果很好。我找不到这个错误的原因。

如果您遇到过这种情况,请帮助我。 期待您的帮助。

我自己找到了原因。 我在应用程序组容器中放了一些东西 (NSMutableDictionary),并做了一些事情来将文件写入扩展包。 Apple 禁止。

所以我从 AdBlockManager(与应用程序组交互)中删除了除标志变量(布尔类型)之外的所有内容。 我使用 NSFileManager 进行文件管理。

http://www.atomicbird.com/blog/sharing-with-app-extensions

我终于可以在设备上使用应用程序扩展了。

祝你好运!