在iOS 7.1上导入LocalAuthentification.framework崩溃

时间:2014-10-17 13:46:14

标签: ios ios7 swift xcode6 touch-id

使用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 个答案:

答案 0 :(得分:4)

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

iPad Air(7.1)的问题相同,但您可以使用可调整大小的iPad / iPhone选项。

答案 1 :(得分:1)

LocalAuthentication.framework可从iOS 8.0获得。 [iOS Frameworks]

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

答案 2 :(得分:1)

首先,我将 LocalAuthentification.framework标记为可选 更改"自动链接框架"没有 然后在代码中访问类之前进行简单检查:

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

对我来说很好,希望能帮助别人

答案 3 :(得分:1)

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