是否有方法确定正在运行应用程序的设备。如果可能的话,我想区分iPhone和iPod Touch。
当前回答
if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) {
//Device is ipad
}else{
//Device is iphone
}
其他回答
NSString *deviceType = [UIDevice currentDevice].model;
回答在Swift 3,
struct DeviceInformation {
// UIDevice.current.model's value is "iPhone" or "iPad",which does not include details; the following "model" is detailed, such as, iPhone7,1 is actually iPhone 6 plus
static let model: String = {
var size = 0
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = [CChar](repeating: 0, count: Int(size))
sysctlbyname("hw.machine", &machine, &size, nil, 0)
return String(cString: machine)
}()
static let uuid = UIDevice.current.identifierForVendor?.uuidString ?? ""
static let idForAdService = ASIdentifierManager.shared().advertisingIdentifier.uuidString
static func diviceTypeReadableName() -> String {
switch model {
case "iPhone1,1": return "iPhone 1G"
case "iPhone1,2": return "iPhone 3G"
case "iPhone2,1": return "iPhone 3GS"
case "iPhone3,1": return "iPhone 4"
case "iPhone3,3": return "iPhone 4 (Verizon)"
case "iPhone4,1": return "iPhone 4S"
case "iPhone5,1": return "iPhone 5 (GSM)"
case "iPhone5,2": return "iPhone 5 (GSM+CDMA)"
case "iPhone5,3": return "iPhone 5c (GSM)"
case "iPhone5,4": return "iPhone 5c (GSM+CDMA)"
case "iPhone6,1": return "iPhone 5s (GSM)"
case "iPhone6,2": return "iPhone 5s (GSM+CDMA)"
case "iPhone7,2": return "iPhone 6"
case "iPhone7,1": return "iPhone 6 Plus"
case "iPhone8,1": return "iPhone 6s"
case "iPhone8,2": return "iPhone 6s Plus"
case "iPhone8,4": return "iPhone SE"
case "iPhone9,1": return "iPhone 7"
case "iPhone9,3": return "iPhone 7"
case "iPhone9,2": return "iPhone 7 Plus"
case "iPhone9,4": return "iPhone 7 Plus"
case "iPod1,1": return "iPod Touch 1G"
case "iPod2,1": return "iPod Touch 2G"
case "iPod3,1": return "iPod Touch 3G"
case "iPod4,1": return "iPod Touch 4G"
case "iPod5,1": return "iPod Touch 5G"
case "iPod7,1": return "iPod Touch 6G"
case "iPad1,1": return "iPad 1G"
case "iPad2,1": return "iPad 2 (Wi-Fi)"
case "iPad2,2": return "iPad 2 (GSM)"
case "iPad2,3": return "iPad 2 (CDMA)"
case "iPad2,4": return "iPad 2 (Wi-Fi)"
case "iPad2,5": return "iPad Mini (Wi-Fi)"
case "iPad2,6": return "iPad Mini (GSM)"
case "iPad2,7": return "iPad Mini (GSM+CDMA)"
case "iPad3,1": return "iPad 3 (Wi-Fi)"
case "iPad3,2": return "iPad 3 (GSM+CDMA)"
case "iPad3,3": return "iPad 3 (GSM)"
case "iPad3,4": return "iPad 4 (Wi-Fi)"
case "iPad3,5": return "iPad 4 (GSM)"
case "iPad3,6": return "iPad 4 (GSM+CDMA)"
case "iPad4,1": return "iPad Air (Wi-Fi)"
case "iPad4,2": return "iPad Air (Cellular)"
case "iPad4,3": return "iPad Air (China)"
case "iPad4,4": return "iPad Mini 2G (Wi-Fi)"
case "iPad4,5": return "iPad Mini 2G (Cellular)"
case "iPad4,6": return "iPad Mini 2G (China)"
case "iPad4,7": return "iPad Mini 3 (Wi-Fi)"
case "iPad4,8": return "iPad Mini 3 (Cellular)"
case "iPad4,9": return "iPad Mini 3 (China)"
case "iPad5,1": return "iPad Mini 4 (Wi-Fi)"
case "iPad5,2": return "iPad Mini 4 (Cellular)"
case "iPad5,3": return "iPad Air 2 (Wi-Fi)"
case "iPad5,4": return "iPad Air 2 (Cellular)"
case "iPad6,3": return "iPad Pro 9.7' (Wi-Fi)"
case "iPad6,4": return "iPad Pro 9.7' (Cellular)"
case "iPad6,7": return "iPad Pro 12.9' (Wi-Fi)"
case "iPad6,8": return "iPad Pro 12.9' (Cellular)"
case "AppleTV2,1": return "Apple TV 2G"
case "AppleTV3,1": return "Apple TV 3"
case "AppleTV3,2": return "Apple TV 3 (2013)"
case "AppleTV5,3": return "Apple TV 4"
case "Watch1,1": return "Apple Watch Series 1 (38mm, S1)"
case "Watch1,2": return "Apple Watch Series 1 (42mm, S1)"
case "Watch2,6": return "Apple Watch Series 1 (38mm, S1P)"
case "Watch2,7": return "Apple Watch Series 1 (42mm, S1P)"
case "Watch2,3": return "Apple Watch Series 2 (38mm, S2)"
case "Watch2,4": return "Apple Watch Series 2 (42mm, S2)"
case "i386": return "Simulator"
case "x86_64": return "Simulator"
default:
return ""
}
}
}
我在我的应用程序中使用这个。截至2012年12月。
- (NSString *) platformString {
// Gets a string with the device model
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
free(machine);
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch (1 Gen)";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch (2 Gen)";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch (3 Gen)";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch (4 Gen)";
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch (5 Gen)";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad";
if ([platform isEqualToString:@"iPad1,2"]) return @"iPad 3G";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)";
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini";
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)";
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)";
if ([platform isEqualToString:@"i386"]) return @"Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"Simulator";
return platform;
}
if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) {
//Device is ipad
}else{
//Device is iphone
}
基于以上非常好的答案,以下是我想到的。这与@Rodrigo的回答非常相似,但解决了@Oliver对该回答的评论所关注的问题。这还提供了在输出字符串中包含模型字符串的选项。
+ (NSString *) deviceModel {
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *model = malloc(size);
sysctlbyname("hw.machine", model, &size, NULL, 0);
NSString *deviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
free(model);
return deviceModel;
}
+ (NSString *) deviceName {
NSString *deviceModel = [DeviceGateway deviceModel];
if ([deviceModel isEqual:@"i386"]) return @"Simulator"; //iPhone Simulator
if ([deviceModel isEqual:@"iPhone1,1"]) return @"iPhone1G"; //iPhone 1G
if ([deviceModel isEqual:@"iPhone1,2"]) return @"iPhone3G"; //iPhone 3G
if ([deviceModel isEqual:@"iPhone2,1"]) return @"iPhone3GS"; //iPhone 3GS
if ([deviceModel isEqual:@"iPhone3,1"]) return @"iPhone4"; //iPhone 4 - AT&T
if ([deviceModel isEqual:@"iPhone3,2"]) return @"iPhone4"; //iPhone 4 - Other carrier
if ([deviceModel isEqual:@"iPhone3,3"]) return @"iPhone4"; //iPhone 4 - Other carrier
if ([deviceModel isEqual:@"iPhone4,1"]) return @"iPhone4S"; //iPhone 4S
if ([deviceModel isEqual:@"iPod1,1"]) return @"iPod1stGen"; //iPod Touch 1G
if ([deviceModel isEqual:@"iPod2,1"]) return @"iPod2ndGen"; //iPod Touch 2G
if ([deviceModel isEqual:@"iPod3,1"]) return @"iPod3rdGen"; //iPod Touch 3G
if ([deviceModel isEqual:@"iPod4,1"]) return @"iPod4thGen"; //iPod Touch 4G
if ([deviceModel isEqual:@"iPad1,1"]) return @"iPadWiFi"; //iPad Wifi
if ([deviceModel isEqual:@"iPad1,2"]) return @"iPad3G"; //iPad 3G
if ([deviceModel isEqual:@"iPad2,1"]) return @"iPad2"; //iPad 2 (WiFi)
if ([deviceModel isEqual:@"iPad2,2"]) return @"iPad2"; //iPad 2 (GSM)
if ([deviceModel isEqual:@"iPad2,3"]) return @"iPad2"; //iPad 2 (CDMA)
NSString *aux = [[deviceModel componentsSeparatedByString:@","] objectAtIndex:0];
//If a newer version exists
if ([aux rangeOfString:@"iPhone"].location != NSNotFound) {
int version = [[aux stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] intValue];
if (version == 3) return @"iPhone4";
if (version == 4) return @"iPhone4s";
return @"Newer iPhone";
}
if ([aux rangeOfString:@"iPod"].location != NSNotFound) {
int version = [[aux stringByReplacingOccurrencesOfString:@"iPod" withString:@""] intValue];
if (version == 4) return @"iPod4thGen";
return @"Newer iPod";
}
if ([aux rangeOfString:@"iPad"].location != NSNotFound) {
int version = [[aux stringByReplacingOccurrencesOfString:@"iPad" withString:@""] intValue];
if (version == 1) return @"iPad3G";
if (version == 2) return @"iPad2";
return @"Newer iPad";
}
//If none was found, send the original string
return deviceModel;
}
+ (NSString *) deviceNameWithDeviceModel:(BOOL)shouldIncludeDeviceModel {
if (shouldIncludeDeviceModel) {
return [NSString stringWithFormat:@"%@ (%@)", [DeviceGateway deviceName], [DeviceGateway deviceModel]];
}
return [DeviceGateway deviceName];
}
推荐文章
- Xcode构建失败“架构x86_64未定义的符号”
- 如何使用Xcode创建。ipa文件?
- 动态改变UILabel的字体大小
- registerForRemoteNotificationTypes: iOS 8.0及以上版本不支持
- Xcode 4 -在新的Macintosh安装上的配置文件上“没有找到有效的签名标识”错误
- 新的自动引用计数机制是如何工作的?
- 如何测试对象在Objective-C中的类?
- 在iPhone上确定用户是否启用了推送通知
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?
- 从Cocoa应用程序执行一个终端命令
- 错误ITMS-9000:“冗余二进制文件上传。火车1.0版本已经有一个二进制版本上传。
- Swift -转换为绝对值
- Swift编译器错误:“框架模块内的非模块化头”
- 从父iOS访问容器视图控制器
- 自定义dealloc和ARC (Objective-C)