如何检测iPhone 5c的颜色?

iPhone 5c发布后,我很好奇,如果有人知道一个API如何获得iPhone 5c的颜色? 我敢肯定,每个人都会发现将相应的UI颜色scheme加载到设备颜色很方便。

我正在考虑包装它像UIDevice类别,这将返回一个UIColor。

更新: @ColinE和@Ortwin Gentz已经指出了私有UIDevice实例方法调用的可用性。

请注意,对于iPhone 5c,您真正需要的是deviceEnclosureColor,因为deviceColor将始终返回#3b3b3c,因为它是正面色彩。

方法签名:

-(id)_deviceInfoForKey:(struct __CFString { }*)arg1 

它的UIDevice类别:

 @interface UIDevice (deviceColour) - (id)_deviceInfoForKey:(struct __CFString { }*)arg1; - (NSString*)deviceColourString_UntilAppleMakesItPublic; - (NSString*)deviceEnclosureColour_UntilAppleMakesItPublic; @end @implementation UIDevice (deviceColour) - (NSString*)deviceColourString_UntilAppleMakesItPublic { return [self _deviceInfoForKey:@"DeviceColor"]; } - (NSString*)deviceEnclosureColour_UntilAppleMakesItPublic { return [self _deviceInfoForKey:@"DeviceEnclosureColor"]; } @end 

有一个私有的API来检索DeviceColorDeviceEnclosureColor 。 在iPhone 5c的情况下,有趣的部分是shell颜色(设备颜色=前端颜色总是#3b3b3c)。

 UIDevice *device = [UIDevice currentDevice]; SEL selector = NSSelectorFromString(@"deviceInfoForKey:"); if (![device respondsToSelector:selector]) { selector = NSSelectorFromString(@"_deviceInfoForKey:"); } if ([device respondsToSelector:selector]) { NSLog(@"DeviceColor: %@ DeviceEnclosureColor: %@", [device performSelector:selector withObject:@"DeviceColor"], [device performSelector:selector withObject:@"DeviceEnclosureColor"]); } 

我已经博客了这个,并提供一个示例应用程序:

http://www.futuretap.com/blog/device-colors/

警告:如上所述,这是一个私人API。 不要在App Store中使用它。

设备颜色(用于?)以设备的序列号编码。 我还没有一个设备可以和他们一起testing还没有正式发布,但是我想这个解决scheme和以下类似:

iPhone SN的典型格式如下:AABCCDDDEEF

AA =工厂和机器ID
B =制造年份(9是2009/2019,0是2010/2020,1是2011等)
CC =生产周(01是B的第一周,11是B的第11周,依此类推)
DDD =唯一标识符
EE =颜色(A4 =黑色)
F =大小(S = 16GB,T = 32GB)

[资源]

这里有更多关于旧技术的信息


不过,我想指出的是,我希望没有获得序列号的方法。 假设您只想知道这些信息,以便您可以自定义您的用户界面,那么我只需要提供一个用户选项或让他们在首次启动时(或者在应用程序中的其他一些早期点)select设备的颜色,用户生活)

Twitter上的一些人引用了以下方法 :

 [[UIDevice currentDevice] _deviceInfoForKey:@"DeviceColor"] 

虽然我自己没有证实。

这可能会帮助你…

 UIDevice *device = [UIDevice currentDevice]; SEL selector = NSSelectorFromString([device.systemVersion hasPrefix:@"7"] ? @"_deviceInfoForKey:" : @"deviceInfoForKey:"); if ([device respondsToSelector:selector]) { NSLog(@"DeviceColor: %@ DeviceEnclosureColor: %@", [device performSelector:selector withObject:@"DeviceColor"], [device performSelector:selector withObject:@"DeviceEnclosureColor"]); } 

参考: 检测iPhone / iPad / iPod touch的颜色?