Ctrl + Cmd + ↑ ですべてのメソッドを折りたためる。
全展開は Ctrl + Cmd + ↓
単独は Ctrl + Cmd + ←/→
MacOSXプログラミング。毎日更新。 話題: Cocoa, Objective-C, Snow Leopard
Xcode ではテキストマクロが使える。
Xcode ショートカット
Xcodeのショートカットについてネットで調べると紹介サイトが結構あった。中でも Cocoa Samurai の Shortcut Lists は大作。見た目も美しい。当初は自分でまとめようと思ったがこれがあれば十分。
Cocoa Samurai: Complete Xcode Keyboard Shortcut List (UPDATED)
(前回)Cocoaの日々: Xcodeでビルドする時にファイルをコピーする(ビルドフェーズの追加)
前回ビルド時にプラグインをコピーするビルドフェーズを追加した。今回はこれに Safri を再起動するビルドフェーズを追加してみよう。
Safariを再起動するにはシェルスクリプトを使う。Safariの起動は open コマンドを使うとして、停止はどうやればいいのか。特に情報がみつけられなかったので UNIX標準の kill コマンドを使ってみた。
この kill コマンドには引数にPID(Process ID)を渡す必要がある。PIDは ps コマンドで取得できる。
ターミナル.app で "ps -A" を実行した時の結果例。
$ ps -A|grep Safari.app|grep -v grep|awk '{print $1}' 1487
$ ps -A|grep Safari.app|grep -v grep 1487 ?? 2:04.69 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_606356 1503 ?? 0:24.18 /Applications/Safari.app/Contents/Safari Webpage Preview Fetcher /Users/hashi/Library/Caches/com.apple.Safari/Webpage Previews/Incoming 2097152 183500800 /Users/hashi/Library/Caches/com.apple.Safari/
$ ps -A|grep "/Applications/Safari.app/Contents/MacOS" | grep -v grep|awk '{print $1}' 1487
#!/bin/sh ps -A|grep "/Applications/Safari.app/Contents/MacOS" | grep -v grep|awk '{print $1}' | xargs kill open -a Safari※ps の箇所は実際は1行。
$ chmod +x restart_safari.sh
./restart_safari.sh
Safari用プラグインの開発を行う場合、(1)ビルド (2)プラグインフォルダへコピーという2種類の操作を繰り返す必要がある。(2)は手作業が必要。シンボリックリンクを使う方法もあるが、今回は Xcodeのビルドフェーズの機能を使ってこの(1)(2) を一緒に実行するように設定してみた。以下、手順のメモ。
初期状態ではこのようなビルドフェーズで構成されている。
今回開発する BlogAssistant はSafari のプラグインを予定しているが、開発途中の動作確認をいちいち Safariに読み込ませて行うのは非効率このうえない。とはいっても別途検証用のアプリを作るとソースコードの管理が面倒になる。1つのソースコードでプラグインと検証用アプリの2つをビルドできたら便利だ。実はXcodeはそれができる。今回はこの話題を扱う。
ターゲット
Xcode ではソフトウェア開発の最終成果物のことをターゲットと呼んでいる。このターゲットは新規にプロジェクトを作成する時に用意されているテンプレートを使うと標準で1つ用意される。
(例)
XCode3.2 から Cocoaアプリケーションテンプレートを使って新規にプロジェクトを作成すると App Delegate が用意されるようになった。
以下は BlocksStudy というプロジェクトを作成した時の様子。BlocksStudyAppDelegate というクラスが自動的に用意された。
BlocksStudyAppDelegate.h
@interface BlocksStudyAppDelegate : NSObject{
NSWindow *window;
}
@property (assign) IBOutlet NSWindow *window;
@end
@implementation BlocksStudyAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
@end
Xcodeのエディタはコマンドキーを押しながら単語の上でダブルクリックすると、その単語を含むヘッダファイルを開くことができる。
下の図は CGWindowListCreateImage の上でコマンドキーを押しながらダブルクリックした様子。
CGWindow.h のファイルが開かれ、該当関数の個所が表示される。
Cocoaのクラスはそうでもないが、それ以外の関数系はヘッダファイルの説明が詳しく書かれていているので引数の意味を調べる時に重宝する。コーディングしたメソッド名やクラス名が正しいかどうかの簡易チェックもできる(ヘッダが開かないと存在しない=間違っているということ)。それ以外にも、クラスのメソッドを調べたい(思い出したい)時などいちいちリファレンスを開く手間を省ける。
該当ヘッダが複数ある場合は候補を挙げてくれる。