IPhone 5cの発表後、誰かがiPhone 5cの色を取得する方法をAPIを知っているかどうか知りたいですか?対応するUIの配色をデバイスの色にロードすると誰もが便利だと確信しています。
UIColorを返すUIDeviceカテゴリのようなものでラップすることを考えています。
更新: @ ColinEおよび@OrtwinGentzは、プライベート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
DeviceColor
とDeviceEnclosureColor
の両方を取得するためのプライベートAPIがあります。 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ビルドではこれを使用しないでください。
デバイスの色(以前は?)は、デバイスのシリアル番号にエンコードされています。まだ正式にリリースされていないテスト用のデバイスはありませんが、解決策は次のようになると思います。
IPhoneSNの一般的な形式は次のとおりです。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をカスタマイズできるようにこの情報だけを知りたい場合は、ユーザーオプションを入力するか、最初の起動時(またはアプリの他の初期の時点)にデバイスの色を選択するように依頼します。ユーザーライフ)
これはあなたを助けるかもしれません...
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"]);
}