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

时间:2015-10-21 18:23:45

标签: objective-c ios9 safari-extension adblock

我正在制作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"(null)"

它是通过访问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中的设置时,它会给我错误。 在项目设置/功能中,我为App Group做了所有工作。在应用程序ID中,它完全涉及应用程序组名称。 这仅在设备上发生。在模拟器上,它很好用。我找不到这个错误的原因。

如果您有经验,请帮助我。 期待您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

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

最后,app扩展程序正在我的设备上工作。

祝你好运!