web-dev-qa-db-ja.com

iPhone 5cの色を検出する方法は?

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
40
ambientlight

DeviceColorDeviceEnclosureColorの両方を取得するためのプライベート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ビルドではこれを使用しないでください。

8
Ortwin Gentz

デバイスの色(以前は?)は、デバイスのシリアル番号にエンコードされています。まだ正式にリリースされていないテスト用のデバイスはありませんが、解決策は次のようになると思います。

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をカスタマイズできるようにこの情報だけを知りたい場合は、ユーザーオプションを入力するか、最初の起動時(またはアプリの他の初期の時点)にデバイスの色を選択するように依頼します。ユーザーライフ)

13
James Webster

Twitterの多くの人が 次の方法を引用

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

自分では確認していませんが。

3
ColinE

これはあなたを助けるかもしれません...

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の色を検出していますか?

0
Krupal Ghorpade