XCode

XCodeの64Bit対応

SmultronへのNKFCocoaの組み込み時に発見した「?」な現象。

エンコーディングリストのポップアップを作成する処理で、

NSArray      *encodingsArray = [SMLBasic fetchAll:@ "EncodingSortKeyName"];
NSEnumerator *enumerator     = [encodingsArray objectEnumerator];
id            enc;
while ((enc = [enumerator nextObject]) != nil)
  {
    if ([[enc valueForKey : @ "active"] boolValue] == YES)
      {
        [popup addItemWithTitle :[enc valueForKey : @ "name"]];
        [[popup lastItem] setTag :
          [[enc valueForKey : @ "encoding"] unsignedIntegerValue]];
      }
  }

というコードがあるんですが、このうちポップアップにsetTagするときに最初は、

XCodeでgdbコマンドを使うと意外と快適

in

XCodeのデバッガウィンドウではgdbのコマンドが使えますが(というかモロgdbプロンプトでてます)、大抵のことはXcodeのIDE内でコト足りていたのでこれまであまり使っていませんでした。それでこのお正月に、フト思い立ってデバッグコンソールを使ってみたら意外と快適でした。

単純なことなんですが、一度n(ext)タイプすれば、しばらくは[Enter]キートントンでステップ実行できるのが一番快適。やっぱマウスに手を伸ばすのはリズムが乱れるものだし、クリック位置を間違えたりすることが多くて最初からやり直したりなんてことがなくなります。デバッグ作業も、乗ってくる(?)とリズムが大事だから僕にとっては結構重要。あと、昨日まで知らなかったんですがpo(print-object)コマンドでオブジェクトをプリントすることもできますね。対象のオブジェクトが対応していればの話なんだけれどNS**は大抵対応しているみたいだし、IDE内でスクロールして欲しい値を探すなんてことは今日からはしないかも。

まぁ、なにより"gdbコマンドを使いこなしている感"がちょっと出て、ギークっぽい気分を味わえるところがいいですよ。

XCodeの環境変数の一覧

in

以前、Scripting Bridgeついて調べていたときBridge用のヘッダファイルを生成するのにXCodeのビルドフェーズでカスタムスクリプトを追加してScripting Bridge用のヘッダーファイルを生成するというテクニックがAppleのサンプルにあって、それは

UnitTest XCode2.5

先日のエントリで書いた、CocoaのUnitTestについてはLoepard(XCode3)環境でのことだったのですが、同じプロジェクトでTiger(XCode2.5)環境ではうまくいきませんでした。テストターゲットのビルド設定をそれなりにしないと正しく動作しません。

例えばテスト対象としたクラスではキーチェーン操作のためのコードが入っていたりlibcryptoのblowfish系の関数を使ったりしているためSecurity.Frameworkやlibcryptoにリンクする必要があるのですが、これらはテストターゲットでもリンクの必要があります。また、肝心のテスト対象クラスファイルもテストターゲットに追加しないとリンクできませんでした。仕方がないのでリンクのほうはOTHER_LDFLAGSに、テスト対象クラスはテストターゲットの「ソースファイルをコンパイル」にドラッグしました。

uncrustifyをXCodeで便利に使う

perlのモジュールにperltidyっていうのがあってこれが重宝しています。大昔、perlに挫折した理由のひとつにあまりにもコードが汚くなりすぎるっていうのがあったんですが、こいつを使えばいつでも自分好みのコードに整形できて精神的にはとっても安定します。(僕は根がいい加減なくせにコードのインデントには結構こだわるところがあって、2タブじゃないと嫌だとかブレースはGNUスタイルが好きだとかいろいろあるんですが、やっぱりチャランポランな性格ゆえ誰かのコードを拝借してペーストとかしているうちコードスタイルもちゃんぽんになってきてある日思い立って「よし!修正しよう!」とか思ったりもするんですがコミットコメントに「インデントの修正」とか書いていたら嫌がられるだろうなぁなどと思って放置していたりする人間なんです。←長すぎる注釈)

それで、Objective-Cでもこういうモジュールないかなって探してみたらありました。uncrustify。で早速、試してみると結構イイ。*.cfgの内容はまだカスタマイズしていないけどデフォルトで付属していたgnuスタイルでそこそこ満足できるのでこれをベースにカスタマイズする予定です。

後は使い方なんですが、perltidyの場合ほぼ100%viでの編集なんで:%!perltidyで実行していますがObjective-Cの場合はやっぱりXCodeがメイン。いちいちターミナルを開くのもなんだしユーザスクリプトメニューから実行すれば便利です。スクリプトは簡単で、

CocoaのUnitTest

これまでの職歴では大規模開発中心で大抵は発注元の大手ベンダーがチームを作ってテストをすることが多くて単体テストってあまり身近なものじゃなかったんだけれど、今は大規模開発なんて無縁だし、僕が書いたコードをデバグしてくれるのは僕一人という状況だから開発サイクルにうまくテストを組み込むのは必須事項なんです。

さりげなく便利なXCode3のリファクタリング

in

あまりリファクタリングなんてことを意識したことないんですが、コードを書いている途中であぁ、このメソッド名があまり適切でないなぁなんて思うことはダメプログラマの僕にはしょっちゅうあって、面倒だからそのままでいいやって時もたまにあったりして反省しなきゃいけないんですが、たまにはどうにも我慢がならなくなって「よし、全部変更しよう!」とか思ったりもするわけです。

Mac Dev Centerがわかりにくい

in

仕事でXCode2.xが必要になって探したのだがなかなか見つからない。どこから行っても最終的にはXCode3.xへたどり着いてしまう。あぁ、また「もうTigerなんか止めなよ」っていうAppleの暗示かと思ったのですがありました。

doygenでmanpageを自動生成

コマンド類のドキュメントはdocbook+xsltで作成していたのですが、いまひとつ面倒なのでdoxygenメインに切り替えました。マシンの再セットアップ後はインストールすらしていなかったので改めて最新版をゲット。以前はビルドで苦労したのですがfixされているようです。manpageには関係ありませんが、htmlドキュメント作成もあり得るのでgraphvizもインストールしています。

XCodeでSpotlightインポーターをバンドルする方法

SpotLightインポーターのデプロイは

  • MyApp.app/Contents/Library/Spotlight
  • /Library/Spotlight
  • ${HOME}/Library/Spotlight

のいづれかに配置するわけですが、MyApp.app配下以外に配置するとなると別途インストーラ作成するなどの手間がかかるので通常はアプリケーションにバンドルします。バンドルするにはターミナルから

コンテンツの配信