【问题标题】:What happens if I use LAPolicyDeviceOwnerAuthentication on iOS 8?如果我在 iOS 8 上使用 LAPolicyDeviceOwnerAuthentication 会发生什么?
【发布时间】:2016-09-13 17:11:58
【问题描述】:

在我的应用中,我想知道用户是否设置了密码或指纹 (touchID)。为此有一个非常简单的方法:[LAContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:error]

但是,Apple's docsLAPolicyDeviceOwnerAuthentication 仅适用于 iOS9 及更高版本。我宁愿在没有解释的情况下让 iOS 8 用户崩溃,即使它变老了。问题是,我已经在 iOS8.4 模拟器上尝试过,它似乎可以编译并且可以正常工作。

如果我在 iOS 8 上使用 LAPolicyDeviceOwnerAuthentication 会发生什么不良影响?

【问题讨论】:

    标签: ios objective-c touch-id


    【解决方案1】:

    我使用类似这样的代码:

    LAPolicy localAuthPolicy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
    if (![[UIDevice currentDevice].systemVersion hasPrefix:@"8."]) {
        localAuthPolicy = LAPolicyDeviceOwnerAuthentication;
    }
    

    这确保我只在 iOS 9 及更高版本上使用 LAPolicyDeviceOwnerAuthentication

    当您尝试使用LAPolicyDeviceOwnerAuthentication 时,在 iOS 8 设备上实际发生的情况没有记录。任何东西都不太可能崩溃,但身份验证可能会由于未知值而返回 NO,或者它可能会成功,因为 iOS 8 只有一个有效值并且它可能不做任何检查。

    不幸的是,Objective-C 没有像对常量、方法和类所做的那样,为有效的枚举值提供任何运行时检查。

    【讨论】:

    • 有意义,因为枚举值必须在某个地方的标头中定义,并且方法调用只是将其视为未知的枚举值。只是好奇:在编译时,xcode 不会针对不同版本的 iOS 的不同头文件进行编译吗?
    • 不,Xcode 只能在 Base SDK 上编译。并且在编译时,枚举值被它们的整数值简单地替换。所以你只通过12 作为策略。所以真正的未知数是如果你在 iOS 8 中只有 1 是已知策略时传递 2 作为策略,在 iOS 8 下会发生什么。
    【解决方案2】:

    如果您在低于 iOS 9 的任何设备上使用 LAPolicyDeviceOwnerAuthentication,应用程序将会崩溃。当我没有意识到这在 iOS 9 以下的任何版本上均不可用时,我的应用就发生了这种情况,但我的应用支持 iOS 8.x 作为其支持的最低操作系统版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 2015-07-15
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 2013-06-24
      相关资源
      最近更新 更多