diff options
Diffstat (limited to 'platform/ios/src/UIDevice+MGLAdditions.m')
-rw-r--r-- | platform/ios/src/UIDevice+MGLAdditions.m | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/platform/ios/src/UIDevice+MGLAdditions.m b/platform/ios/src/UIDevice+MGLAdditions.m new file mode 100644 index 0000000000..e9da77adda --- /dev/null +++ b/platform/ios/src/UIDevice+MGLAdditions.m @@ -0,0 +1,51 @@ +#import "UIDevice+MGLAdditions.h" +#include <sys/sysctl.h> + +@implementation UIDevice (MGLAdditions) + +- (NSString *)modelString { + char *typeSpecifier = "hw.machine"; + + size_t size; + sysctlbyname(typeSpecifier, NULL, &size, NULL, 0); + + char *answer = malloc(size); + sysctlbyname(typeSpecifier, answer, &size, NULL, 0); + + NSString *results = [NSString stringWithCString:answer encoding:NSUTF8StringEncoding]; + + free(answer); + return results; +} + +- (BOOL)mgl_isLegacyDevice { + // This is a list of supported devices that cannot maintain a reasonable frame + // rate under typical load. For brevity, unsupported devices are not included. + NSSet *blacklist = [NSSet setWithObjects: + @"iPhone4", // iPhone 4s + @"iPhone5", // iPhone 5, 5c + @"iPhone6", // iPhone 5s + + @"iPad2", // iPad 2, Mini + @"iPad3", // iPad 3 + @"iPad4", // iPad Air, Mini 2, Mini 3 + + @"iPod5", // iPod Touch 5 + + nil + ]; + + NSString *model = [self modelString]; + + for (NSString *blacklistedModel in blacklist) { + if ([model hasPrefix:[blacklistedModel stringByAppendingString:@","]]) { + return YES; + } + } + + // TODO: Also handle simulator using something like `ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"]`. + + return NO; +} + +@end |