如何检查iOS 8.3及以上版本中的“允许完全访问”是否已被授权,*来自容器应用程序*。

34

iOS 8.3及之前版本中,检查键盘扩展是否已被授权“允许完全访问”的方法是通过以下代码在容器应用程序中进行:

- (BOOL)isOpenAccessGranted{
   return [UIPasteboard generalPasteboard];
}

然而,对于这个流行的SO答案线程的评论指出,自iOS 8.3以来,即使未授予完全访问权限,应用程序仍可以从共享组容器中读取,因此上述代码始终返回true。但是,只有在开启“允许完全访问”时才被授予写入权限。

我已尝试根据苹果的文档列出所有粘贴板,但没有说明哪些是可访问的。对此有任何见解将不胜感激。


请查看此答案:http://stackoverflow.com/a/26088674/3317354 - teamnorge
感谢@teamnorge提供链接。我已经尝试了这段代码,但仍然没有起作用。 - daspianist
完全访问是一种原子权限。它只能是是或否。如果启用了它,您将拥有读写权限。请参见链接https://dev59.com/K18e5IYBdhLWcg3wssEV。如果您正在尝试在应用程序组中使其工作,则可以通过显式测试对应用程序沙盒的访问来进行测试。否则,这将是一个安全问题。 - Omar
@Omar 如果你看到了你提供的 SO 链接中的问题,那就和我在问题正文中提到的是完全相同的。我已经查看过那个问题,但问题是自从 iOS 8.3 以来,那个答案不再适用,因此我才在这里提出问题。换句话说,我该如何明确测试对应用沙盒的访问权限。 - daspianist
我刚刚确认了代码[UIPasteboard generalPasteboard]在设备上可以工作,但在模拟器上不行(如果没有完全访问权限,则为nil,如果允许完全访问,则不为nil)。你能否在设备上尝试一下?我正在运行iOS 8.3。 - Omar
显示剩余8条评论
2个回答

2

这是我目前正在使用/部署的实现:

- (void)viewDidAppear:(BOOL)animated {
    NSLog(@"keyboard has full access? %@", ([self validateKeyboardHasFullAccess] ? @"YES" : @"NO"));
}

- (BOOL)validateKeyboardHasFullAccess {
    return !![UIPasteboard generalPasteboard];
}

感谢您的输入!在从键盘内部检查完全访问权限时,这非常有效,但我想知道是否还有一种方法可以从容器应用程序中进行检查。 - daspianist

1
在iOS 8.4上,如果未允许完全访问,则UIPasteboard.generalPasteboard()nil。在测试之前,请尝试删除键盘和容器应用程序+ 清除并构建 应用程序。应该可以正常工作。

我尝试了上述代码,但即使没有给予“完全访问权限”,它仍然返回“Yes” 。 - Prashant Solanki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接