webentwicklung-frage-antwort-db.com.de

Zu erkennen IOS Gerätetyp

Ich habe die Lösungen von hier aus gefunden: Gerät (iPhone, iPod Touch) mit iPhone SDK ermitteln

Über den Link wird vorgeschlagen, die Bibliothek https://Gist.github.com/1323251 zu verwenden.

Aber offensichtlich ist die Bibliothek ziemlich veraltet. Ich konnte das iPhone 5, das neue iPad usw. nicht in der Liste finden. 

Weiß jemand, wie ich die vollständige und aktualisierte Liste finden kann? 

Ich danke dir sehr.

10
GMsoF

Hier ist die aktualisierte Version von https://Gist.github.com/1323251 . Ich werde sie auf dem neuesten Stand halten, wenn neue Geräte veröffentlicht werden.

https://github.com/froztbytes/UIDeviceHardware

13
fahrulazmi

sie können iphone, iphone5 und iPad mit der folgenden Bedingung leicht erkennen: -

 if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPhone)
 {
     if ([[UIScreen mainScreen] bounds].size.height == 568.0f)
     {


     }
     else
     {
         //iphone 3.5 inch screen
     }
 }
 else
 {
        //[ipad]
 }

meine Antwort: - Gerätetyp erkennen

30
Nitin Gohel

Das funktioniert gut:

if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) {
    NSLog(@"IPAD");
}else{
     NSLog(@"IPHONE");
}
11
rilar

Hinzufügen zu @Mohammad Kamran Usmani Antwort. Speziellere iPhone-Typen:

@import UIKit;

//Check which iPhone it is
double screenHeight = [[UIScreen mainScreen] bounds].size.height;
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
{
    NSLog(@"All iPads");
} else if (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone)
{
    if(screenHeight == 480) {
        NSLog(@"iPhone 4/4S");
        smallFonts = true;
    } else if (screenHeight == 568) {
        NSLog(@"iPhone 5/5S/SE");
        smallFonts = true;
    } else if (screenHeight == 667) {
        NSLog(@"iPhone 6/6S");
    } else if (screenHeight == 736) {
        NSLog(@"iPhone 6+, 6S+");
    } else {
        NSLog(@"Others");
    }
}
6
Mukund Agarwal

Verwenden Sie den folgenden Code:

#import <sys/utsname.h>

- (NSString *)machineName
{
    struct utsname systemInfo;
    uname(&systemInfo);
    NSString *temp = [NSString stringWithCString:systemInfo.machine
                                        encoding:NSUTF8StringEncoding];

    if ([temp rangeOfString:@"iPod"].location != NSNotFound)
    {
        return @"iPod";
    }

    if ([temp rangeOfString:@"iPad"].location != NSNotFound)
    {
        return @"iPad";
    }

    if ([temp rangeOfString:@"iPhone"].location != NSNotFound)
    {
        return @"iPhone";
    }

    return @"Unknown device";
}
3
amar

Ich bin mit anderen Jungs, die den Code auf GitHub pflegen, also nimm bitte den neuesten Code von dort. Wir fügen ständig neue Geräte in die Liste ein.

Objective-C : GitHub/DeviceUtil

Swift : GitHub/DeviceGuru

#include <sys/types.h>
#include <sys/sysctl.h>

- (NSString*)hardwareDescription {
    NSString *hardware = [self hardwareString];
    if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
    if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
    if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
    if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
    if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
    if ([hardware isEqualToString:@"iPod1,1"]) return @"iPodTouch 1G";
    if ([hardware isEqualToString:@"iPod2,1"]) return @"iPodTouch 2G";
    if ([hardware isEqualToString:@"iPad1,1"]) return @"iPad";
    if ([hardware isEqualToString:@"iPad2,6"]) return @"iPad Mini";
    if ([hardware isEqualToString:@"iPad4,1"]) return @"iPad Air WIFI";
    //there are lots of other strings too, checkout the github repo
    //link is given at the top of this answer

    if ([hardware isEqualToString:@"i386"]) return @"Simulator";
    if ([hardware isEqualToString:@"x86_64"]) return @"Simulator";

    return nil;
}

- (NSString*)hardwareString {
    size_t size = 100;
    char *hw_machine = malloc(size);
    int name[] = {CTL_HW,HW_MACHINE};
    sysctl(name, 2, hw_machine, &size, NULL, 0);
    NSString *hardware = [NSString stringWithUTF8String:hw_machine];
    free(hw_machine);
    return hardware;
}
2

Sie können den folgenden Code verwenden

if(screenSize.width==2048 && screenSize.height==1536)
{
   LetterParams.DeviceType=1;//IPadRetina
}
else if(screenSize.width==2048/2 && screenSize.height==1536/2)
{
   LetterParams.DeviceType=2;//IPad Non-Retina
}
else if(screenSize.width==1136 && screenSize.height==640)
{
   LetterParams.DeviceType=3;//IPhoneRetina
}
else
{
   LetterParams.DeviceType=4;//IPhone & iPod
}
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)  
{
    NSLog(@"All iPads");  
}  
else
{
    else if (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone)
    {
        if( screenHeight > 480 && screenHeight < 667 )
        {
            NSLog(@"iPhone 5/5s/6");
        }
        else if ( screenHeight > 480 && screenHeight < 736 )
        {
            NSLog(@"Other iPhones Resizable");
        }
        else if ( screenHeight > 480 )
        {
            NSLog(@"iPhone 6 +");
        }
        else
        {
            NSLog(@"iPhone 4s and others");
        }
    }

Hier ist eine von mir entwickelte Methode, die sich auf die wichtigsten Geräte für Bildschirmmessfunktionen konzentriert. So können Sie schnell feststellen, was Sie brauchen. Dadurch werden bis zu iPhone 5 und iPod Touches der 5. Generation erkannt.

typedef enum{
   iPadRetina,iPadNoRetina,iPhoneiPod35InchRetina,iPhoneiPod35InchNoRetina,iPhoneiPod4InchRetina}DeviceType;

-(void)yourCustomFunctionThatNeedsToKnowDeviceType
{
    NSLog(@"device type = %i",[self getDeviceType]);

    switch ([self getDeviceType])
    {
        case iPadRetina:
        {
            NSLog(@"This device is one of the following: iPad 3, iPad 4");
            break;
        }
        case iPadNoRetina:
        {
            NSLog(@"This device is one of the following: iPad 1, iPad 2, iPad mini");
            break;
        }
        case iPhoneiPod35InchRetina:
        {
            NSLog(@"This device is one of the following: iPhone 4/4S or iPod Touch 4th Generation");
            break;
        }
        case iPhoneiPod35InchNoRetina:
        {
            NSLog(@"This device is one of the following: iPhone 3G/3GS or iPod Touch 3rd Generation");
            break;
        }
        case iPhoneiPod4InchRetina:
        {
            NSLog(@"This device is one of the following: iPhone 5 or iPod Touch 5th Generation");
            break;
        }
    }
}

-(int)getDeviceType
{
    // Get the ratio of the device's screen (height/width)
    CGFloat screenRatio = [UIScreen mainScreen].bounds.size.height/[UIScreen mainScreen].bounds.size.width;

    // Initialize return value to negative value
    DeviceType type = -1;
    if(screenRatio > 1.5)
    {
        /*
            4.0-Inch Screen
            This implies that the device is either an iPhone 5 or a 5th generation iPod
            Retina display is implicit
         */
        type = iPhoneiPod4InchRetina;
    }
    else
    {
        /*
            Device must be iPad 1/2/3/4/mini or iPhone 4/4S or iPhone 3G/3GS
         */

        // Take a screenshot to determine if the device has retina display or not
        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0.0);
        [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *scaleCheckImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
        {
            /*
                Device must be iPad 1/2/3/4/mini
             */
            if(scaleCheckImage.scale == 1)
            {
                // iPad 1/2/mini (No Retina)
                type = iPadNoRetina;
            }
            else if(scaleCheckImage.scale == 2)
            {
                // iPad 3/4 (Retina)
                type = iPadRetina;
            }
        }
        else
        {
            /*
                Device must be iPhone 4/4S or iPhone 3G/3GS or iPod Touch 3rd Generation or iPod Touch 4th Generation
             */
            if(scaleCheckImage.scale == 1)
            {
                // iPhone 3G/3GS or iPod Touch 3rd Generation (No Retina)
                type = iPhoneiPod35InchNoRetina;
            }
            else if(scaleCheckImage.scale == 2)
            {
                // iPhone 4/4S or iPod Touch 4th Generation (Retina)
                type = iPhoneiPod35InchRetina;
            }
        }
    }
    return type;
}
1
i2097i