Objective-Cのメソッド名って長くって覚えられない。そんな自分のためにclass-dumpというシェルスクリプトを利用して、簡単にメソッド名を検索できるスクリプトを作ってみました。といってもclass-dumpにちょっとオプションを追加しただけのスクリプトですが。
インストール方法
- まずはここからclass-dumpというシェルスクリプトをダウンロード。
- PATHの通った場所にclass-dumpを移動。PATHの通った場所はターミナルで「echo $PATH」で確認してください。
- 次にここからstClass-dumpをダウンロード
- class-dumpを移動させたフォルダにファイルを移動させる。
- ターミナルで「cd 移動させたフォルダ」「chmod +x class-dump stClass-dump」とコマンドを打つ。
これで準備は完了です。
class-dumpに追加したオプションとして -i と -m があります。
- -i オプション
- iOS SDKに含まれるフレームワークからの検索
- $ stClass-dump -i
- iOS SDK に含まれるフレームワークをすべて表示
- $ stClass-dump -i フレームワーク名 (拡張子はいれない、大文字小文字は無視します)
- 指定したフレームワークを検索
- $ stClass-dump -i フレームワーク名 -a
- 指定したフレームワークのメソッド名、プロパティをすべて表示
- $ stClass-dump -i フレームワーク名 -f hoge
- 指定したフレームワーク内のメソッドでhogeを含むメソッドを検索
- -m オプション
- Macのフレームワークからの検索。使い方は -i オプションと同じです。
- -m オプションも -i オプションつけずに使った場合
- class-dumpと同じ挙動になっています。
-i -m オプションをstClass-dumpコマンドの後につけた場合、それぞれフレームワークを検索してclass-dumpに渡しているだけのスクリプトなので、-i -m オプション以外はclass-dumpのオプションがそのまま使えるようになっています。詳しい使い方を知りたいときは class-dump –helpでもしてみてください。
class-dumpの機能としてバイナリファイルに含まれているヘッダーを出力できるようになっています。
$ stClass-dump /Applications/Safari.app/Contents/MacOS/Safari などするとSafariで使われているクラスやメソッドがみれて楽しいですよ〜。ためしてみてください♪
たかともが、いちばん使うのは $ stClass-dump -i uikit -f hoge 。
$ class-dump /Developer/Platform/iPhoneOS なんちゃら〜 -f hoge が長い。。。という理由、それだけ。
みなさんも使ってみてくださいね。
でわでわ、たかともでした。
追記1: もしSDKのバージョンがかわったらファイルのFWFOLDERの部分を直してください。別のフォルダを追加したい場合もFWFOLDERに追加すれば使えるので、外部のフレームワークを入れているフォルダがあれば、そのフォルダも追記してください。
追記2: バグ?
- フレームワークの指定が1つしかできない。2つ以上のフレームワークの串刺し検索はできない。
- Cocoa.framaworkが検索できない。AppKit、Foundation、CoreDataを指定して使ってください。
1つめのフレームワークの指定に関してはスクリプトを変更することで対応できるのですが、2つめのCocoa.frameworkに関してはclass-dump自体がCocoa.frameworkを指定したときに検索ができないので、対応できません。ただし、Cocoa.framework自体はAppKit、Foundation、CoreDataをインポートしているものなので、AppKit、Foundation、CoreDataを指定して検索することで参照することはできるようになっています。
前回の記事で正規表現の検索ができたので、Xcodeが好きになりました。すごく便利です。あとは選択範囲だけの置換をショートカット使ってできればしばらくXcodeで開発するのもいいのかなぁと思い始めてます。
すこし検索が便利になったので、今度は置換も少し便利にしておきたい。Xcodeを解説しているところをみると、置換文字列に改行とかタブを入れるときはコピペで入力すると書かれているのですが、いちいちコピペしないでも入力できる方法があったりします。それは。。。
- Option + TAB = タブ
- Option + Enter = 改行
置換文字列を入力するときにOptionを同時に押すだけで、置換文字列にタブとか改行を入力できるようになります。
ファイル内検索で正規表現を使えるのを知らなかったのが、恥ずかしすぎる。。。。。というわけで、Xcodeの記事 2連発でした。まだまだ知らないことがいっぱいです。Xcode、奥深しっ!!
でわでわ、たかともでした。
いままで何をやってたんでしょうか。Xcodeのファイル内検索がパネルで表示されていたときには正規表現で検索できたのに、検索パネルから検索バーに変わってから正規表現で検索できなくなったのか><とおもってがっかりしていたのです。
。。。すみませんでした。Apple様っ!!
というわけで、方法をメモ。
検索パネルでサーチバーの左にあるアイコンをクリック。
正規表現をチェックする。

Xcodeを使い始めて、6年ぐらい、まったく情けない。
「できないっ!!」って結論を出す前にきちんと探しましょう♪
ではでは、たかともでした。
EmacsからVimに乗り換えるきっかけになったプラグイン。
cocoa.vim
Vimで開発するときには必須のプラグインです。
- C-x C-o or F2 = オムニ補完
- Command + Option + ↑ = ヘッダーファイルと実装ファイルの切り替え
- Command + 2 = メソッド(関数)のリスト表示
- Command + 0 = Xcodeで開く
- ノーマルモードで K = カーソルの下の単語をドキュメントから検索
このあたりはXcodeにはできるけど、Vimにはない機能をうまく補ってくれます。
が、
- Command + R = ビルドしてXcodeに移動する
- Command + B = ビルド
- Command + shift + K = クリーン
Xcodeを使って手動でビルドしてあげると問題ないプロジェクトでも、このあたりの機能を使おうとするとなぜかXcodeがエラーをはいてました。いろいろ調べていたのですが解決方法を二つほどみつけたので紹介します。
その1: AppleScriptでショートカットを直接たたく。
~/.vim/ftplugin/objc_cocoa_mappings.vimを以下の通りに変更します。
削除、もしくはコメントアウトする部分
34行目~36行目
nn <buffer> <silent> <d-r> :w<bar>cal<SID>BuildAnd('launch')<cr>
nn <buffer> <silent> <d-b> :w<bar>cal<SID>XcodeRun('build')<cr>
nn <buffer> <silent> <d-K> :w<bar>cal<SID>XcodeRun('clean')<cr>
追加する部分
最後の方にでもどうぞ。
nn <buffer> <silent> <d-r> :w<bar>cal<SID>XcodeBuildRun<cr>
nn <buffer> <silent> <d-b> :w<bar>cal<SID>XcodeBuild<cr>
nn <buffer> <silent> <d-K> :w<bar>cal<SID>XcodeClean<cr>
fun s:XcodeBuildRun() call system("open -a Xcode ".b:cocoa_proj." && osascript -e '" \ ."tell application \"Xcode\" to activate \r" \ ."tell application \"System Events\" \r" \ ."tell process \"Xcode\" \r" \ ."key code 36 using {command down} \r" \ ."end tell \r" \ ."end tell \r'")
fun s:XcodeBuild() call system("open -a Xcode ".b:cocoa_proj." && osascript -e '" \ ."tell application \"Xcode\" to activate \r" \ ."tell application \"System Events\" \r" \ ."tell process \"Xcode\" \r" \ ."key code 11 using {command down} \r" \ ."end tell \r" \ ."end tell \r'")
fun s:XcodeClean()call system("open -a Xcode ".b:cocoa_proj." && osascript -e '"\ ."tell application \"Xcode\" to activate \r"\ ."tell application \"System Events\" \r"\ ."tell process \"Xcode\" \r"\ ."key code 40 using {command down} \r"\ ."end tell \r"\ ."end tell \r'")
実際、ビルドして実行以外は試していないのですがこれでいけるはず。。。いけなかったらごめんなさい。またこの方法だとcocoa.vimの動作が少し動作が変わってしまいます。
- Command + R = ビルドして実行する(iPhoneシミュレータが起動する)
- Command + B = ビルドしてXcodeに移動する
- Command + shift + K = クリーニングをしてXcodeに移動する。
その2: Xcodeの設定を変更する。
- Xcodeでプロジェクトを右クリックして情報を見るを選択。

- ベースSDKの項目を探して、iPhoneシミュレータを選ぶ。

- アーキテクチャをNavive Architecture of Build Machineに変更する。

こちらの方法の欠点はベースSDKなどやアーキテクチャを変更してしまっているので、注意が必要だったりもします。またCommand + BするにはMakefileのあるディレクトリにあるファイルを編集している必要があるようです。
たかともは方法2の設定をしていますが、お好みにあわせてどうぞ♪
ここまで書いておもったのですが、方法1でやるなら
" ビルドして実行
autocmd! FileType objc nn <buffer><silent> <d-r> :w<bar>call<SID>XcodeCommand('36')<cr>
" ビルドするだけ
autocmd! FileType objc nn <buffer><silent> <d-b> :w<bar>call<SID>XcodeCommand('11')<cr>
" クリーニング
autocmd! FileType objc nn <buffer><silent> <d-K> :w<bar>cal<SID>XcodeCommand('40')<cr>
function! s:XcodeCommand(keycode) call system("open -a Xcode ".b:cocoa_proj." && osascript -e '" \ ."tell application \"Xcode\" to activate \r" \ ."tell application \"System Events\" \r" \ ."tell process \"Xcode\" \r" \ ."key code ".a:keycode." using {command down} \r" \ ."end tell \r" \ ."end tell \r'") endfunction
こんなコードを~/.vim/ftplugin/objc_cocoa_mappings.vimに追加してあげた方がスマートな気がします。ちゃんと動くのか不安ですが。。。。動作報告よろしくお願いします。というわけでMac & iPhoneの開発者のみなさん、iPhone4にむけてがんばりましょ~♪
でわでわ、たかともでした。
追記
上のコードだともcocoa.vimにもともとある関数が呼ばれてしまうみたいです。「autocmd! FileType ~」の部分のの部分を調節して使う。もしくは方法1で削除する部分を消したあとに、上のコードをVimの設定ファイルに追加してください。
2010/06/09:方法1の追加するコードの代わりに上のコードを使うように修正
XcodeでMacのアプリを作っていたんですが、コメントをいれていくときにATOKで入力をしようとするとページの一番下にジャンプしてしまって、とてもめんどくさいことになっていました。とりあえずことえりで入力していたんですが、しか〜し、ようやく解決方法が見つかりました。
Xcodeを32bit-modeで起動する。以上
Xcodeをいったん終了して、Xcode.appを右クリック→情報をみるから32ビットモードで開くにチェックをいれるだけで無事に入力できるようになりました。ふぅ〜、これでことえりともおさらばできる。同じことでお悩みのみなさん。よかったら是非〜。
でわでわ、たかともでした。