【问题标题】:Import LocalAuthentification.framework crashes on iOS 7.1在 iOS 7.1 上导入 LocalAuthentification.framework 崩溃
【发布时间】:2014-12-13 02:55:59
【问题描述】:

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

【问题讨论】:

  • 你在使用 Swift 吗?然后你可能必须创建一个桥头文件并将其导入那里。
  • 所选答案实际上并未解决您的问题。您能否发布包含解决方案的实际答案。我也遇到了同样的问题。
  • 我遇到了同样的问题,将“自动链接框架”更改为否。它没有解决问题。你能解决它吗?

标签: ios ios7 swift xcode6 touch-id


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 不起作用。我仍然得到:dyld:找不到符号:_objc_isAuto
      • 您是否尝试将 @import LocalAuthentication 替换为 #import
      【解决方案4】:

      LocalAuthentication.framework 从 iOS 8.0 开始可用。 [iOS Frameworks]

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

      【讨论】:

      • 完成了,但还是崩溃了。只有当我从构建阶段/链接二进制文件中删除 LocalAuthentification.framework 时,它才不会崩溃
      • 由于该框架可从 iOS 8 获得并且不向后兼容,因此您应该仅将其方法用于 iOS 8。例如,您可以将方法调用放在此条件之间以避免崩溃在下面iOS 8. if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { \\LocalAuthentification 方法调用 }
      • 问题在于构建设置标志“自动链接框架”以使用@import 语句,因为我将其更改为 NO all started to normal work!
      • @iiFreeman 我将“自动链接框架”更改为否。它没有用。是否还有其他原因导致此问题?
      • @AsifAsif,您永远不应该通过将systemVersion 作为浮点数来测试可选功能(这不是......什么是“8.0.1”作为浮点数?)并且永远不应该通常在浮点数上进行类似的比较。请参阅iiFreeman's answer 了解测试此问题的正确方法。
      猜你喜欢
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多