在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模拟器和设备。