Tags : Xcode
このTagsの登録数:5件 表示 : 1 - 5 / 5
Xcode で PHP その3 : Xcode_PHP_Set 公開
前回のエントリ、「Xcode で PHP その2」で、PHPの関数補完を行う方法を書いたが、動作が安定しないし面倒くさい。今回はもうひとつ前のエントリ、「Text Macros」で触れたテキストマクロを利用して関数補完を実現してみた。ファイル一式公開します。使い方はアーカイブ同梱のreadmeを読んでください。補完リストはCotEditorに含まれている定義ファイルをベースにして作成(nakamuxuさんとkazさんに感謝)。これでXcodeがPHPエディタとしてかなり使えるようになった。
Xcode で PHP その2
しばらく放置していたこの話題、光明が見えたかもしれない。
まずデフォルト初期化子付きの関数がリストアップされない問題は、IdentifierCharsに「=」を追加し、「$a=0」と間を開けずに書けばなんとかなった。SourceScanner を Java ではなく JavaScript にすれば問題ないのだが、こっちはこっちで Class を理解できない。
次にコード入力補完。Xcode ODPHPTools があるにはあるが、やっぱり組み込みの Completion を使いたい。試行錯誤して辿り着いたのは次の方法だ。
- ダミーのヘッダファイル(.h)を作り、PHPの定数や関数をC言語としてエラーにならないように細工して宣言する。
- ダミーのソースファイル(.m とか .c など)を追加し、そのヘッダファイルを include する。
- 念のため「Rebuild Code Sense Index」を実行
体裁が整ったら一式公開する予定です。
Text Macros
Xcode 2.0 に Text Macros という機能が付いていた。
「編集」メニューの「テキストマクロを挿入」というのがそれだ。また入力補完にも出てくる。例えは log と打って補完すると NSLog() を挿入できる。Project Builder の頃に使っていた Completion Dictionary に似た機能なのだ。Xcode の最大の不満はこれが使えなくなったことだったので嬉しい。
定義は「Xcode.app/Contents/PlugIns/TextMacros.xctxtmacro」にある。それからもちろん自分で定義を増やせなければ意味がない。TextMacros.xctxtmacro パッケージの Resources の中から適当な xctxtmacro テキストファイルをコピーして「~/Library/Application Support/Apple/Developer Tools/Specifications/」に入れる。xctxtmacro のフォーマットは中を見ればだいたい分かるけれど、Identifier がユニークなものでないと認識されない。コピーして使う場合は注意。Identifier だけでなく BasedOn のところも変えておかないといけない。
追記:
Completion Dictionary、Xcode でも使えるて書いてありますね、、。前に試したときは上手くいかなかったんだがなあ。2.0では ODCompletionDictionary.pbplugin の Info.plist に XCPluginHasUI = YES と追加すると読み込まれた。で、環境設定でキーバインドセットをデフォルト以外にしておくと利かないようなのだ。デフォルトにしたら動いた。Completion Dictionary の方が純正より高速だが、機能は純正の方が充実してる。とりあえずは純正で行くことにする。
Xcodeでphp
今のところphpプログラムは、KEditをちょっと試しつつ結局miで書いている。
第三の選択肢、Xcodeでphpを書く方法を見つけたので書いておく(以下、情報が古くなっています。追記2 を参照してください)。
ProjectBuilderにphpカラーシンタックスやらを追加するWebSiteProj をXcodeで使うのだ。
/Developer/ProjectBuilder Extras/Specifications/
にインストールされていたPHP.pbfilespecとPHP.pblangspecを
/Library/Application Support/Apple/Developer Tools/Specifications/
というフォルダを作ってその中に入れる。場所は当たったようだがconsole.logに(required key SupportsIndentation not present)とか出て上手く行かない。そこで
/System/Library/PrivateFrameworks/DevToolsCore.framework/Resources/
にあるBuilt-in languages.pblangspecやらBuilt-in file types.pbfilespecやらStandard file types.pbfilespecやらを参考にいじってみる。具体的にはPHP.pblangspecに
SupportsIndentation = YES;
Indentation = {
};
と追加したら良いみたいだ。
これでめでたくカラーシンタックスとコード入力補完が達成できた。
だがfunctionの一覧ポップアプが機能しない。これはぜひとも欲しい。もしやと思い
SourceScannerClassName = PBXJavaSourceScanner;
と追加してみたところ見事にポップアップが出てきた。他の不具合が出そうな気もするけど。
Xcodeは文字コード判別能力がゼロなので注意が必要。プロジェクトにファイルを追加するときに正しいエンコーディングを指定してやれば問題ない(と思う)。実際の使い心地はこれから試してみるところなのでまだなんとも(´д`;)。
とりあえずスクリーンショット。P_BLOGのソースを使わせてもらいました。注目はコード補完。自前のfunctionもばっちりリストアップされている。
追記:
Xcodeで新規フィアルを作った場合のエンコーディングが環境設定のデフォルトになってしまう。これはテンプレートを使うことで回避できた。
/Library/Application Support/Apple/Developer Tools/File Templates
の中で適当なpbfiletemplateを複製する。TemplateInfo.plistをいじって説明やファイル名を適宜変更。更に「TextFileEncoding」という項目をふやしてNSString.hで定義されている数字を入れる。EUC-JPは3、UTF-8は4。
<key>TextFileEncoding</key>
<integer>3</integer>
みたいに。で、新規作成時にこのテンプレートを選べば大丈夫(みたい)。
説明だけじゃわけわからないのでそのうちファイル公開しようかな、と。
追記2:
WebSiteProj がなくなってるだか古くなっただかで、PHP Syntax highlighting in XCode 1.5 fix を使う方が良いみたいだ。ただしアンダーバー付きの関数を拾ってくれないので、SyntaxColoring の dict に IdentifierChars と IdentifierStartChars を追加。値は「_$」。って、いじるの面倒くさいだろうから fix して転載。これでもまだデフォルト初期化子付けてる関数は拾ってくれないんだよね。けっこう致命的。
Xcode_PHP_Specifications_fix_fix.zip
追記3:
テキストマクロによる関数補完定義ファイルも追加した Xcode_PHP_Set を公開しました。
Cocoaプログラミング必須アプリ、Cocoa Browser SNの新バージョン(2.4)が出ていた。このアプリケーション、NSDocumentを使っているのに新規にウインドウを作る方法が見当たらない。が、nibを編集するだけで複数ウインドウに対応できる。Interface BuilderでMainMenu.nibを開き、メニュー項目を作ってFirst ResponderのnewDocument:に繋ぐだけ。何か不具合があるからシングルウインドウにしているのかもしれないけれど、特に問題なさそうである。ついでにウインドウをUnified lookにしてみた。新機能のAPI検索は使いにくいな。
さて本題。XcodeにもAPIリファレンスは付いているのだが、Cocoa Browserのようにメソッドごとに切り取らず、クラスごとのHTMLをそのまま表示するため、視認性が良くない。WebKitで実装されているので、UserStyleSheetで見やすくしようという試み。以下のようなcssを書いた。
div.mach4 { /* method name Xcode 2.2 ならこっち*/ h3.tight { /* method name Xcode 2.3 ならこっち */ margin:64px -8px 0px -8px !important; padding:6px !important; font-size: 14px !important; font-family: "Bitstream Vera Sans Mono", courier, monospace !important; border-top:1px solid #d6ddee !important; border-bottom:1px solid #d6ddee !important; background:#f0f5f9 !important; color:#333333 !important; }code {
font-size: 12px !important;
font-family: "Bitstream Vera Sans Mono", courier, monospace !important;
}
Cocoa APIのHTMLは構造が酷く、カスタマイズできる箇所は限られる。辛うじてメソッド名が<div class="mach4">で囲ってあるのでここを攻める。左右marginをマイナス値にすることで、背景色が端まで塗られるようにする。margin-topを多めにとって視認性を向上。これを適当な場所に保存して、Terminalで以下を実行。
で、上記のCSSを適用するとこうなる。いい感じになりました。