我正在制作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中,它完全涉及应用程序组名称。 这仅在设备上发生。在模拟器上,它很好用。我找不到这个错误的原因。
如果您有经验,请帮助我。 期待您的帮助。
答案 0 :(得分:1)
我自己找到了原因。 我在应用程序组容器中放了一些东西(NSMutableDictionary)并做了一些事情来将文件写入扩展束。 它被Apple禁止。
所以除了标志变量(布尔类型)之外,我从AdBlockManager(与app组交互)中删除了所有内容。 我使用NSFileManager继续进行文件管理。
http://www.atomicbird.com/blog/sharing-with-app-extensions
最后,app扩展程序正在我的设备上工作。
祝你好运!