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

小さな作曲家の物語

開発秘話ってほどでもないんですけど(笑)カール・バルトス氏とジャン=マルク・レダーマン氏との共作「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

不揃いなプリセットたち

Mirrorscopeみたいな処理はiOS 4.0以降のAVCaptureナンチャラを使うんだけど、開発中に困惑したのがビデオ入力の画像解像度などを決めるプリセットの挙動。デバイスの差異を吸収するためにプリセットとして抽象化されてると勝手に思ってたら大間違い。なかなか一貫性がないので表にまとめました。初代iPhoneはiOS 4.0が対応していないので省いています。

capturesessionpreset

結論的には、どのデバイスでも同一の解像度が得られるプリセットはないし、解像度の大小関係も一意的に決められませんね。特に3Gが鬼門になっています。Mirrorscopeではがんばって全デバイスに対応してますけど、なんか理不尽な感じが拭えません(笑)。

mirroscope4a

それに、これまた抽象化の都合のいいところで、次のアップデートでは数値が変わっちゃうかもしれないですね。せめてプリセットに対して解像度を返してくれるメソッドがあるといいんですけどね(ないよね?>誰となく…)。

11/12〜14はソウルでワークショップ

11/12から11/14までの3日間に渡って韓国ソウルのIDAS (International Design school for Advanced Studies) でMobilizingのワークショップを行ないます。IDASは初めて訪問しますが、Hongik University(弘益大学校)のメディア・デザイン系大学院で、ソウル郊外にあるそうです。とある人がおっしゃるには雰囲気はIAMASに似てるとか。楽しみです。

idas-site

先月のVSMM2010でのワークショップやHongik大学でのレクチャーが、いずれも短時間だったものの、とても好評だったので今回の招聘に繋がったようです。このように動きが早いのが彼の国の原動力なんでしょうね。一方で何かとカオスだったりして、それはそれで楽しいのですが、此の国とは違う刺激があります。

iPhoneのファクトリー・イメージ 4.x

久々のファクトリー探訪、今回はiOS 4.1のファクトリー・イメージ。手順はこんな感じ。

  • ipswファイルを複製する。ipswファイルは~/Library/iTunes/iPhone Software Updatesにある(~はユーザ・フォルダのこと)。ipswファイルの名前はココを参照。例えば、iPhone 4のiOS 4.1用のipswファイルは「iPhone3,1_4.1_8B117_Restore.ipsw」
  • 複製したipswファイルの拡張子.ipswを.zipに変える。
  • zipファイルをダブル・クリックして解凍する。
  • 解凍したフォルダには複数のdmgファイルがあるが、ファイル・サイズが最も大きなものが目的とするルート・ファイルシステムのdmgファイル。iPhone 4用のiOS 4.1であれば「018-7063-114.dmg」。
  • DMG Decrypterを起動する。
  • ルート・ファイルシステムのdmgファイルをドラッグし、DMG Decryperの「Drag .Dmg Into Here」にドロップ。
  • DMG Decryperの「Input Firmware Key Here」にキーを入力する。キーはデバイスの画像をクリックすれば表示されるので、それを選択してドラッグ&ドロップする。あるいはココからも調べることができる。例えば、iPhone 4のiOS 4.1用のキーは「2ab6aea67470994ec3453791ac75f6497c081edd1991e560a61dd666ac4b73f43c781739」。
  • 「Click To Decryot」ボタンをクリックする。暗号解除されたdmgファイルが作成される。

dmg_decrypter

  • 暗号解除されたdmgファイルをダブル・クリックする。例えば、iPhone 4のiOS 4.1用のdmgファイルであれば「Baker8B117.N90OS」という仮想ディスクがマウントされる。
  • 仮想ディスクの中から拡張子がpngであるファイルを検索する。iPhone 4のiOS 4.1の場合、パッケージ内も検索すると5,120個見つかる。パッケージ内を検索しない場合は2,048個。検索にはEasyFindPathFinderといったユーティリティが便利。
  • 検索されたpngファイルを別のフォルダにコピーする。
  • コピーしたpngファイルをiPhonePNGiPhonePNGAppなどでデコードする。

結果的には4,979個のpngファイルが得られました。一部の@2xのpngファイルはエンコード方式が変わったのか、デコードに失敗しているみたいです(新しいデコーダってある?)。ともあれ、思いがけない画像があったりして、楽しいですよ。iOSや標準アプリケーションのGUIパーツは研究価値大だし、絵文字なども楽しいですね。

factory-images-4_s