无法加载 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
我终于可以在设备上使用应用程序扩展了。
祝你好运!
我正在制作 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
我终于可以在设备上使用应用程序扩展了。
祝你好运!