2016-12-19 7 views

答えて

3

+ (BOOL) isDeviceOkForSecureEnclave 
{ 

    double OSVersionNumber     = floor(NSFoundationVersionNumber); 
    UIUserInterfaceIdiom deviceType   = [[UIDevice currentDevice] userInterfaceIdiom]; 

    BOOL isOSForSecureEnclave    = OSVersionNumber > NSFoundationVersionNumber_iOS_8_4 ? YES:NO; 
    //iOS 9 and up are ready for SE 


    BOOL isDeviceModelForSecureEnclave = NO; 

    switch (deviceType) { 

     case UIUserInterfaceIdiomPhone: 
      //iPhone 
      isDeviceModelForSecureEnclave = [self isPhoneForSE]; 
      break; 
     case UIUserInterfaceIdiomPad: 
      //iPad 
      isDeviceModelForSecureEnclave = [self isPadForSE]; 

      break; 
     default: 
      isDeviceModelForSecureEnclave = false; 
      break; 
    } 

    return (isOSForSecureEnclave && isDeviceModelForSecureEnclave) ? YES:NO; 
} 


/** 
The arrays are models that we know not having SE in hardware, so if the current device is on the list it means it dosent have SE 
*/ 

+ (BOOL) isPhoneForSE 
{ 
    NSString *thisPlatform = [self platform]; 
    NSArray * oldModels = [NSArray arrayWithObjects: 
          @"x86_64", 
          @"iPhone1,1", 
          @"iPhone1,2", 
          @"iPhone2,1", 
          @"iPhone3,1", 
          @"iPhone3,3", 
          @"iPhone4,1", 
          @"iPhone5,1", 
          @"iPhone5,2", 
          @"iPhone5,3", 
          @"iPhone5,4", nil]; 

    BOOL isInList = [oldModels containsObject: thisPlatform]; 
    return !isInList; 
} 


+ (BOOL) isPadForSE 
{ 
    //iPad Mini 2 is the earliest with SE // "iPad4,4" 
    NSString *thisPlatform = [self platform]; 

    NSArray * oldModels = [NSArray arrayWithObjects: 
          @"x86_64", 
          @"@iPad", 
          @"@iPad1,0", 
          @"@iPad1,1", 
          @"iPad2,1", 
          @"iPad2,2", 
          @"iPad2,3", 
          @"iPad2,4", 
          @"iPad2,5", 
          @"iPad2,6", 
          @"iPad2,7", 
          @"iPad3,1", 
          @"iPad3,2", 
          @"iPad3,3", 
          @"iPad3,4", 
          @"iPad3,5", 
          @"iPad3,6",nil]; 

    BOOL isInList = [oldModels containsObject: thisPlatform]; 

    return !isInList; 

} 


+ (NSString *)platform 
{ 
    size_t size; 
    sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
    char *machine = malloc(size); 
    sysctlbyname("hw.machine", machine, &size, NULL, 0); 
    NSString *platform = [NSString stringWithUTF8String:machine]; 
    free(machine); 

    return platform; 

} 

@end 

が、その後チェック

- (BOOL)canAuthenticateByTouchId { 
if ([LAContext class]) { 
    return [[[LAContext alloc] init] canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil]; 
} 
return YES; 
} 
+0

はい、私はiOSのバージョンを確認する最初のこのまったく同じに扱わタッチIDをチェックしますいずれかのデバイスには、タッチIDまたはサポートされていません。良い試練のために答えを受け入れる。 – Aleem

+0

ありがとうございます。 TouchIDをどうやって確認しましたか? – kragekjaer

+0

更新された回答を確認してください。 – Aleem

関連する問題