2013-09-13

Apple流の新機能の隠し方:(BOOL)isYoMamaWearsCombatBootsSupported;

How Apple hides new functionality in iOS: isYoMamaWearsCombatBootsActive | Hacker News

Hacker Newsで、Apple流の新機能を隠す方法の話題で持ちきりだ。開発者が使う、公開しなければならないヘッダーファイルの宣言にある関数名から機能が推測されてしまう問題の対処方法として、まずヘンテコな名前をつけておき、後で実際の関数に置換するという斬新な方法が発覚した。

iOS 7 GM · 6ccf9c4 · JaviSoto/iOS7-Runtime-Headers · GitHub

これまでのところ見つかっている名前は、以下の通り。

(BOOL)isYoMamaWearsCombatBootsSupported;
(BOOL)isYoMamaWearsCombatBootsActive;
(void)setYoMamaWearsCombatBootsAutomaticallyWhenAvailable:(BOOL)arg1;
(BOOL)yoMamaWearsCombatBootsAutomaticallyWhenAvailable;
(BOOL)isYoMamaWearsFancyGlasses;
(void)setYoMamaWearsFancyGlassesDetectionEnabled:(BOOL)arg1;
(BOOL)isYoMamaWearsFancyGlassesDetectionEnabled;
(BOOL)isYoMamaWearsFancyGlassesDetectionSupported;

このようなヘンテコな名前と入れ替わりに追加された名前を追うことで、何が何に対応していたのか知ることができる。

どうやら、YoMamaWearsCombatBoots(ママさん軍靴履いちゃってる)系の代わりには、以下のような関数が追加されているようだ。

(BOOL)isSISSupported;
(BOOL)isStillImageStabilizationActive;
(void)setAutomaticallyEnablesStillImageStabilizationWhenAvailable:(BOOL)arg1;
(BOOL)automaticallyEnablesStillImageStabilizationWhenAvailable;

つまりママさん軍靴履いちゃってるというのは、Still Image Stabilization関連の機能のようだ。それにしても、yoMamaWearsCombatBootsAutomaticallyWhenAvailable(ママさん軍靴あるとき自動的に履く)というのは傑作だ。

また、一連のYoMamaWearsFancyGlasses(ママさんイカしたグラサンかけてる)系の名前の削除と入れ替わりに追加された名前を追うと、いかのようなものが見つかる。

(BOOL)isHighDynamicRangeScene;
(void)setHighDynamicRangeSceneDetectionEnabled:(BOOL)arg1;
(BOOL)isHighDynamicRangeSceneDetectionEnabled;
(BOOL)isHighDynamicRangeSceneDetectionSupported;

ママさんイカしたグラサンかけてるはHDR関連の新機能のようだ。

Appleは、実ハードウェアを発表するまで、新機能についてはかなり秘密主義であり、iOSのベータ版のバイナリを公開するときも、実ハードウェアの新機能が関数名から漏れないように、このような偽装を行うのだという。

また、HNのコメントによると、BeOSには、以下のようなイースターエッグ的な関数がある。

BeOS

int32 is_computer_on(void)

コンピューター(の電源)がオンなら1を返す。もし、コンピューターがオンではない場合、この関数によって返される値は未定義である。

double is_computer_on_fire(void)

もし、コンピューターが現在発火中であるならば、マザーボードの温度を返す。もし、コンピューターが燃えていなければ、この関数は何らかの他の値を返す。

Androidには、以下のようなイースターエッグ関数がある。

UserManager | Android Developers

public boolean isUserAGoat ()

この呼び出しをしたユーザーがテレポートできるかどうかを判断するのに使う。
戻り値
この呼び出しをしたユーザーがヤギであるかどうか。

その他のAndroidのイースターエッグ関数

log.wtf
AdapterViewFlipper.fyiWillBeAdvancedByHostKThx

これもまたAndroidだが、なぜか地球以外の惑星や恒星、人工物の重力加速度定数が宣言されている。

SensorManager | Android Developers

地球外の惑星でAndroidを使うのだろうか。ISSにAndroid機はあるかもしれないが。月や火星はまだしも、金星とか木星まであるのは不思議だ。しかも太陽の重力加速度定数まで存在する。もっとも解せないのは、デススターの重力加速度定数が定義されていることだ。その値は、3.5303614E-7と、とても小さい。

2 comments:

Anonymous said...

こうですか! わかりません><
http://blogs.msdn.com/b/oldnewthing/archive/2003/10/15/55296.aspx

江添亮 said...

それは有名ですね。