如何以编程方式确定 iPhone X Simulator?

-1 xcode objective-c ios iphone-x

我正在尝试为 iPhone X 调整我的应用程序的大小,但遇到了问题。目前我像这样定义屏幕尺寸:

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
Run Code Online (Sandbox Code Playgroud)

并根据电话类型进行约束。(是的,我知道不是最佳的,但它是我所做的)

当您使用 iPhone X 模拟器时,出于某种原因,它会像 iPhone 6 一样读取屏幕高度和宽度。

然后我搜索了 stack overflox 并发现了这个: 如何在 iOS 上获取设备品牌和型号?

唯一的问题是,当您在 iPhone X 模拟器上运行时,它返回 x86-64 而不是设备类型!

我显然没有 iPhone X,所以我如何检测这是 iPhone X 模拟器而不是 iPhone 6(基于屏幕尺寸),以便我可以对这款新手机进行适当的限制!

谢谢你们!

Pat*_*det 5

    func modelIdentifier() -> String {
    if let simulatorModelIdentifier = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] { return simulatorModelIdentifier }
    var sysinfo = utsname()
    uname(&sysinfo) // ignore return value
    return String(bytes: Data(bytes: &sysinfo.machine, count: Int(_SYS_NAMELEN)), encoding: .ascii)!.trimmingCharacters(in: .controlCharacters)
}
Run Code Online (Sandbox Code Playgroud)

这里

目标-c:

- (NSString *)modelIdentifier {
NSString *simulatorModelIdentifier = [NSProcessInfo processInfo].environment[@"SIMULATOR_MODEL_IDENTIFIER"];
NSLog(@"%@",simulatorModelIdentifier);
if (simulatorModelIdentifier) {
    return simulatorModelIdentifier;
}
struct utsname sysInfo;
uname(&sysInfo);

return [NSString stringWithCString:sysInfo.machine encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

}

不要忘记:

#import <sys/utsname.h>
Run Code Online (Sandbox Code Playgroud)

使用:(以 viewDidLoad 为例):

NSString *model = [self modelIdentifier];
NSLog(@"Device: %@", model);
Run Code Online (Sandbox Code Playgroud)

如果型号为 iPhone10,3,则为 iPhone X。