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

1

LocalAuthentication フレームワークと関連するすべてのコードを、プリプロセッサ ディレクティブを使用して条件付きでインポートしてみてください。その後、Xcode を介して iOS 7.x シミュレーターとデバイスを実行できるようになります。

于 2015-05-05T15:39:30.833 に答える
1

最初にLocalAuthentification.framework をオプションとしてマークし、 「フレームワークを自動的にリンクする」を NOに 変更してから 、コードでクラスにアクセスする前に簡単なチェックを行いました。

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

私にとってはうまくいきます、それが誰かを助けることを願っています

于 2014-10-30T17:59:03.163 に答える
1

LocalAuthentication.framework は iOS 8.0 から利用できます。[ iOS フレームワーク]

iOS 7 でのクラッシュを回避するには、[Project Targets] -> [Build Phases] -> [Link Binary with Libraries] -> set LocalAuthentication.framework のステータスを [Optional] に設定します。

于 2014-10-17T17:09:33.877 に答える