Farbe des iPhone / iPad / iPod touch erkennen?

72

Gibt es eine Möglichkeit oder einen Hack, um festzustellen, auf welcher Farbe (schwarz / weiß) iPhone, iPad oder iPod touch das iOS installiert ist?

Ich möchte bei Schwarz- oder Weißgeräten entsprechende UI-Skins laden.

Totocaster
quelle
Keine gute Idee. Im dunklen Modus können Benutzer diese Dinge auswählen
AlexH
@AlexH Als ich fragte, sah ich fast 8 Jahre später keinen dunklen Modus. :)
Totocaster
Es hat sich vieles verändert. Arbeiten Sie noch an einem Projekt?
AlexH

Antworten:

39

Es gibt eine private API, um sowohl die DeviceColorals auch die abzurufen DeviceEnclosureColor.

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"]);
}

Ich habe darüber gebloggt und eine Beispiel-App bereitgestellt:

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

Warnung: Wie bereits erwähnt, handelt es sich um eine private API. Verwenden Sie dies nicht in App Store-Builds.

Ortwin Gentz
quelle
1
Schöner Fund! Ein kleiner Vorschlag: Sie sollten verwenden [NSObject -respondsToSelector:]. Ihre aktuelle Logik funktioniert möglicherweise nicht richtig, wenn iOS 8 veröffentlicht wird.
Aaron Brager
Dies würde immer noch das ältere deviceInfoForKey:unter iOS 8 verwenden. Ich würde nur beide Selektoren überprüfen und sehen, auf welche es reagiert.
Aaron Brager
1
@uchuugaka Ich habe die Tatsache nicht versteckt, dass es privat ist. Aber das ist der einzige Weg, um es abzurufen. Es gibt jedoch einige Anwendungsfälle für private APIs - beispielsweise interne Unternehmensanwendungen. Beschweren Sie sich bei Apple (Sie können openradar.appspot.com/15209345 betrügen ), anstatt meine Antwort herunterzustimmen!
Ortwin Gentz
Aaron, du hast recht. Ich habe den Code so verbessert, dass er iOS-Version-unabhängig ist.
Ortwin Gentz
Ich habe abgelehnt, weil Sie die Auswirkungen der Verwendung privater APIs nicht genannt haben, als Sie die Verwendung privater APIs vorgeschlagen haben.
Uchuugaka
20

Die Antwort auf die Frage lautet NEIN (ab sofort) und ich persönlich denke nicht, dass es viel wert ist, denn was ist, wenn der Endbenutzer einen Skin oder ein zusätzliches Gehäuse für sein iPhone verwendet?

Ich würde vorschlagen, den Benutzer zunächst zu fragen: "Hey, welche Farbe hat Ihr Telefon?" und dann entsprechend tun.


Darüber hinaus hat mir eine Untersuchung diese Informationen geliefert. Ich bin mir nicht sicher, ob sie WAHR sind oder ob sie Ihnen helfen werden.

Die Seriennummer ist der Schlüssel :)

Wenn aabccdddeefdie Seriennummer des iPhone 4 ist, steht sie eefür die Farbe (A4 = schwarz). Ich hoffe, einige von Ihnen hier überprüfen diese Informationen mit Ihren, um festzustellen, ob dies wahr ist.

COD3BOY
quelle
Ich habe ein schwarzes iPhone 4S und ein weißes ... Die vorletzten und drittletzten Ziffern von beiden sind "TF" ... (Seriennummern: "C39GJ DTFC" und "C39GK DTF9"). Wir müssen weiter suchen.
Sanjay Chaudhry
1
Darüber hinaus kann man die Seriennummer nicht programmgesteuert erkennen (zumindest unter Verwendung der veröffentlichten APIs). Der Seriennummernansatz ist also DoA.
Sanjay Chaudhry
Vielen Dank für die Antworten, ich weiß das zu schätzen. Mit "Hack" meinte ich so etwas wie Seriennummernprüfung oder ähnliches. Mir ist klar, dass das [IUDevice deviceColor]aktuelle SDK nichts enthält . Ich recherchiere selbst und halte Sie auf dem Laufenden.
Totocaster
11

Nur meine 2 Cent wert - wenn jemand nach den Farben des iPhone 5c sucht, werden die folgenden Farben von der Apple-Website ausgewählt.

Hoffe es ist für jedermann von Nutzen :-)

iPhone 5c Farben:

Green
R   179
G   243
B   142
HEX #B3F38E

Blue
R   123
G   195
B   252
HEX #7BC3FC

Yellow
R   255
G   243
B   141
HEX #FFF38D

Red
R   252
G   132
B   142
HEX #FF848E

White
R   239
G   239
B   239
HEX #EFEFEF
jwknz
quelle
8

Laut Informationen, die im Internet verteilt sind, ist die Farbe des Geräts in der Seriennummer verschlüsselt. Der Blog von iFixit zeigt an, dass die dritt- und vorletzten Positionen die Informationen enthalten: Zeigt beixxxxxxxxCCx einem iPhone 4 A4Schwarz an. Niemand scheint den Code für ein weißes iPhone 4 zu haben, was seltsam ist. Ein Forumbeitrag weist darauf hin, dass dies der Fall sein könnteDZ . Jeder scheint hier nur die Informationen aller anderen zu papageien.

Auf einer anderen Website, mydigitallife.com , finden Sie einen Artikel mit den Farbcodes für verschiedene ältere Modelle. In einigen Fällen müssen die drei Positionen zusammen gelesen werden, um die Farbe zu bestimmen. Laut dieser Website befinden sich alle iPhone 3Gs-Modelle 3Nin der Farbcode-Position. 3NPzeigt "Black 16GB 3Gs" und 3NQ"White 16GB 3Gs" an. Das ursprüngliche (2G) iPhone verwendet auch alle drei Positionen, um die Größe anzuzeigen (es gab keine Farboptionen).

Hier auf SO gibt es bereits eine Reihe von Fragen, mit denen Sie die Seriennummer des Geräts ermitteln können.

jscs
quelle
7

Zu Debugging-Zwecken habe ich eine umfassendere Liste möglicher deviceInfoForKey:Schlüssel zusammengestellt.

Interessante Schlüssel zu beachten (für diese Frage) sind DeviceRGBColor DeviceEnclosureRGBColor. Die Werte scheinen eine Ganzzahl zu sein, die den RGB-Wert im Formular darstellt 0x00rrggbb.

Hier sind als Referenz alle Schlüssel, die ich gefunden habe:

ActiveWirelessTechnology        
AirplaneMode        
assistant        
BasebandCertId        
BasebandChipId        
BasebandPostponementStatus        
BasebandStatus        
BatteryCurrentCapacity        
BatteryIsCharging        
BluetoothAddress        
BoardId        
BootNonce        
BuildVersion        
CertificateProductionStatus        
CertificateSecurityMode        
ChipID        
CompassCalibrationDictionary        
CPUArchitecture        
DeviceClass        
DeviceColor        
DeviceEnclosureColor        
DeviceEnclosureRGBColor        
DeviceName        
DeviceRGBColor        
DeviceSupportsFaceTime        
DeviceVariant        
DeviceVariantGuess        
DiagData        
dictation        
DiskUsage        
EffectiveProductionStatus        
EffectiveProductionStatusAp        
EffectiveProductionStatusSEP        
EffectiveSecurityMode        
EffectiveSecurityModeAp        
EffectiveSecurityModeSEP        
FirmwarePreflightInfo        
FirmwareVersion        
FrontFacingCameraHFRCapability        
HardwarePlatform        
HasSEP        
HWModelStr        
Image4Supported        
InternalBuild        
InverseDeviceID        
ipad        
MixAndMatchPrevention        
MLBSerialNumber        
MobileSubscriberCountryCode        
MobileSubscriberNetworkCode        
ModelNumber        
PartitionType        
PasswordProtected        
ProductName        
ProductType        
ProductVersion        
ProximitySensorCalibrationDictionary        
RearFacingCameraHFRCapability        
RegionCode        
RegionInfo        
SDIOManufacturerTuple        
SDIOProductInfo        
SerialNumber        
SIMTrayStatus        
SoftwareBehavior        
SoftwareBundleVersion        
SupportedDeviceFamilies        
SupportedKeyboards        
telephony        
UniqueChipID        
UniqueDeviceID        
UserAssignedDeviceName        
wifi        
WifiVendor        
jjrscott
quelle
Dies sind alles private APIs
Priyal
Ja, sie sind alle privat. Wie in der akzeptierten Antwort angegeben, deviceInfoForKey:ist privat. Dafür sind auch alle diese Schlüssel.
jjrscott
6

Wie andere angemerkt haben, gibt es keinen offiziellen Weg, um diese Informationen zu erhalten. Apple klar weiß (Blick in iTunes , wenn Sie synchronisieren), so dass sie konnte es zur Verfügung stellen. Könnte es wert sein, ein Radar zu erheben .

Stephen Darlington
quelle