在iOS 7.1上导入LocalAuthentification.framework崩溃

使用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 

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

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

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

iPad Air(7.1)也存在同样的问题,但您可以使用可resize的iPad / iPhone选项。

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

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

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

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