1

私のアプリケーションでは、使用されているiOSデバイスを見つける必要があります。今私はiossdk5.1で働いています

struct utsname systemInfo;
uname(&systemInfo);
NSString *platform=[NSString stringWithCString:systemInfo.machine
                                      encoding:NSUTF8StringEncoding]; 

上記のコードは、iOS SDK 5.0では完全に機能しますが、iOS5.1では機能しません。iphone 3 / 3G / 4/4sやipad/ipad2などのiOS5.1でデバイスのバージョンを見つけるにはどうすればよいですか。

4

3 に答える 3

4
NSString *device = [[UIDevice currentDevice]model ] ;
NSLog(@"%@",device);

それはあなたにデバイス名を与えます(iPhone、iPad)

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
NSLog(@"%f",version);

それはあなたにiOSバージョンを与えます。デバイス名ではありません。

于 2012-04-11T06:22:41.993 に答える
1

このクラスは、現在のデバイスとそのOSについて多くのことを教えてくれます。おそらく、やUIDeviceのようなPOSIX APIよりも、将来のデバイス/iOSバージョンで有用な情報を返す方が信頼できるでしょう。unamesysctl

ただし、アプリの機能を有効にするかどうかを決定するためにデバイス名を使用しないでください。これにより、新しいデバイスでアプリが失敗し、顧客は不満になります。たとえば、しばらく前に、Retinaディスプレイグラフィックスを有効にするために「iPhone4」という名前のデバイスをテストしていたアプリがありました...これらのアプリは、第4世代のiPodtouchとiPhone4Sが同様のディスプレイを搭載したときにうまく適応しませんでした。

代わりに、必要な機能をテストしてくださいUIDevice画面サイズとフォームファクター(別名「ユーザーインターフェイスイディオム」、iPhone / iPodとiPad)について知っています。位置情報サービスは、デバイスが提供できる位置精度の種類を教えてくれます。AVFoundationは、静止画カメラとビデオカメラのどちらを使用しているか、および提供できる解像度を教えてくれます。一般に、機能に使用しているAPIを調べて、デバイスがその機能をサポートできるかどうかを判断できます。

于 2012-04-11T06:56:09.823 に答える
0
// To decide whether device is iPhone-4 or 3
#include <sys/types.h>
#include <sys/sysctl.h>


@interface UIDevice(Hardware)

- (NSString *) platform;

- (BOOL)hasRetinaDisplay;

- (BOOL)hasCamera;



@end

@implementation UIDevice(Hardware)

- (NSString *) platform{
        int mib[2];
        size_t len;
        char *machine;

        mib[0] = CTL_HW;
        mib[1] = HW_MACHINE;
        sysctl(mib, 2, NULL, &len, NULL, 0);
        machine = malloc(len);
        sysctl(mib, 2, machine, &len, NULL, 0);

        NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
        free(machine);
        return platform;
}



- (BOOL)hasRetinaDisplay {
          NSString *platform = [self platform];
          BOOL ret = YES;
          if ([platform isEqualToString:@"iPhone1,1"]) {
               ret = NO;
          }
          else
               if ([platform isEqualToString:@"iPhone1,2"])    ret = NO;
          else 
               if ([platform isEqualToString:@"iPhone2,1"])    ret = NO;
          else 
               if ([platform isEqualToString:@"iPod1,1"])      ret = NO;
          else
               if ([platform isEqualToString:@"iPod2,1"])      ret = NO;
          else
               if ([platform isEqualToString:@"iPod3,1"])      ret = NO;
       return ret;
}

- (BOOL)hasMultitasking {
       if ([self respondsToSelector:@selector(isMultitaskingSupported)]) {
            return [self isMultitaskingSupported];
      }
      return NO;


}

- (BOOL)hasCamera {
       BOOL ret = NO;
      // check camera availability
      return ret;
}

@end
于 2012-04-11T07:04:34.920 に答える