Development」カテゴリーアーカイブ

MoMuでオーディオ処理

iOSでのオーディオ処理を担うCore Audioは準OS Xクラスの充実ぶりで優秀なんだけど、それなりに面倒な設定が沢山ある。そこでちょっとは楽ができそうなのがMoMu: A Mobile Music Toolkit。これはスタンフォード大学のCCRMAがSmuleの協力を得て開発し、公開しているモバイル・デバイス向けのライブラリ。

CCRMAは長年コンピュータ音楽の一翼を担ってきた研究所だし、SmuleはOcarinaなどのiOSアプリで有名な、資金調達もガンガンやってるアクティブなベンチャー企業。この2つがタグを組んだライブラリだから期待が高まる。ちなみに、CCRMAの有名な音響合成ライブラリSTK (Synthesize Toolkit) もMoMuから利用できる(とは言え…)。

さて、MoMuはオーディオ処理だけでなく、図のようにグラフィックス、マルチ・タッチ、加速度センサー、位置情報、コンパスなどの機能も提供している。これで結構なことができそうと思う人はいいんだけど、MoMuはC++インターフェースなのが個人的には難あり。そこで、MoMuのオーディオ処理だけを活用させていただくObjective-C++で参ります。以下、手順。

(1) プロジェクトにMoMuから以下のファイルを追加。
   mo_audio.h
   mo_audio.mm
   mo_def.h

(2) ターゲットに以下のフレームワークを追加。
   AudioToolbox.framework

(3) MoMuを利用するクラス(例えば〜ViewController)のソース・ファイルの拡張子を .m から .mm に変更。

(4) ソースコード(例えば〜ViewController.mm)で、ヘッダをインポートして定数を定義。

#import "mo_audio.h"

#define SRATE         44100
#define FRAMESIZE     128
#define NUMCHANNELS   2

(5) 適切なメソッド(例えばviewDidLoad)でオーディオ処理を初期化し、処理の開始を記述。

MoAudio::init(SRATE, FRAMESIZE, NUMCHANNELS );
MoAudio::start(audioCallback, nil);

(6) オーディオ処理のコールバック関数を記述。これはC言語関数なので@implementationより前(または@endより後)に記述すること。

void audioCallback(Float32 *buffer, UInt32 framesize, void *userData)
{
}

以上でMoMuが利用できる。シミュレータでも実機でも動作するので、プロジェクトを実行して、グワ〜〜ンとかビィイイ〜とか爆音が響き渡れば成功。そうならない場合は、スピーカーのボリュームが下がっているか、マイクが無効になっているか、処理の記述が間違っているか、のどれかだろうね。

爆音大会になる理由は、MoMuはマイク入力をコールバック関数のbufferに渡し、コールバック関数が終わった時点のbufferをスピーカーから出力するから。つまり、コールバック関数に何も記述しないと、マイク入力がそのままスピーカー出力され、フィードバックが起こってハウリングするというワケ。

ハウリングしないように無音にするには、bufferの内容をすべて0にすれば良い。サイレンス音響合成ってのも、なんだかトキめく(?)が、コールバック関数の中身を次のように記述する。

Float32 *data = buffer;
for (int i=0; i<framesize; i++)
{
	*data++ = 0.0;	// 左チャンネル
	*data++ = 0.0;	// 右チャンネル
}

bufferはFloat32型の配列で、その要素数はframesizeで与えられるが、実際にはチャンネル数だけインターリーブしている。例えば、2チャンネル(ステレオ)なら、最初の要素が左チャンネルの1番目のデータ、次の要素は右チャンネルの1番目のデータ、その次の要素は左チャンネルの2番目のデータ…といった具合。データの値の範囲は-1.0から1.0まで。さらに、startの2番目のパラメータがコールバック関数のuserDataに渡される(ここではnilで何も渡していない)。

ここまで理解できれば、後は勝手にイヂることができるね。ナンチャッテ音響処理をいくつか書いてみよう。繰り返します、ナンチャッテ、です。

まず、ホワイトノイズ。

Float32 *data = buffer;
for (int i=0; i<framesize; i++)
{
	Float32 noise = (Float32)rand() / (Float32)RAND_MAX;
	*data++ = noise;	// 左チャンネル
	*data++ = noise;	// 右チャンネル
}

次で、サイン波。

Float32 *data = buffer;
Float32 frequency = 440.0;
Float32 phaseDelta = 2.0 * M_PI * frequency / SRATE;
static Float32 phase;
for (int i=0; i<framesize; i++)
{
	phase = phase + phaseDelta;
	Float32 value = sin(phase);
	*data++ = value;	// 左チャンネル
	*data++ = value;	// 右チャンネル
}

発展させて、マイク入力にトレモロ。

Float32 *data = buffer;
Float32 frequency = 8.0;
Float32 phaseDelta = 2.0 * M_PI * frequency / SRATE;
static Float32 phase;
for (int i=0; i<framesize; i++)
{
	phase = phase + phaseDelta;
	Float32 value = sin(phase) * 0.5 + 0.5;
	*data++ = *data * value;	// 左チャンネル
	*data++ = *data * value;	// 右チャンネル
}

最後に、サンプリング(1秒録音1秒再生の繰り返し)。

Float32 *data = buffer;
static Float32	samples[SRATE];
static long index = 0;
static bool isSampling = YES;
for (int i=0; i<framesize; i++)
{
	if (isSampling)
	{
		samples[index] = *data;
		*data++ = 0.0;	// 左チャンネル
		*data++ = 0.0;	// 右チャンネル
	}
	else
	{
		*data++ = samples[index];	// 左チャンネル
		*data++ = samples[index];	// 右チャンネル
	}
	
	if (++index >= SRATE)
	{
		index = 0;
		isSampling = !isSampling;
	}
}

さらにイロイロしたい人はMusic DSP Code Archiveあたりを参考に。

はい、おしまい。

【追記】諸般の事情(笑)により、サイン波とトレモロのコードを変更しました。また、演算精度に少々問題がある箇所があります。意図的、または、ナンチャッテです。

iOSでVVOSC

OSC (Open Sound Control) は伝統的(笑)にOSC-Kitを使ってたけど、これは本家でも古いと言われるコードなので、最近はVVOSCを使うことが多い。このVVOSCは、vvopensourceなるオープン・ソース・フレームワークの一部で、Objective-Cインターフェースでキレイにデザインされてて、機能も申し分ない。サンプルとして提供されているOSCTestAppを見れば、何をサポートしているか一目瞭然。デベロッパでなくてもOSCの送受信チェックに便利だから、Downloadsからビルド済みのアプリをダウンロードね。

ただし、VVOSCはOS Xがメイン・ターゲットらしく、サポートされているとは言え、iOSではイマイチ。これまで何とか修正していたけど、iOS 5 & Xcode 4.2になって再びビルドが通らない。そこで、本来推奨されているスタティック・ライブラリではなく、ソースをプロジェクトに取り込んだのが以下の手順。

(1) ターミナルを開き、ソースをsvnで入手。Xcodeのレポジトリに登録してチェックアウトしてもOK。

(2) ソースからVVOSCとVVBasicのフォルダをプロジェクトのフォルダにコピー
 
(以下、コピーしたフォルダでの作業で、OS X関連などのファイルを削除する)

(3) VVOSCフォルダからAppSrcとDoxyfileを削除

(4) VVBasicsフォルダからDoxyfileとInfo.plistを削除

(5) VVBasicsフォルダのsrcフォルダから VVCrashReporter〜.〜 VVCURLDL.〜 VVSprite〜.〜 を削除

(ここからはXcodeでの作業)

(6) VVOSCフォルダとVVBasicフォルダをプロジェクトに追加

(7) プロジェクトのBuild SettingsのApple LLVM compiler 3.0 – LanguageのOther C Flagsに -DIPHONE を追加

(8) ビルドしてエラーの出る箇所を修正
 #import <VVBasics/〜.h> を #import “〜.h” に修正
 OSCStringAdditions.h に #import “MutLockDict.h” を追加

ビルドが通れば、VVOSCを利用してOSC通信を行うのは簡単。

まずはヘッダをインポート。

#import "VVOSC.h"

そしてOSCマネージャを作って、デリゲートを指定。

OSCManager *manager = [[OSCManager alloc] init];
manager.delegate = self;

出力ポートを作って送信。

OSCOutPort *outPort = [manager createNewOutputToAddress:@"127.0.0.1" atPort:1234];
	
OSCMessage *message = [OSCMessage createWithAddress:@"/test"];
[message addInt:100];
[outPort sendThisPacket:[OSCPacket createWithContent:message]];

入力ポートは作るだけ。

OSCInPort *inPort = [manager createNewInputForPort:1234];

実際に受信するとデリゲートが呼ばれる。

- (void) receivedOSCMessage:(OSCMessage *)m
{	
    NSString *address = m.address;
    OSCValue *value = m.value;
	
    if ([address isEqualToString:@"/test"])
        NSLog(@"%d", value.intValue);
}

はい、おしまい。

【追記】以前に比較したように、VVOSCは処理速度がやや劣っている。これは現在のバージョンでは改善された様子だけど、タイミングがシビアな用途には向かない場合があるかも。

電子書籍「iOSの教科書」リリース

7/20に電子書籍「iOSの教科書」をwookよりリリースしました。期待の新鋭、神谷典孝さんとの共著で、前著「iPhone SDKの教科書」の精神を最新鋭の環境に蘇らせた!って感じかな。しかも、今回は電子書籍なので、可能な限り軽やかに多方面に展開したいと思っています。

そんなワケで、この電子書籍はiPhone、iPod touch、iPad、Android、Mac、PCのいずれでも閲覧可能です。また、書籍の内容の一部は試し読み可能で、基礎編での操作手順はチュートリアル・ビデオまであります。これらを含めて書籍サポート・サイトiosbook.netには、サンプル・コードやサンプル素材のダウンロードや各種情報が満載。冗談みたいですが、オーディオ・ブックもちょこっとだけ試してみました。

Lionでバリバリとアプリ開発されている方には本書は不要ですが、これからiPhoneやiPadのアプリを開発しようという方や、LionやXocde 4.1にはまだ馴染めないとい方にはバッチリだと思います。試し読みの上、ご購入いただければ幸いです。

iosbook-flyer

小さな作曲家の物語

開発秘話ってほどでもないんですけど(笑)カール・バルトス氏とジャン=マルク・レダーマン氏との共作「MINI-COMPOSER」の制作過程で印象に残ったことをメモ程度に….

まず、私は受託開発の経験が少ない。それがヤなわけじゃないけど、自分のことだけでテンテコマイってのが実情。数少ない例外はiPhone黎明期のクウジットさんの「ロケーション・アンプ for 山手線」と頓智ドットの「セカイカメラ」(初期バーション)くらいかな。いずれも大きなお題はありつつも、具体的には自由にアイディアを投入させていただいた。もちろん、相手は日本人だから日本語でディープな議論も遺憾なくできる。

これに対してMINI-COMPOSERでは、当初から50-50の対等の関係で制作することが前提。だからカールのアイディアも私のアイディアも同じように尊重され、折り合いをつける必要がある。何をどのように作るかという根底部分での合意形成が重要なワケ。でも、お互いに相手の趣味趣向まで理解しているわけじゃないから、これが大変。

しかも、直接会って話し合うことも難しいし、英語でのメールの遣り取りも頓珍漢気味(彼らも英語ネイティブではないはず)。Skypeも悪くないけど、じっくり考えるには適さない。テクノポップ界の大御所に対する配慮&遠慮も一応ある(笑)。ex-KWとダイアトニック・スケールとは何ぞやと応酬するは大変だよ。A#とB♭の違いとかね。

さて、スタート地点は「シンプルなステップ・シーケンサでドラムとサイン波だけ」というもの。それは簡単、アっと言う間にできるよね。でも、それだとカールらしさがどこに発揮されるのかが分からない。それにシーケンサと言われると音楽制作ツールとの印象が強くて、あれも必要、これも必要と思ってしまう。初期の設定画面はこんな感じで、もっと壮絶なバージョンもありました。

mini-composer-proto

このようなプロトタイプが叩き台になるんだけど、UIのスケッチや操作のフローを描いてくれと頼んでも、短い文章が返ってくるだけ。これは勝手な想像だけど、彼らは音楽脳なのでUIや操作を図式化したり、言語化するのは苦手かもしれないね。フツーの請負プログラマなら途方に暮れちゃいそう。

ともあれカールが一貫して主張していたのは、とにかくシンプルにしたい、ってこと。だから、テンポ設定は要らない、ボリューム設定も不要、波形設定もナシ、ピッチ設定も面倒…という具合で、とうとう設定画面自体が消滅。なんだかドイツ人にワビ・サビを教えられている気分(笑)。

かくしてベースもなければ調性も固定のシーケンサになった次第。だけど、サウンドの作り込みは猛烈ダッシュ状態。結構いいんじゃない?と思っていても、気に入らないので全部入れ替えるから待ってろ!みたいな調子。さすがボクはオンガッカです。絶妙のキャラクター付けで、設定が皆無でも(むしろ、それゆえに)最高に楽しめますね。ツールと作品のちょうど中間地帯にうまく降り立ったんじゃないかな。

一方で私の役目と言えばアプリ制作そのものなんだけど、プロトタイプを提示してUIをまとめながら、オーディオ・エンジンの調整に力を入れてました。最初はシーケンスをperformSelectorやCALayerなどでお茶を濁していたものの、サウンドがカッコ良くなるにつれてツラくなり、最終的にはCoreAudioのオーディオ・レイトでビシバシ駆動。これでアニメーションなどもベクター・サイズ(+α)での誤差になり、かなりタイトになったと思うな。

さらにはバカでかいアニメーションを入れたり、ランダマイズ機能やスクラッチ機能を入れたり。このあたりはプチ・アルゴリズミック・コンポジションなワケで、MaxやSuperColliderで散々やってきた秘伝の味(笑)。でも今回は軽くフレイバーをまぶした程度ね。ちなみに、この手のアイディアは事前に説明せずに、実際に動かして、どう?と尋ねるのがイイみたい。

未だにスッキリしないのはグラフィック・デザイン。何しろセンス・ゼロの私がやっているから、情けないことこの上ない。知人のデザイナに手伝ってもらおうか?と持ちかけたものの、そのあたりは不満がない様子。考えてみれば、どこか間抜けなダサカッコイイ感じが持ち味だよな〜と思い、強制的に納得しています。

mini-composer-proto-red

他にも小さなエピソードや公表が憚られる話もありますが、全体としては楽しい作業で、見知らぬ他人とのコラボレーションとしては大成功だと思うな。もともとは私のSnowflakesOkeanos Buoysのビデオを見て興味を持ったそうで、求める感性に近いんでしょうね。

それから、当初はモタつき気味だった制作テンポが中盤以降どんどん加速するあたりは圧巻でした。特に震災支援を考えると、モタモタしていては意味が薄れるので、一日でも早く完成させる原動力になりました。音楽もアプリも下手をすれば延々とイジリ続けちゃうから、お尻に火をつけることはイイことです。Light My Fire !

ピュアなデータをiOSで

Maxの実父と言うか異母兄弟と言うか良く分からないですが(笑)、Pd (Pure Data) はMaxに似たビジュアル・プログラミング環境。MaxとPdは同じとも言えるし、全然違うとも言える、なかなか奇怪な関係にあります。詳しくは面倒なので省略。パッチと呼ばれるグラフィカルなプログラムはこんな感じ。

pd

それで、このPdをiOSで動かそうというプロジェクトがPd for iOS。以前はRjDjがPdベースってことで少々話題になりましたが、その一般化が進んでいるようです。ただし、現時点ではアルファ版なので、いろいろバギーだったりします。

Xcode 4でPd for iOSを試すには、次のような手順になります。

  • Xcodeを起動し、Organizerを開き、Repositoriesを選ぶ。
  • 左下の+ボタンをクリックし、Add Repository…を選ぶ。
  • Nameは Pd for iOS、Locationは git://gitorious.org/pdlib/pd-for-ios.git と入力し、Addボタンをクリック。
  • 左側のリストの Pd for iOS を選択し、Cloneボタンをクリックして、クローンを作る。

これでpd-for-iosというフォルダが作られますが、もう少し作業をする必要があります。これはREADME.txtに説明されている通りです。

  • ターミナルを起動する。
  • cdコマンドでpd-for-iosフォルダに移動する。
  • 次の4つのコマンドを実行する。
    • git submodule init
    • git submodule update
    • git pull
    • git submodule update

これでPd for iOSのインストールは完了。後はPdTest01やPdTest02などのサンプルを試してみてください。まぁ音が鳴ったり、鳴らなかったりしても文句を言う筋合いじゃないですね。Pdはオープンソースのフリーウェアであり、伝統的に自己責任&自己解決が原則ですから。

個人的にこの手の試みで興味があるのはGUIの扱いなのですが、Pd for iOSはInterface Builderを使ってGUIアイテムを貼付ける正攻法。そして、アクションやアウトレットを定義して、専用のメソッドでPdのrecieveオブジェクトに送り込みます。なんだか豪快な感じもしますね。

pd-for-ios

ゴー・ウェスト

今回の震災で被害を受けられた方や停電等で生活や業務が困難な方への支援のひとつとして、モバイル関係のソフトウェア開発者にインキュベート・ルームを6ヵ月間無償で提供する震災支援事業が始まっています。入居保証金も半額の5万円で、共益費等は必要とのことです。個人でも小グループでもOKで、入居審査は最速みたい。

earthquake-incuvationroom

相談や申し込みは岐阜県情報産業課(TEL.058-272-8378)にしていただくとして、ここでは周辺の情報を少々。

このインキュベート・ルームは一室22㎡で、高速光回線や空調が完備していて24時間365日無休で使えます。ただ壁はちょっと薄めなので、スピーカを使っての音楽制作などには向かないですね。大声や大音量でなければ大丈夫かな。

インキュベート・ルームがある建物はドリームコアと呼ばれていて、大江匡氏の設計による、開放感のある素晴らしい外観と空間ですよ。ここは本当に気持ちがいい。iPhone塾やモバイルカフェも同じ建物にあるドリームコア・コレクティブで行なっています。

www.japan-architect.co.jpより)

宿泊はお隣の建物にあるソピア・キャビンなら、シャワー・トレイ共用タイプの個室で一泊1,500円でOK。バス・トレイ付きの部屋でも4,000円だったり、雑魚寝?タイプの和室もありますね。この宿泊施設は、何と言うか、2001年宇宙の旅のヒルトン・ホテルを思い起こすようなレトロ・フューチャー感があります。結構ヘンで面白いかも。

sopia-cabin

あと周辺はソフトピア・ジャパン地区でIT関連企業のモダン・キッチュな建物が一杯。でも、ちょっと歩くと田園地帯が広がっていてギャップが楽しめます。地方小都市と言うか田舎であることは間違いなく、衣食水準や文化環境は期待しないほうがいいです。このあたりが充実すると本当にいいのですけどねぇ。

ただ、人気映画のロードショーでも確実に座って観れるなど余裕はたっぷり。空気はキレイだし水は美味しい。自噴水が各所にあるくらい地下水脈が豊かで、ペットボトルの水なんて馬鹿馬鹿しくて飲めないくらい。

ところで、エントリー・タイトルのゴー・ウェストはVillage PeopleやPet Shop Boysの同名の曲から。あまりにも脳天気な歌詞なので掲載は控えますが、ま、そーゆーことです。大きめの企業でも自律分散協調型のワークスタイルにいいんじゃないかな。

思い起こせば、セカイカメラの初期バージョンも東京とココとで作ってました。FingerPianoやREKの和田さんもココと東京を往復しているし、Jailbreak界の貴公子もいますよ。IAMASにも遊びに来てくださいね。

3/14は大垣で裏モバイルカフェ

3/14(本日)19:00よりJR大垣駅近くで「裏モバイルカフェ」を開催します。3/12(US時間では3/11)に発売になったばかりのiPad 2をサカナにウダウダと適当にお話ししましょう〜という趣旨です。iPad 2は風呂蓋付きで少なくとも2台は登場する予定です(他にもお持ちの方は是非持って来てください)。

altmobilecafe2

日時:2011年3月14日(月)19:00〜21:00
場所:アクアウォーク大垣2Fフードコート(JR大垣駅北側のショッピングモール) 【交通案内】

# 非公式開催なので会場などへの問合せはお控えください。
# 何かありましたら本サイトのContactか、Twitterの@akamatsuまでお願いします。

iAd Producerでネイティブ・アプリ

昨年末にAppleがデベロッパー向けに公開したiAd Producerは、その名の通り、iAdのコンテンツを作成するツール。iAdの広告料はかなりの金額だそうで、大企業や広告代理店ならいざしらず、一般人には関係ないですよね。

iad-producer-hero

ところが、このiAd Producerが作成するコンテンツはHTML5、CSS3、JavaScriptとして出力される。ってことは、UIWebViewに仕込めばネイティブ・アプリとして動くんじゃない?と思って試したことろ、ちゃんと動きました。しかも、UIWebViewをInterface Builderで貼付けてアウトレットに繋いで、3行ほどコードを書くだけ。

NSString *filepath = [[NSBundle mainBundle] pathForResource:@”AdUnit/index” ofType:@”html”];
NSURL *fileurl = [NSURL fileURLWithPath:filepath];
[webView loadRequest:[NSURLRequest requestWithURL:fileurl]];

面倒な人のためにプロジェクト一式も入れおきます。

Download iAPTest.zip

実際の作業手順はこんな感じ。

  • iAd Producerでコンテンツを作成
  • ExportメニューのExport to Disk…を選び、コンテンツを出力
  • 出力されたコンテンツにあるAdUnitフォルダをXcodeプロジェクトに登録
    (この時「追加したフォルダにフォルダ参照を作成する」を選ぶ)

これだけで後はビルドして実行すればネイティブ・アプリとして(内部的にはWebアプリ的に)動いちゃいます。App Storeにも出せると思うけど、iAd Producerの目的外使用としてハネられるかもしれませんね。さらにツワモノな方は、このアプリにiAdを載せてください(笑)。Androidとかにも使える?

さて、肝心のiAd Producerでのコンテンツ制作は、ビジュアルなフローを中心にテンプレートを選んでGUIパーツを置くだけの簡単さ。雰囲気的にはiDVDとかに近いかも。GUIパーツには画像を割り当てたり、テキストを入力したり、遷移するページを指定したり、といった感じで作業を進めます。素材が揃っていれば、ナントカ案内とかナントカ紹介みたいなコンテンツがアっと言う間にできますね。

iad_producer_templates

iad_producer_objects

と言う訳で、プログラミングができない人でも、それなりのアプリがプログラムレスで作れちゃうから、かなりイイかも。もちろん、心得のある人はJavaScriptをバリバリ書くこともできます。このようなWebアプリ的に制作してネイティブ・アプリとして動かす方法はPhoneGapなどいくつかありますが、iAd Producer応用路線が遥かにお手軽な気がします。

さようならAndroid、こんにちはAndroid

星の数ほどあるAndroidフォンの中で、個人的にはGoogleブランド機しか持っていない。それはたぶんOSとしてのAndroidに興味があっても、各社から発売されているAndroidフォンはちっとも魅力的じゃないからだろうね。そんな訳で、写真の左から順にDev Phone (2008年12月)、Nexus One (2010年1月)、Nexus S (2010年12月)と、ほぼ1年ごとにリリースされてきたラインナップ。

three-android-phones

Googleフォンに比べるとケータイ・ショップで見かけるAndroidフォンは相当ダメダメです。それにはいくつか理由があるけど、最大の元凶は厚化粧。これは構造的な問題で早晩には解決しないかもね。なぜって、各社が同じAndroidを使う以上は基本的には横並びで、差別化という名の元に苦し紛れの厚化粧をせざるを得ないから。その結果として過剰な装飾で動作が緩慢になったり、バッテリーが短時間しか持たなかったりで、悲惨な状況が続いている。

ハードウェアに関しては厚化粧はさらに深刻で、もはやスキゾフレニアな状況(統合失調症!)。CPU/GPUや画面解像度がバラバラなのは開発者が血と汗と涙を流すだけでなくて、何百台もの機種を動作検証するコストはユーザに当然跳ね返ってくる。GUIとは違って変更できないハードウェア・ボタンだってバラバラ。メーカーやキャリアのロゴは要らないのに、なぜかそこだけ堅牢だったりする。

もちろん、そのような醜悪な状況にはGoogleも辟易しているらしくて、今後はメーカーやキャリアの独自GUIは禁止するとか。それを端的に表しているのが、最新リファレンス・モデルたるNexus S。何しろ、パッケージを開けてビックリ、Nexus Sの正面はひたすら漆黒のノッペラボウであって「何もナイ」。これは初代iPhone以来の感動です。最新バージョンのAndroid 2.3 Gingerbreadも可能な限りシンプル&クイックを目指している。さらにホーム画面にもアプリが「何もナイ」。そこまでしなくても〜と笑っちゃうけど、馬鹿なメーカーやキャリアに対する痛烈な皮肉だね。

nexus-s

おそらくAndroidはパソコンやインターネットの時代のルールに縛られていて、何とかそこから抜け出したいんじゃないかな。PCに不要なソフトが山盛り組み込まれていて、WEBサイトに無駄なムービーや下手なインターフェースが満載なのと一緒でしょ。それにパソコンやインターネットは特殊な専門家のための世界であって、それを一般的な人にまで無理強いするのは限界に達してる。ましてや全世界的全世代的な情報環境を目指すモバイル的展開に適さないのは明白だからね。

一方、Barnes & Nobleが発売する電子書籍リーダーNOOKはとっても印象的。NOOKはほとんどAndroid臭がないものの、レッキとしたAndroidマシン。AndroidってケータイOSのことだと思ったら大間違いという好例だね。それも書店チェーンごときが(失礼!)Androidをベースにしてオシャレなデバイスを作ってしまうのが鮮やか。初代は2009年11月発売と比較的早い時期だったし、1年後にはE-InkからカラーLCDに変えたNOOK Colorを出す大胆な展開ぶり。

two-nooks

このNOOKのようなAndroidは極めて正しいと思う。同じように、例えば楽々フォンみたいなケータイをAndroidで作るのが正しい道だと思う。Google Voiceをベースに各種クラウド・サービスを連携させて、でも見た目はボタンが3つくらいしかない、とかね。こーゆーのはiOSではできないし、Androidの本領が存分に発揮できるよね。ってかモトイ、ケータイはもういいです(笑)、もっと他のことにトライして欲しい。

つまり、iPhoneのようなAndroidフォンやiPadのようなAndroidタブは要らない。AndroidはiOSに対するカウンター・カルチャーであって欲しいけど、その表現形は単なる二番煎じなのでカウンター足り得ていない。専門家に好都合なAndroidであっても、ユーザを魅了するAndroidには成り得ていない。GoogleはAndroidにもっと独自性と革新性を与えるべきだし、その取り巻き連中もAndroidゆえの独創性と無鉄砲ぶりを発揮して欲しい。と思うのだ、他力本願で非常に勝手ながら(笑)。

iOS 4.2のクラス・ダンプ

正確にはiPhone 4のiOS 4.2.1 (8C148) で試しましたが、以下のコードを実行して全クラスの名前をコンソールに表示してみました。

extern int objc_getClassList(Class*, int);
extern Class class_getSuperclass(Class cls);
extern const char * class_getName(Class cls);

@implementation DumpClassesViewController

- (void)viewDidLoad
{
	[super viewDidLoad];
	
	int numClasses = objc_getClassList(nil, 0);
	Class *classes = nil;
	
	classes = (Class*)malloc(sizeof(Class) * numClasses);
	numClasses = objc_getClassList(classes, numClasses);
	
	printf("Number of Classes:%d\n", numClasses);
	
	for(int i = 0; i < numClasses; i++)
	{
		Class c = classes[i];
		printf("%s ", class_getName(c));
	}
	
	free(classes);
}

@end

その結果はクラス数 1,422 1,420個でした。実際のダンプ結果をドド〜ンとどうぞ。スペース区切りです。

【追記】このダンプには自分自身(DumpClassesViewControllerとDumpClassesAppDelegate)も含まれているので、iOSのクラスとしては1,420個です。ご指摘ありがとうございました、@sumihiro さん。

Number of Classes:1422
NSURLQueueNode CPLRUDictionary UIBezierPath UIButtonContent UIInputViewTransition NSPathStore2 WebInspector NSRunLoop UIScrollAnimation UnchargedButton _UILabeledPushButton DOMCSSVariablesDeclaration NSKeyValueFastMutableArray1 DOMHTMLModElement __NSAutoBlock UIDragger UIKBKeyInterval NSURLDirectoryEnumerator NSPhoneNumberCheckingResult DOMCSSValueList UIAutocorrectStringView UIWebSelectionAssistant __NSOperationInternal CFXPreferencesCompatibilitySource UIAlphaAnimation UIKeyboardEmojiFactory UIAlertTextView WebInspectorWindowController NSKeyValueFastMutableArray2 PEPServiceConfiguration __NSMallocBlock UIFlicker UITableViewCellLayoutManagerValue1 NSFileManager NSTransitInformationCheckingResult UIKeyboardLayout UIWebSelectionOutline DOMValidityState NSMessagePortNameServer UIInternalEvent UIKBKeyset NSKeyValueSlowMutableArray DOMUIEvent UI9PartImageView UITableViewCellLayoutManagerValue2 NSFileHandle NSOrthography DOMHTMLMetaElement UIDefaultKeyboardInput UIWebSelectionHandle NSUndoManagerProxy ALCityManager UIEvent UIKBKeyboard NSURLQueue NSData UIImage CAWindowServer UITextInputTraits UIInputViewAnimationStyle DOMCSSValue NSNullFileHandle NSComplexOrthography DOMHTMLMenuElement UIGradientBar UIWebSelectionView NSUndoManager DOMCSSUnknownRule UITouch UIKBKeyCacheEntry NSURLFileTypeMappingsInternal NSTimer _UIStretchableImage UITableHeaderFooterView UIPeripheralHostView NSOperation WebKitStatistics CPLRUDictionaryNode __NSFinalizingBlock UIFrameAnimation UIKeyboardEmoji UIRuntimeOutletCollectionConnection NSMessagePort DOMCSSStyleSheet UISectionList UIKeyboardLayoutEmoji_iPad UIThreePartImageView DOMTreeWalker NSKeyValueNotifyingMutableSet UIDelayedAction UIKeyboardLayoutStar _UIPopoverLayoutInfo NSFileAttributes NSSimpleRegularExpressionCheckingResult CFXPreferencesPropertyListSource UIAutocorrectTextView UIMenuItem _NSPredicateUtilities InvocationTrampoline DOMHTMLMarqueeElement NSBlock UIKeyboardPartialLayoutView UIKBKeylistReference NSKeyValueMutableArray ThreadedInvocationTrampoline UIGestureInfo UIKBKeyplaneView UIKeyboardCache NSDirectoryEnumerator NSExtendedRegularExpressionCheckingResult CFXPreferencesSearchListSource CAScrollLayer UIAutocorrectShadowView UIMenuController _NSNestedDictionary WebCoreScrollView DOMHTMLMapElement NSCache UIRemoteControlEvent UIKBKeylayout NSProtocolChecker DOMCSSStyleRule UIApplication UIGlassButton UIKeyboardAutomatic DOMTouchList NSAllDescendantPathsEnumerator NSComplexRegularExpressionCheckingResult __NSStackBlock UIAutocorrectImageView UIWebLongPressInSelectableRecognizer NSPortNameServer DOMTouchEvent UITouchesEvent UIKBKeylist NSConcreteProtocolChecker _UIBackgroundTaskInfo UIRoundedRectButton UIInputViewRotateTransition NSConcretePointerFunctions WebIconFetcher UISectionHeaderCell UIKeyboardLayoutEmoji_iPhone _UIAlertOverlayWindow NSMachBootstrapServer WebImageRendererFactory UIMotionEvent UIKBGeometry NSURLHostNameAddressInfo DOMHTMLLinkElement UIUndoAlertView UIButtonLabel UIInputViewSlideTransition NSPointerFunctions CPSearchMatcher UIRotationAnimation UIKeyboardLayoutEmoji _UIMediaPushButton NSKeyValueFastMutableArray CFXPreferencesManagedSource UIGestureAnimation UIKeyboardTouchInfo DOMCSSStyleDeclaration NSAssertionHandler NSConcreteAttributedString DOMHTMLLIElement __NSTimeZone CASpring UITableViewCellLayoutManager _UIToolbarAppearance UIPrintRangePickerView _NSUndoLightInvocation UIKeyboard UITextMagnifierRanged WebHTMLRepresentationPrivate DOMTouch NSDecimalNumberPlaceholder WebHTMLRepresentation OperationQueueInvocationTrampoline UIKeyboardSublayoutEMail UITextTapRecognizer DOMCSSRuleList NSOperationQueue DOMTextEvent _UIOnePartImageView UIDatePicker UIInputSwitcherSelectionExtraView _NSUndoInvocation UIClippedImageView UITextMagnifierRangedRenderer NSDecimalNumber ABVCardValueSetter UIKeyboardSublayout UIKBAttributeList NSAutoContentAccessingProxy DOMText _UIPickerViewTopFrame UIButton UIInputSwitcherShadowView NSKeyValueNonmutatingCollectionMethodSet CapturedInvocationTrampoline DOMHTMLLegendElement NSInputStream CADisplayMode UITextFieldLabel UIWebClipIcon _UIAlertSheetTable NSDecimalNumberHandler ABVCardPersonValueSetter UIKeyboardReplacementImageView UIKBKey NSWeakCallback DelayedInvocationTrampoline __NSCFConstantString UIWeekMonthDayTableCell UIPopoverButton UIInputSwitcherTableCellBackgroundView DOMCSSRule NSKeyValueMutatingCollectionMethodSet DOMHTMLLabelElement NSTimeZone UIFloatArray UIInlineCandidateTextView UIAlertSheetTextField WebHTMLView NSMutableAttributedString NSError DOMCSSPrimitiveValue UITouchDiagnosticsLayer UITableViewCellReorderControl UIKeyboardInputMode NSNotificationQueue NSOutputStream UIDateTableCell UITexturedButton UIKeyboardRotationState NSKeyValueNonmutatingArrayMethodSet __NSPlaceholderTimeZone CAForceField UISectionTable InlineCandidateCell UIOnePartImageView NSCFError NSConcreteMutableAttributedString DOMCSSPageRule UITextView UITableViewCellEditingData UIKeyboardInputModeController DOMStyleSheetList _NSUndoStack ABVCardCardDAVValueSetter UIAutocorrectInlinePrompt UITextContentView WebHTMLViewPrivate _NSUndoObject NSMutableData UIAutoscroll UITextMagnifierTimeWeightedPoint NSURLFileTypeMappings DOMHTMLIsIndexElement __NSBlockVariable CADisplay UIKeyboardLayoutQWERTYK48 UIPopoverViewBackgroundComponentView NSBlockOperation WebGeolocationManager UIPickerScrollAnimation UISwitch UITextCheckerDictionaryEntry NSKeyValueIvarMutableArray UITextField UIActivityIndicatorView _UIAlertStackWatcher NSURLKeyValuePair AggregateDictionary ABVCardParser DOMHTMLInputElement __NSGlobalBlock CAWindowServerDisplay UIKeyboardLayoutQWERTY UIKeyboardSwipeGesture NSInvocationOperation DOMCSSMediaRule _UIPickerWheelView _UISwitchInfo UIStatusBarThermalColorItemView DOMStyleSheet NSKeyValueNotifyingMutableArray CPNetworkObserver UITextFieldAtomBackgroundView UIAutoRotatingWindow _UIAlertTableViewCell WebHistoryPrivate NSConcreteFileHandle NSSimpleOrthography UIStatusBarCorners UISwappableImageView UITableViewCellDeleteConfirmationControl __NSOperationQueueInternal CPAggregateDictionary DOMCSSImportRule _UIPickerViewSelectionBar UIDatePickerView UIInputSwitcherView DOMStyleMedia NSKeyValueContainerClass UITextFieldBorderView UITextEffectsWindow UIAlertSheetTableCell NSPipe NSKeyValueChangeDictionary AppleSpell NSStream CADisplayLink _UISwappableImageViewAnimationProxy _UITableViewCellDeleteConfirmationControl UIPrintRangeViewController _NSUndoBeginMark ABVCardCardDAVParser DOMHTMLImageElement NSLocale UICheckeredPatternView UITextMagnifierCaret WebHistoryItem NSKeyValueArray UITextFieldCenteredLabel UIWebClip _UIAlertBackgroundView NSAttributedString NSConcretePipe _ReachabilityRequest CoreMotionManager NSUserDefaults UISelectionIndicatorView UITableViewLabel UIPrintRangePickerLayoutView _NSUndoEndMark ABVCardParameter DOMHTMLIFrameElement NSURL UIKeyboardImpl UITextMagnifierCaretRenderer NSPortMessage DOMCSSFontFaceRule UIKeyboardLayoutRoman UIGestureContext DOMRGBColor NSExpression DOMGestureEvent __NSArrayI LKNSArrayCodingProxy UITabBarController UITableViewVisibleCells UIConcreteMarkupTextPrintFormatter WebPolicyDecisionListenerPrivate NSNetworkSettingsInternal UISliderContent UIGestureDelayedTouch WebGeolocationPolicyListener NSCFSet UIPickerTableCell UISwipeGestureRecognizer NSKeyValueShareableObservanceKey DOMHTMLTableCaptionElement UIStatusBarItem UIWebViewInternal NSNetworkSettings UIPreferencesTextTableCell UIGestureRecognizerTarget NSCountedSet UIPreferencesDeleteTableCell UIPhraseBoundaryGestureRecognizer WebPolicyDecisionListener NSKeyValueObservance DOMHTMLStyleElement UIScroller UIStatusBarItemView NSConcreteHashTable NSDateCheckingResult UIProxyObject CACodingProxy UIScrollViewScrollAnimation _UIOpenInNavigationController WebCoreMediaPlayerNotificationHelper NSScanner WebCoreStatistics UIAccentedCharacterView UIRuntimeAccessibilityConfiguration DOMFileList NSKeyValueObservationInfo UIStatusBarLayoutManager UIScrollerIndicator NSClassicHashTable NSAddressCheckingResult DOMFile __NSPlaceholderArray UIRuntimeConnection UINavigationBarBackground _UIOpenInTableViewController WebCoreBundleFinder NSConstantValueExpression UIMoreNavigationController UITableViewCellContentMirror UIMarkupTextPrintFormatter NSKeyValueNilSetEnumerator UIScrollerScrollAnimation UIStatusBarPublisher NSDirectoryTraversalOperation NSLinkCheckingResult DOMHTMLSelectElement __NSArrayM UIClassSwapper LKNSDictionaryCodingProxy UINavBarPrompt UIKeyboardCandidateBar NSAnyKeyExpression UIMoreListCellLayoutManager UIViewAnimationContext UIViewPrintFormatter WebPreferences NSHTTPCookieStorageInternal UICoverFlowLayer UIPinchGestureRecognizer WebDatabaseManager NSURLCache DOMHTMLScriptElement ProfilerServer UIPreferencesTableCell ABHelper NSCFOutputStream __NSDate CATransition UISearchFieldBackgroundView UIWebDragDotView WebAnimationDelegate NSKeyValueNestedProperty WebPluginContainerCheck UIStatusBarBackgroundView UIWebPaginationInfo DOMEvent _NSIndexPathUniqueTree NSTextCheckingResult UIView UIKeyboardCandidateShadowView UIRoundedCornerView NSSortDescriptor WebBasePluginPackage DOMEntityReference __NSCFDictionary CAMatchMoveAnimation UITextFieldBackgroundView UIWebTextRangeView DOMXPathResult NSKeyValueComputedProperty UIStatusBarForegroundView UIWebViewWebViewDelegate NSIndexPath NSOrthographyCheckingResult UIViewHeartbeat KBCandidateCell UIClipCornerView NSKeyPathSpecifierExpression WebPluginController DOMHTMLQuoteElement WTFMainThreadCaller UIViewControllerAction UIKeyboardEmojiCategoriesControl_iPad UIPrintFormatter NSKeyValueShareableObservationInfoKey WebPluginDatabase UIStatusBarIndicatorItemView UIWebView NSHost NSSpellCheckingResult WebCache UIViewAnimationState UINib UIDocumentInteractionController NSKeyPathExpression DOMHTMLPreElement CAAnimationGroup UINavigationController UIKeyboardEmojiCategoriesControl_iPhone UIConcreteSimpleTextPrintFormatter NSURLAuthenticationChallengeInternal DOMEntity NSDate UIPreferencesTableCellRemoveControl UIWebFormDelegate DOMXPathExpression __NSStackBlock__ NSHashTable NSGrammarCheckingResult UINibStorage UIScrollView _UIPreviewItemProxy WebOpenPanelResultListener NSFunctionExpression WebPluginPackage UISnapshotModalViewController UIKeyboardEmojiCategoriesControl UISimpleTextPrintFormatter NSURLAuthenticationChallenge DOMElement __NSPlaceholderDate UISlider UIGestureRecognizer DOMNativeXPathNSResolver NSSimpleCString UISystemAlertRequest UIMultiColumnsNavigationTransitionView NSKeyValueFastMutableSet2 WebApplicationCache DOMWheelEvent UIRemoteApplication UISelectionTapRecognizer NSFilesystemItemRemoveOperation NSReplacementCheckingResult DOMHTMLParamElement UIWebLayer UIPageController NSFalsePredicate CACGPathCodingSegment UIFingerInfo UIKeyboardCandidateInlineScroller UIInputViewPostPinningReloadState NSCFURLProtocol WebMainThreadInvoker __NSCFArray UIFieldEditor UIKeyboardEmojiScrollView UIKeyboardEmojiGraphics NSFilesystemItemMoveOperation NSCorrectionCheckingResult WebPDFView DOMHTMLParagraphElement WebThreadSafeUndoManager UIPageControllerScrollView NSCompoundPredicate UIViewTapInfo UIKeyboardCandidateInline UIPeripheralHostState NSAboutURLProtocol CPBitmapStore NSMutableArray UIViewController EmojiPageControl UIPrintInfoRequest DOMImplementation NSCFType DOMWebKitTransitionEvent UIGroupInsertionItem AddressBookMatch WebArchivePrivate NSComparisonPredicate DOMDocumentType CFXPreferencesSource UIScreenMode UIViewAnimationBlockDelegate CARenderObject UIKeyboardCandidateInlineTextLabelView WebArchive NSNumberFormatter WebPlainWhiteView UIFullScreenViewController EmojiScrollView UIPrintInfo NSPort DOMWebKitCSSTransformValue _UIGroupItem FormAutoFiller NSKeyValueSlowMutableSet UIPasscodeField UIWebSelectionGraph NSFormatter UIViewControllerWrapperView UIKeyboardEmojiView UIPrintPaper DOMHTMLOptionsCollection NSMachPort _UIPrefTableCellPiece UIWebFormCompletionController WebBackForwardList NSKeyValueIvarMutableSet DOMHTMLOptionElement DumpClassesViewController UITextFieldRoundedRectBackgroundView UIWebSelectionNode _NSFileManagerInfo NSRegularExpressionCheckingResult DOMDocumentFragment CACGPathCodingProxy UIDefaultWebViewInteractionDelegate UITableViewCellContentView NSDirectorySubpathsOperation NSSubstitutionCheckingResult WebMarkup UITouchTapInfo UIKBKeyplane NSAggregateExpression CPPowerAssertionManager UITextRenderingAttributes UITableHeaderFooterViewLabel UIPeripheralHostLayer NSHTTPCookieStorage DOMDocument UITransformAnimation UIKeyboardEmojiCategoryController UIPlacardButton DOMWebKitCSSMatrix NSConcreteScanner DumpClassesAppDelegate LKCGColorCodingProxy UIInformalDelegate UITableViewCellLayoutManagerSubtitle NSTruePredicate DOMWebKitCSSKeyframesRule UIWindow UITableViewIndex UIInputViewSet NSHTTPCookie WebNavigationDataPrivate DOMHTMLOptGroupElement UIAnimation UIKeyboardEmojiCategory UIFenceController NSProxy LKNSValueCodingProxy UIWebPlugInView UIThreadSafeNode NSKeyValueMutableSet __NSArrayReverseEnumerator UIITunesStoreURLResolver UIWebSelection _NSCFURLProtocolBridge DOMHTMLOListElement UIAnimator UIKeyboardEmojiPage UITextSelection NSPropertyListSerialization DOMCSSVariablesRule NSArray CACGPatternCodingProxy UIPreferencesTable UIWebFormABCompatibility NSKeyValueFastMutableSet UIGameCenterURLResolver UITextMagnifierRenderer NSFilesystemItemCopyOperation NSQuoteCheckingResult RadiosPreferences DOMWebKitCSSKeyframeRule UIWebDocumentView UIKeyboardMinimizedView NSProcessInfo ALCity __NSArrayReversed LKCGImageCodingProxy UIGroupDeletionItem FormToABBinder NSKeyValueFastMutableSet1 UIURLResolver UIVariableDelayLoupeGesture NSFilesystemItemLinkOperation NSDashCheckingResult WebNavigationData DOMWebKitAnimationEvent WebViewReachabilityObserver UIKeyboardZoomGesture NSPredicate DOMHTMLObjectElement UITouchData UIKeyboardCandidateSafetyNetVie UIPeripheralHost NSKeyValueSlowMutableCollectionGetter NSAKSerializer CTMessageStatus DOMMouseEvent UIScrubberControl UISearchDisplayController NSCFBoolean NSCompoundPredicateOperator DOMHTMLDListElement UICachedDevicePatternColor UITableViewScrollTestParameters NSURLProtectionSpace SBSLocalNotificationClient UIScreen UIStatusBar NSPlaceholderNumber WebDefaultUIKitDelegate Protocol CAGradientLayer UIImageAndTextTableCell UITabBarItemProxy UISnapshotView LSApplicationWorkspace AccessibilityTextMarker NSDebugString NSComparisonPredicateOperator WebDownloadInternal DOMHTMLDivElement Object UICachedDeviceRGBColor UIKeyboardCandidateSingle WAKView NSURLCredentialStorage CTMessagePart AccessibilityObjectWrapper UIPageControl UIRotationGestureRecognizer NSCFTimer CALayer _UITableCellGrabber UITabBarButton UISharedImageStatisticsTable LSDocumentProxy NSAutoLocale WebTextIterator NSInvocation SBSCompassAssertion UIThreePartButton UIMovieScrubberTrackOverlayView UIPrintStatusViewController NSURLCredential UITableViewRowData UIDropShadowView DOMMessagePort _NSCallStackArray WebDownload NSEnumerator CAContext UITableCellFlashDeselectAnimation UITabBarButtonLabel UISharedImageStatistics NSKeyedArchiver DOMMessageEvent UIRemoveControl UIMovieScrubberTrackFillView UIPrintStatusTableViewController WebTextIteratorPrivate NSKeyValueIvarMutableCollectionGetter NSAKDeserializer CTEmailAddress DOMHTMLDirectoryElement UIScrubberTimeView UISearchResultsTableView WAKScrollView __NSFinalizingBlock__ _NSThreadPerformInfo NSException CAFilter UITableCellFadeAnimation UITabBarButtonBadge UILocalNotification WebEditCommand _NSKeyedUnarchiverHelper WAKResponder UIRemoveControlTextButton UIMovieScrubberTrackInnerShadowView UIPrintStatusTableViewCell NSKeyValueNotifyingMutableCollectionGetter NSPageData UIInsertControl UILocalizedIndexedCollation NSBundle NSBetweenPredicateOperator UICachedDeviceWhiteColor UIKeyboardCandidate _WebSafeForwarder NSAutoCalendar NSInPredicateOperator WebDefaultPolicyDelegate WAKClipView NSNull UIFont CALayerHost UITextRange LSResourceProxy NSHTTPURLRequestParameters CTTelephonyNetworkInfo UIAccelerometer UIScrollViewPanGestureRecognizer NSValue UITableView UITabBar UIWebTextView DOMMediaList NSLock UIProgressBar _UITableViewUpdateSupport UIPrintPanelButtonLayoutView DOMHTMLCollection NSURLProtocolInternal WebSelectionRect DOMKeyboardEvent UIAcceleration UIScrollViewPagingSwipeGestureRecognizer NSNumber WebDefaultResourceLoadDelegate ABCCallbackInvoker DOMHTMLCanvasElement UITableColumn UITabBarCustomizeViewLegacy UIStatusBarLockItemView NSConditionLock CTCarrier UISegmentedControl UIKeyboardEmojiRecentsController UIStepper NSKeyValueUndefinedSetter NSLeafProxy NSCursor CAMediaTimingFunctionBuiltin _UIDateLabelCache UITapRecognizer LSOpenOperation NSPlaceholderValue DOMHTMLButtonElement SBSRemoteNotificationClient UIHardware UITabBarCustomizeView UIKBIdentifierList NSRecursiveLock WebSerializedJSValue UISegmentLabel UIDimmingView UIPrintInteractionController NSKeyValueFastMutableCollection1Getter NSAKSerializerStream NSMessageBuilder UIProgressHUD UITableViewCellLayoutManagerEditable1 NSEqualityPredicateOperator DOMHTMLUListElement UIColor UITextPosition __NSGlobalBlock__ NSMultiReadUniWriteLock CTCallCenter UISegment UIMovieScrubberThumbnailView UIPrintInteractionControllerInternals WebSerializedJSValuePrivate NSKeyValueFastMutableCollection2Getter NSAKDeserializerStream SBSAccelerometer NSMethodSignature CALayerArray UISearchField UIWebURLAction LSApplicationProxy NSCFNumber NSCustomPredicateOperator WebDefaultUIDelegate DOMHTMLTitleElement UIPlaceholderColor UITextInputArrowKeyHistory NSURLProtocol DOMHTMLBRElement UIDevice UIScrollViewDelayedTouchesBeganGestureRecognizer WebThreadCaller NSPlaceholderString UIStatusBarSignalStrengthItemView UITableSeparatorView NSKeyValueProxyShareKey WebDefaultEditingDelegate UICustomObject UINavigationBar UIWebBrowserView NSMutableIndexSet NSDataDetector DOMHTMLBodyElement NSDictionary EAGLSharegroup _UIImageViewExtendedStorage _UITableViewSeparatorView UIPrinterSearchingView WebScriptCallFramePrivate TileLayer NSUnarchiver NSSymbolicExpression UIWebTiledView UICompositeImageElement NSKeyValueProperty UINavigationItem UIBarItem UIWebBrowserPDFPageLabel NSCFAttributedString _NSIndexSetEnumerator DOMHTMLTextAreaElement __NSDictionaryObjectEnumerator CAPropertyAnimation UIProgressIndicator _UITableViewDeleteAnimationSupport UIPrinterTableViewCell NSAffineTransform NSSubqueryExpression UITextLabel UIGroupTableViewCellBackground NSCachedURLResponse UIKeyboardSpaceKeyView UITextInputStringTokenizer WebScriptCallFrame NSDateFormatter _NSIndexPathUniqueTreeNode DOMHTMLTableSectionElement UIResponder _UITableViewReorderingSupport UIPrintPanelTableViewController WebScriptWorld NSSetExpression CTMessage DOMHTMLBaseFontElement EAGLContext UILabel _UIGroupTableViewCellBackgroundImageKey TileHostLayer NSURLCacheInternal WebDefaultFormDelegate UIKeyboardKeyView UITextPositionImpl __NSLocalizedString UIStatusBarDataNetworkItemView CAKeyframeAnimation _UITableDeleteAnimationSupport __NSMallocBlock__ NSSelfExpression DOMHTMLBaseElement UIDateLabel UITapGestureRecognizer WebCorePowerNotifierIPhone NSURLCacheNode UICFFont UITextRangeImpl WebScriptWorldPrivate NSCFInputStream CABasicAnimation _UITableReorderingSupport UIScrollViewPinchGestureRecognizer NSKeyValueUnnestedProperty WebDefaultFrameLoadDelegate DOMHTMLTableRowElement NSMutableDictionary _UINavigationBarAppearance UITabBarItem UIWebTouchEventsGestureRecognizer NSKeyedUnarchiver UINavigationItemButtonView UIRuntimeEventConnection UIKeyboardCandidateBarCell WebDatabasePauser NSKeyValueSlowGetter NSFileWrapperMoreIVars UIMoreListController UIViewAnimation UIWebViewPrintFormatter NSAutoreleasePool NSVariableExpression DOMHTMLTableElement CAContextImpl UIPreferencesControlTableCell UITextInteractionAssistant NSURLError DOMHTMLAreaElement __NSDictionary0 UINibDecoder UIAccentedKeyCapStringView WebPreferencesPrivate WebCoreSharedBufferData NSKeyValueSlowSetter NSFileWrapper CTPhoneNumber UISectionIndex UIUpdateItem UIPrintPanelViewController NSCFArray NSVariableAssignmentExpression UIShadowView UILongPressGestureRecognizer NSURLConnectionInternal DOMHTMLAppletElement __NSFastEnumerationEnumerator UINibStringIDTable UIKeyboardLanguageIndicator WebCoreSynchronousLoader _NSThreadData NSCFString UIStatusBarServer UIContinuation NSArchiver NSTernaryExpression __NSPlaceholderDictionary CAAnimation UICompositeImageView UIWebFormPasswordsEditor NSURLConnection DOMHTMLTableColElement UIKeyboardGenericKeyView UIVideoEditorController NSThread WebResourcePrivate CTMmsEncoder UITable UIStatusBarServerThread _NSKeyedCoderOldStyleArray WebDataSourcePrivate UIRuntimeOutletConnection UINavigationItemView UIInputSwitcher __NSAutoBlock__ NSCachedURLResponseInternal WebDataSource DOMHTMLTableCellElement UIKeyboardReturnKeyView UITextInputMode NSString DOMHTMLAnchorElement UIStatusBarWindow UITableCountView WebCoreResourceHandleAsDelegate NSKeyValueSet UINavigationButton UIImageNibPlaceholder UIWebFormAccessory NSIndexSet NSRegularExpression WebResource CTMessageCenter NSURLConnectionIPhone UIImageView CASlotProxy UITableViewCountView UIPrinterBrowserViewController NSNotificationCenter WebGeolocationMock WebGLLayer UIKeyboardLayoutAZERTYLandscape UIKBCandidateView NSKeyValueAccessor CPDistributedMessagingCenter UIPickerView UIOldSliderFillView UIPopoverController NSPurgeableData NSSimpleAttributeDictionary ADDataStore DOMCSSCharsetRule __NSCFError CAValueFunction UIAlertView UIControlTargetAction _UISearchBarAppearance DOMRect NSURLDownload WebUserContentURLPattern ABVCardCardDAVExporter __NSSet0 UIToolbarTextButton UIRemoteWindow UIPrintingProgressViewController NSKeyValueGetter UIPickerTable UILayoutContainerView UIClientRotationContext NSSubrangeData NSSimpleAttributeDictionaryEnumerator WebGeolocationPosition DOMHTMLHtmlElement __NSCFBoolean UIGradient UIBarButtonItem _UIAlerts_Support NSURLConnectionDelegateProxy ABVCardRecord NSDateComponents UIToolbarButton UIKBShape UIPrintingMessageView WebUserContentURLPatternPrivate NSValueTransformer ADCrashLogStore UIDOMHTMLOptGroupSelectedItem UICalloutBarOverlay NSCFData NSBlockPredicate DOMHTMLHRElement __NSPlaceholderSet CATransaction UIPushButton UIProgressView _UIAlertManager WebGeolocationPositionInternal GeolocationCoreLocationDelegate NSGZipDecoder ADKeyStore WebGeolocationManagerPrivate UIToolbarButtonBadge UITableViewCellEditControl UIPrintPageRenderer DOMRange _NSSharedValueTransformer WebTiledLayer UIDOMHTMLOptionSelectedItem UITapAndAHalfRecognizer PersistentURLTranslatorAccess DOMCounter NSMutableString CPDistributedMessagingCallout DOMProgressEvent UIKeyboardLayoutAZERTY UIKBKeyView NSURLResponseInternal CPDistributedMessagingDelayedReplyContext DOMComment UIButtonBarBadgeBackground _UITableViewCellEditControlMinusView UITextViewPrintFormatter _NSNegateBooleanTransformer ABPersonLinker UIHighlightView UIDragRecognizer WebHistory NSCheapMutableString DOMProcessingInstruction UIKeyboardLayoutQWERTYLandscapeK48 UIPopoverView NSKeyValueProxyGetter DOMHTMLHeadingElement __NSCFCharacterSet CATransformLayer _UIPickerViewWrappingTableCell UIImagePickerController UITextChecker NSKeyValueMutatingArrayMethodSet WebSecurityOrigin _CPPowerAssertionThread UIStatusBarBluetoothItemView _UIOldSliderAnimation NSCFDictionary NSMutableStringProxyForMutableAttributedString WebFrameViewPrivate UIControl UISearchBarBackground UIActionSheet NSNetService ABVCardLexer DOMHTMLHeadElement UIToolbarCustomizeViewLegacy UINavigationTransitionView UIKeyboardOverlayManager WebScriptObjectPrivate NSTask DOMCharacterData __NSCFAttributedString CADynamicsBehavior UIWebSelectPicker UISelectionGrabber NSConcreteData NSRLEArray WebUndefined UIDelayedControlTargetAction UISearchBarTextField _UIActionSheetHostingController NSNetServiceBrowser WebDatabaseQuotaManager _CPPowerAssertion DOMPageTransitionEvent UIToolbarCustomizeView UIRemoteSheetInfo UIStatusBarNotChargingItemView NSConcreteTask DOMCDATASection __NSCFString CABehavior UIWebSelectPeripheral UISelectionGrabberDot NSNotification __NSLocalTimeZone UIClassicController UIKeyboardLayoutQZERTY NSURLDownloadInternal DOMOverflowEvent __NSCFNumber UIBarButtonItemProxy UIRemoteView UIPrintingProgress _NSXMLParserInfo ABVCardExporter DOMHTMLFrameSetElement __NSCFCalendar CAEAGLLayer UIDOMHTMLOptGroupCell UICalloutBar NSConcreteNotification WebFrameView CPDistributedMessagingAsyncOperation UIKeyboardLayoutQWERTZLandscape UIKBHandwritingStrokes NSKeyValueNonmutatingSetMethodSet UIOldSliderControl UIStatusBarBluetoothBatteryItemView NSXMLParser ABVCardCardDAVRecord DOMHTMLFrameElement NSCalendar CARenderer UIDOMHTMLOptionPickerCell UICalloutBarButton WebScriptObject __NSObserver UIKeyboardLayoutQWERTZ UIKBHandwritingView NSKeyValueMutatingSetMethodSet WebApplicationCacheQuotaManager WebLayer UIOldSliderButton UIStatusBarActivityItemView DOMBlob NSConcreteMutableData NSMutableRLEArray WebGeolocation DOMObject CPDistributedNotificationCenter UIDeprecatedDelayedControlTargetAction UISearchBar UITwoSidedAlertController NSURLRequestInternal DOMBeforeLoadEvent __NSCFLocale PKPrinter UITableCellDisclosureView _UITabBarAppearance UIStatusBarHideAnimationParameters WebFramePrivate _NSKeyedUnarchiveFromDataTransformer WebViewFactory ABValuePredicate _NSZombie_ CAReplicatorLayer UIRemoveControlTextFrameAnimation UIMovieScrubberEditingView UIWebDocumentViewPrintFormatter NSConcreteMapTableValueEnumerator DOMNotation UICalloutView UIWindowController NSKeyValueIvarGetter NSDocInfo _CPBundleIdentifierString DOMHTMLFormElement UIKeyboardLayoutRomajiLandscape UIClassicStatusBarImageView NSConcreteValue CPExclusiveLock ABPredicate NSObject CAShapeLayer UIToolbar UIKeyboardInputManager UIPrintStatusJobsViewController NSClassicMapTable WebFontCache PKPrinterBrowser UIWebSelectPopover UITextSelectionView WebFrame NSKeyValueUndefinedGetter NSDocumentSerializer DOMHTMLFontElement UIKeyboardLayoutRomaji UIZoomViewController NSCFCharacterSet NSPredicateOperator CTCall DOMAttr UIStatusBarBatteryItemView _UITableViewCellGrabber NSCondition WebEventRegion UIWebSelectTableViewController UITextRangeView NSKeyValueMethodSetter NSDirInfoSerializer UIKeyboardLayoutQWERTYLandscape UIStatusBarAdornmentWindow _NSPlaceholderCharacterSet NSMatchingPredicateOperator WebVisiblePosition CAMediaTimingFunction UIStatusBarBatteryPercentItemView PKJob _UITableViewCellOldEditingData DOMNodeList NSURLRequest ABNamePredicate __NSGenericDeallocHandler _UITableCellTransientData UITableViewController UIStatusBarAnimationParameters __NSBlockVariable__ NSKeyValueIvarSetter NSDirInfoDeserializer UIKeyboardLayoutQZERTYLandscape UIStatusBarViewController NSCalendarDate NSLikePredicateOperator DOMHTMLFieldSetElement UITableViewCellUnhighlightedState UIStatusBarAirplaneModeItemView NSMutableURLRequest CPRegularExpression ABGroupMembershipPredicate __NSCFType UITransitionView UITableViewControllerKeyboardSupport UIModalView WebFramePolicyListener NSWeakPointerValue WebWorkersPrivate WebEvent PKPrintSettings UIButtonBarCustomizeView UIPasteboard UIPrintStatusJobTableViewCell DOMAbstractView _NSIsNilTransformer ABSearchOperation DOMHTMLEmbedElement UIRemoveControlMultiSelectButton UIMovieScrubberTrackView UITextReplacement WebView NSPlaceholderMutableString __NSCFTimer UICompletionTable UIAccessibilityElement WebEditorUndoTarget DOMNodeIterator NSKeyValueSetter NSRTFD WebCoreViewFactory NSMutableSet UIDeviceRGBColor UISplitViewController DOMNodeFilter NSConstantString NSBlockExpression PKPaper UISectionRowData _UIBookViewControllerView NSMapTable __NSCFData UICompletionTablePrivate UIPanGestureRecognizer DOMNode NSKeyValueMethodGetter NSDocumentDeserializer NSSet UIDeviceWhiteColor CATransactionCompletionItem UIZoomButtonWindow NSCoder _NSPredicateOperatorUtilities UITableViewCell UIBookViewController NSURLResponse ABAnyValuePredicate DOMHTMLElement UITableCellRemoveControl UITabBarBadgeBackground UIConcreteLocalNotification NSKeyValueCollectionGetter NSDirInfo WebElementDictionary UICGColor UIClassicWindow NSCharacterSet NSSubstringPredicateOperator WebCoreKeyGenerator UIStatusBarTimeItemView UITableViewCellSelectedBackground WKQuadObject NSHTTPURLResponseInternal ABPhonePredicate DOMHTMLDocument UISimpleTableCell UITabBarSwappableImageView UIStatusBarOrientationAnimationParameters _NSIsNotNilTransformer WebProgressItem __NSCFOutputStream CATextLayer UIRemoveControlMinusButton UIMovieScrubberTrackMaskView UIAutocorrectionRecord DOMNamedNodeMap NSMutableCharacterSet NSStringPredicateOperator WAKWindow UIStatusBarServiceItemView _UITableViewCellRemoveControl WebCoreAuthenticationClientAsChallengeSender NSHTTPURLResponse WebFormDelegate DOMMutationEvent UITableCell UITabBarSelectionIndicatorView UIStatusBarStyleAnimationParameters _NSUnarchiveFromDataTransformer __NSCFInputStream CATiledLayer DNSServiceRefWrapper WhiteView UIMovieScrubber UIStatusBarRecordingAppItemView WebViewPrivate NSConcreteMapTable __NSCFSet UICompletionTableViewCell UIPanGestureVelocitySample