40

iPhone 5c 发布后,我很好奇是否有人知道如何获取 iPhone 5c 颜色的 API?我相信每个人都会发现将相应的 UI 配色方案加载到设备颜色很方便。

我正在考虑将它包装在 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
4

4 回答 4

13

设备颜色(习惯于?)在设备的序列号中编码。我没有设备可以在尚未正式发布的情况下对其进行测试,但我想解决方案将与此类似:

iPhone SN 的典型格式如下:AABCCDDDEEF

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

[来源]

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


但是,我想指出,我希望没有支持的方法来获取序列号。假设您只想知道这些信息以便您可以自定义您的 UI,我只需输入一个用户选项或要求他们在首次启动时选择其设备的颜色(或应用程序中的其他一些早期点-用户寿命)

于 2013-09-12T16:41:29.447 回答
8

有一个私有 API 可以同时检索DeviceColorDeviceEnclosureColor. 对于 iPhone 5c,有趣的部分是外壳颜色(设备颜色 = 正面颜色始终为 #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 构建中使用它。

于 2013-10-14T08:34:51.280 回答
3

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

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

虽然我自己还没有证实。

于 2013-09-21T10:25:18.967 回答
0

这可能会帮助你...

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 的颜色?

于 2013-10-12T12:40:34.933 回答