6

使用 LocalAuthentication 有问题并支持 iOS 7.0

当我试图

import LocalAuthentication

如果目标 iOS 版本低于 8.0,我会崩溃。

我试图在构建阶段将LocalAuthentication.framework标记为可选,并通过调用检查类可用性:

var isTouchIDSupported: Bool {
        if let contextClass: AnyClass = NSClassFromString("LAContext") {
            return LAContext().canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil)
        }
        return false
    }

如果我评论 LAContext() 字符串,它不会崩溃:

var isTouchIDSupported: Bool {
            if let contextClass: AnyClass = NSClassFromString("LAContext") {
                //return LAContext().canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil)
            }
            return false

}

如果我在代码的任何位置访问任何 LA 类(例如 LAContext),它会在应用程序启动的第一秒崩溃。我在这里做错了什么?

此崩溃的控制台日志:

dyld: Symbol not found: _objc_isAuto
  Referenced from: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
  Expected in: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/usr/lib/libobjc.A.dylib
 in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
4

4 回答 4

4

这似乎是模拟器中的一个错误。不要选择iPhone 5s (7.1)。如果您使用 iPhone 5 (7.1) 并将LocalAuthentification.framework标记为Optional,则它可以工作。(也将框架自动链接NO

iPad Air (7.1) 也有同样的问题,但您可以使用 Resizable iPad/iPhone 选项,该选项有效。

于 2014-11-04T11:23:04.787 回答
1

从 iOS 8.0 可以使用 LocalAuthentication.framework。[ iOS 框架]

为避免在 iOS 7 中崩溃,请转到“项目目标”->“构建阶段”->“将二进制文件与库链接”-> 将 LocalAuthentication.framework 的状态设置为“可选”

于 2014-10-17T17:09:33.877 回答
1

首先,我将LocalAuthentification.framework 标记为 Optional,“自动链接框架”更改为 NO, 然后在代码中的访问类之前进行简单检查:

- (BOOL)isTouchIDSupported
{
    if (NSClassFromString(@"LAContext")) {
        return [self.context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil];
    }
    return false;
}

对我来说很好,希望对某人有所帮助

于 2014-10-30T17:59:03.163 回答
1

尝试使用预处理器指令有条件地导入 LocalAuthentication 框架和所有相关代码。然后,您将能够通过 Xcode 运行 iOS 7.x 模拟器和设备。

于 2015-05-05T15:39:30.833 回答