ページ

ラベル xcode の投稿を表示しています。 すべての投稿を表示
ラベル xcode の投稿を表示しています。 すべての投稿を表示

2010年5月10日月曜日

Xcode で全メソッド折りたたみ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Ctrl + Cmd + ↑ ですべてのメソッドを折りたためる。


全展開は Ctrl + Cmd + ↓
単独は Ctrl + Cmd + ←/→


意外と使えるかも。

2010年3月20日土曜日

Xcode Tips - Text Macro

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Xcode ではテキストマクロが使える。


メニューから選べる他、C や Objective-C, C++ では補完用文字列も用意されている。

例えば dealloc と入力して ESC キーもしくは Ctrl+. を押すと -[dealloc]のブロックが展開される。
他にも "fora" - Array For Loop
"fori" - For i Loop
"switch"
"log"
などがある。

詳しくは下記にある。
Mac Dev Center: Xcode Workspace Guide: The Text Editor

補完には若干のルールがあって、例えば alloc/init は "a" で補完されるが、これは代入文の時に現れる。
としておいて Ctrl + . を3回押すと

2010年1月19日火曜日

Xcode Tips - ショートカットと「範囲内のすべてを編集」

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Xcode ショートカット

Xcodeのショートカットについてネットで調べると紹介サイトが結構あった。中でも Cocoa Samurai の Shortcut Lists は大作。見た目も美しい。当初は自分でまとめようと思ったがこれがあれば十分。

Cocoa Samurai: Complete Xcode Keyboard Shortcut List (UPDATED)






「範囲内のすべてを編集する」

ショートカットを調べているうちに Xcodeで面白い機能を見つけた。

Xcode Workspace Guide の中の Editing Symbol Names
Mac Dev Center: Xcode Workspace Guide: The Text Editor

日本語版 Xcodeだと「編集」メニュー内の「範囲内のすべてを編集する」がそれにあたる。これは現在のコードブロック(試したところメソッドや関数の範囲 => そうでもなさそう。メソッドにまたがって働いたケースあり)内で、指定したシンボルを同時に変更する機能。同等の機能にリファクタリングの名前変更やシンボル置換があるが、こっちの方は範囲が限定されるのとダイアログを開くこと無く通常の編集操作の中でできるところが異なる。

以下、動作イメージ。

まずエディタで変更したいシンボルを選択する。

「編集」メニューから「範囲内のすべてを編集する」を選択する。ショートカットキー「ctrl + command + T」でもいい。


するとメソッド内の該当するシンボルすべてが選択された状態になる。



この状態でシンボルを書き換えると他のすべての位置にあるシンボルも書き換わる。


なおシンボル上にマウスを置いてしばらくすると三角アイコンが現れるので、そのメニューから呼び出すこともできる。


また「範囲内のすべてを編集する」モードに入っている時に ctrl + / を押すと、次の選択位置へカーソルが移動する( sfhit + ctrl + / で逆方向)。置換そのものよりもこっちの方が便利かもしれない(シンボルが使われている位置を手早く確認できる)。

2010年1月7日木曜日

XcodeでSafriの再起動〜シェルスクリプトをビルドフェーズへ追加

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

(前回)Cocoaの日々: Xcodeでビルドする時にファイルをコピーする(ビルドフェーズの追加)

前回ビルド時にプラグインをコピーするビルドフェーズを追加した。今回はこれに Safri を再起動するビルドフェーズを追加してみよう。

Safariを再起動するにはシェルスクリプトを使う。Safariの起動は open コマンドを使うとして、停止はどうやればいいのか。特に情報がみつけられなかったので UNIX標準の kill コマンドを使ってみた。

この kill コマンドには引数にPID(Process ID)を渡す必要がある。PIDは ps コマンドで取得できる。

ターミナル.app で "ps -A" を実行した時の結果例。



grep と awk をパイプでつなぎ Safari.app の PID を得る。"grep -v grep" は grep実行自身を除くために入れてある。

$ ps -A|grep Safari.app|grep -v grep|awk '{print $1}'
1487

ただ見ているとたまに Safariは子プロセスを起動しているようで Safari.app だけでは複数のプロセスがヒットする。
$ 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

良さそうだ。シェルスクリプトを作成して実験してみる。

ファイル名:restart_safari.sh
#!/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



これを Xcode のビルドフェーズへ組み込む。

まず新規ビルドフェーズ「新規スクリプトを実行」を追加する。

情報を開き、先程のコマンドスクリプトを書き入れる。


これだけ。

ビルドするとコンパイル・リンクが終わった後、Safari が再起動された。

2010年1月6日水曜日

Xcodeでビルドする時にファイルをコピーする(ビルドフェーズの追加)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Safari用プラグインの開発を行う場合、(1)ビルド (2)プラグインフォルダへコピーという2種類の操作を繰り返す必要がある。(2)は手作業が必要。シンボリックリンクを使う方法もあるが、今回は Xcodeのビルドフェーズの機能を使ってこの(1)(2) を一緒に実行するように設定してみた。以下、手順のメモ。


初期状態ではこのようなビルドフェーズで構成されている。



ここにコピーのビルドフェーズを追加する。右クリックして「新規コピーファイル」を選択する。

最後に「ファイルをコピー」が追加される。


情報を開きコピー先(デスティネーション)を設定する。

「絶対パス」を選び、コピー先にプラグインフォルダを指定する。


次にコピー対象のファイルを選択する。"Products" 配下にターゲットファイルがあるので、これをドラッグ&ドロップして追加する。


これでビルド時にコピーが行われるようになった。


実際にビルドするとコピーが実行された。



- - - -
あとは Safari の再起動ができると便利。これはまだ試していない。

2009年12月24日木曜日

Plug-in開発で検証・テスト用環境を作る〜 Xcodeで複数のターゲットを設定する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

今回開発する BlogAssistant はSafari のプラグインを予定しているが、開発途中の動作確認をいちいち Safariに読み込ませて行うのは非効率このうえない。とはいっても別途検証用のアプリを作るとソースコードの管理が面倒になる。1つのソースコードでプラグインと検証用アプリの2つをビルドできたら便利だ。実はXcodeはそれができる。今回はこの話題を扱う。

ターゲット

Xcode ではソフトウェア開発の最終成果物のことをターゲットと呼んでいる。このターゲットは新規にプロジェクトを作成する時に用意されているテンプレートを使うと標準で1つ用意される。

(例)




このターゲットは固定的なものではなく、開発目的に応じて変更したり、複数作成することができる。

今回は1つのプロジェクトでSafari用プラグインと通常のアプリケーションの2つのターゲットを作成してみる。


※以下、Mac OS X v10.5 / Xcode 3.1 での説明。


ひな形の作成(Safariプラグイン用ターゲット)

Xcodeを起動して新規プロジェクトを作成する。テンプレートは WebKit Plug-in を指定し、プロジェクト名を BlogAssistant とする。

動作確認だけしたいのでビルドして Safari へ登録する。build 配下の BologAssistant.webplugin を ~/Library/Internet Plug-Ins/ へコピーする。



Safari を再起動してヘルプメニューの「インストール済みプラグイン」を選ぶ。



表示された。ひな形がちゃんと組み込まれたのがわかる。ビルドは問題なし。


検証用ターゲット

続いて通常のアプリケーションをビルドする為のターゲットを用意する。

まずメニューから「新規ターゲット...」を選ぶ。

テンプレートから Application を選ぶ。

ターゲット名は "BlogAssistant Test App" とした。

完了すると、ターゲットリストに表示される。


*.plist もきちんと用意される。


この時点でビルドメニューにも BlogAssistant Test App が現れる。

ここまででターゲットのひな形ができた。

次は最低限アプリケーションが動く為の設定を行う。

まず main.m を作成する。これは他のアプリケーションからコピーしてくれば良い。


情報を開き、ターゲットのタブ内で BlogAssistant Test App へチェックをつけておく。一方 BlogAssistant(プラグイン用ターゲット)からはチェックを外しておく。こうするとビルド時に適切に処理される。



続いて XIB の追加。動作確認を兼ねてウィンドウを表示させたいので用意しておく。

名前を MainMenu.xib とする。こうすると起動時に自動的に読み込まれる(このファイル名は *.plist の "Main nib file base name" エントリに記載されている)。またターゲットの BlogAssistant Test App へチェックを入れておき、一方プラグイン用ターゲットの方からは外しておく。

ウィンドウを一つ追加する。

ここまででターゲットのリストを見ると BlogAssistant Test App の方にも数字が出てくる。これはビルド時に各フェーズで処理対象となるファイルの数。先ほどターゲットのチェックボックスの状態がここへ反映される。クリックすると対象となるファイルを確認することができる。



さてビルドしてみよう。アクティブターゲットに BlogAssistant Test App を指定してビルドを実行。

そして実行すると..

出た。

- - - -
これで試行錯誤しつつプラグイン開発が進められそうだ。
※プラグイン自体のデバッグはまた別の話題

2009年9月9日水曜日

XCode3.2で App Delegate が用意されるようになった

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

XCode3.2 から Cocoaアプリケーションテンプレートを使って新規にプロジェクトを作成すると App Delegate が用意されるようになった。

以下は BlocksStudy というプロジェクトを作成した時の様子。BlocksStudyAppDelegate というクラスが自動的に用意された。


BlocksStudyAppDelegate.h

@interface BlocksStudyAppDelegate : NSObject  {
NSWindow *window;
}

@property (assign) IBOutlet NSWindow *window;

@end


NSWindow のアウトレットがプロパティとして用意されている。


BlocksStudyAppDelegate.m
@implementation BlocksStudyAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}

@end


applicationDidFinishLaunching: のひな形が用意されている。


InterfaceBuilder にもちゃんとインスタンスが登録されていて、File'sOwner(NSApplicationインスタンス)の delegate先に指定されている。



iPhone のテンプレートに近くなったようだ。

- - - -
検証目的なら今まで作っていた AppCotnroller は不要になるな。

2009年2月21日土曜日

xcodeリファクタリングはnibも対象

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Xcodeのリファクタリング機能の名称変更は Nibファイルも対象にしてくれる。

例としてアウトレットでビューに接続しているメンバ変数の名称を変更してみる。

IBOutlet NSTabView* _tab_ivew;

_tab_ivew を _tab_view に変更する。

変数名を選択してコンテキストメニューからリファクタリングを選ぶ。


すると変更対象がリストアップされる。名称変更する変数がアウトレットの場合Nibファイル内も検索してくれる。


適用後にNibファイルを開いて確認すると変更されていた。



キチンと作ってあって片手落ちになっていない。便利だ。

2008年4月2日水曜日

Xcode - ヘッダファイルを開く

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Xcodeのエディタはコマンドキーを押しながら単語の上でダブルクリックすると、その単語を含むヘッダファイルを開くことができる。

下の図は CGWindowListCreateImage の上でコマンドキーを押しながらダブルクリックした様子。



CGWindow.h のファイルが開かれ、該当関数の個所が表示される。

Cocoaのクラスはそうでもないが、それ以外の関数系はヘッダファイルの説明が詳しく書かれていているので引数の意味を調べる時に重宝する。コーディングしたメソッド名やクラス名が正しいかどうかの簡易チェックもできる(ヘッダが開かないと存在しない=間違っているということ)。それ以外にも、クラスのメソッドを調べたい(思い出したい)時などいちいちリファレンスを開く手間を省ける。

該当ヘッダが複数ある場合は候補を挙げてくれる。