Xcode テンプレートに関するメモ

  テンプレートを作った人の数だけやり方があるので、正攻法はありません。
使用する言語や、依存するライブラリ、用途によって用意するテンプレートが違ってきます。

テンプレートとは各テンプレートの構成と内容/番外:C# の Xcode テンプレート作成記+ X11起動時の設定Tips

テンプレートとは

テンプレートは、Xcodeのプロジェクトのひな形となる、特殊なタグが埋め込まれたプロジェクトの事です。 Xcodeで開発するためには必須ですが、CocoaやCarbon アプリケーションを普通に開発するぶんには、既に用意されたものを使えばいいので、テンプレートのことを気にする必要はありません。

しかし、新しくプログラミング言語やライブラリを導入して、それを使ってXcodeで開発可能にするには、新規にテンプレートを用意しなければいけません。

(ライブラリの中には、ライブラリのインストール時のオプションとしてテンプレートが用意されていたり、
誰かが、そのプログラミング言語用のテンプレートを作って公開されている場合もあります。)

テンプレート作成(Xcodeでの開発)に向いているもの
  • nib ファイルを使ったGUI アプリケーション
  • .plist 、 .lproj 、 .nib ファイルなど、ビルドに多くのリソースや設定ファイルが必要なもの

    テンプレート作成(Xcodeでの開発)に向いていないもの
  • ターミナルからコマンドを打ち込む方が圧倒的に簡単なもの
  • ターミナル上での開発手段(makeifleやオプション)が充実しているもの
  • テンプレートは、特殊なタグをマクロで置き換えることで、一貫したコード生成が行われます。
    また、ビルドに必要なファイル、設定、コマンドが書かれたスクリプトが準備されています。

    いざ新しくテンプレートを作るのは大変でも、一旦作ってしまえば使い回しが効きます。
    ファイルを準備したり、面倒なコンパイル設定をする必要がなくなります。

    Xcodeをインストールした場合、以下の場所にテンプレート関連文書があります(英語)
    /Developer/Extras/Xcode Index Templates/Index Templates ReadMe.rtf

    概要

    MacOSX 10.4.6 、Xcode2.2 の場合、
    テンプレートは、/Library/Application Support/Apple/Developer Toolsディレクトリに含まれています。

    テンプレート関連のディレクトリは、以下のとおりです。
  • Specifications
  • Project Templates
  • File Templates
  • Target Templates
  • IB Templates
  • Quartz Composer
  • 必要と考えられる構成(1つの例)
    新しくプログラミング言語を追加し、それを使って Xcodeでも開発したい
  • Source File と Language の Specification (言語と拡張子の関連付け と 単語の色付け )
     〜.pbfilespec 、〜.pblangspec
  • Project Templates( 実際のソースコード と プロジェクトファイル )
      〜.xcodeproj 、source_code.ext

    C言語用のライブラリを追加し、それを使ってXcodeでも開発したい
  • Project Templates( 実際のソースコード と プロジェクトファイル )
     〜.xcodeproj 、source_code.ext
  • ( ソースコードの拡張子 .ext は言語によって様々です。)

    ■Project Templates の 標準テンプレート

    コマンドラインで動作するアプリケーションの開発プロジェクトを作成する場合、 そのテンプレートを作るには、Command Line Utility にある標準テンプレートを元に手を加えるらしい。OSX10.4.6、Xcode2.2をインストールした環境では、StandardTool.xcodeproj または StandardTool.pbproj で検索をかけるか、
    /Library/Application Support/Apple/Developer Tools/Project Templates/Command Line Utility/Standard Tool/
    を探すとあります。

    .pbproj と、.xcodeproj 二種類あるのは Xcodeが ProjectBuilder時代だった頃の名残りです。 Xcode を使っている場合は、.xcodeproj が一般的。(古い形式のものを読み込むと自動的に新しいものに変換します。) そのほかにも、ひな形のひな形として使えるテンプレートがあるかもしれません。

    ■特殊な埋め込みタグ

    Xcodeで使うテンプレートを作成する際には、ひな形にするファイルに作者名や作成日時、プロジェクト名などの情報を自動的に置き換えるための タグを埋め込む必要があります。これらタグは特殊な括弧によって括られたキーワードとして記述されます。 (タグの括弧は「1文字」から成る二重カッコです。「<<」「>>」←こんな感じの。)
    タグの例↓
    «PROJECTNAME»

    プロジェクト名(PROJECTNAME)に指定した名前を、ソースのファイル名に反映させるには、
    «PROJECTNAME» .c
    «PROJECTNAME» .hpp

    このように書いたりします。

    ■編集に使えるエディタ

    タグや内容は、ProjectTemplate にある Info.plist (XMLファイル) や FileTemplate で用意する、ソースコードやヘッダファイルのひな形に記述されます。 これらは、 テキストエディタなどを使って編集することができます。
  • ヘッダやソースファイルは、テキストエディタが使えます
  • ProjectTemplate.plist (XML形式)なら OS付属の Priority List Editor 、テキストエディタが使えます。
  • .xcodeproj の内容は、XcodeのGUI上で編集可能です。
    (「ターゲット〜の情報」フォームに記述。(リンカ設定に使うオプションや、ビルド時のカスタムスクリプトなど。)

  • ■ファイルのエンコーディング(文字コード)

    UTF-8か、x-mac-roman というエンコーディングにすると、タグの括弧が文字化けせず、正常に表示されます。
    (このHTMLファイルのエンコーディングもUTF-8にしてあります)

    テキストエディタ mi 2.1.7 は x-mac-roman エンコーディングに対応しています。
    また、Xcode2.2 上でソースのエンコーディングを 欧米 Mac OS-Roman にしても表示できます)。

    ■テンプレート編集の前に知っておくと便利なこと

  • ターミナル上で使用するコンパイラや指定するオプション、ビルド方法。(プログラミング言語によって様々)
  • ターミナル上でアプリケーションを実行する方法。
  • 基本的なUNIXコマンド。
  • バンドルの構造。(Cocoaの場合)
  • パッケージングの方法。(OSXネイティブのアプリケーションを作る場合)
  • アプリケーションの実行パス。(Cocoaの場合)
  • リソースやライブラリ追加した時の指定。(ライブラリの場合)
  • その他資料

    各テンプレートの構成と内容

    ファイル構成は、プログラミング言語やライブラリ、用途によって様々です。
    また、テンプレートファイルを入手しても、意味が分からなかったり、どこに入れたらいいか迷ったときに…。

    MacOSX 10.4.6 、Xcode2.2 の場合、
    テンプレートは、/Library/Application Support/Apple/Developer Toolsディレクトリに含まれています。

    テンプレート関連のディレクトリは、以下のとおりです。
  • Specifications
  • Project Templates
  • File Templates
  • Target Templates
  • IB Templates
  • Quartz Composer


  • ■Specifications

    新しくプログラミング言語をXcodeで使えるようにしたいと考えているなら、
    1言語につきSource File と Language の2つの Specification ファイルを用意する必要があります。
    これらはXcodeでソースを表示したときのキーワードとなる単語の染色や、拡張子との関連づけを定義している。

  • 拡張子:.pbfilespec − Source File Specification
    プログラミング言語と対応する拡張子の関連づけ、使用言語の識別名、プロセスファイルの名称。

  • 拡張子:.pblangspec −Language Specification
    プログラミング言語に使われているシンタックスキーワードがリストされている。ソースコードを分かりやすく色分け表示するための定義。

    例: D言語テンプレートをインストールした場合は 以下の2つのファイルが入っている。
    d.pblangspec
    d.pbfilespec

    このディレクトリには、他に、テキストマクロの定義も入ってたりする(HTMLタグ用)。
  • 拡張子:.xctxtmacro


    ■Project Templates プロジェクトテンプレート

    作成するプログラムの種類に応じて、ディレクトリ分けされています。
    Application , Dynamic Library,Static Library, Bundle, Framework など

    ここに格納されたファイルがプロジェクトの実質的なひな形として使われるようです。
    最低限、.xcodeproj と ベースとなるソースコード の2つが入っていればOK?
    (Cocoa になると、version.plist , main.m, Info.plist, 〜.xcodeproj, 〜p_Prefix.pch, Japanese.lproj 等多くのファイルが必要になる。


  • 拡張子 .xcodeproj (パッケージ)
    .xcodeproj にはビルドに必要な様々な設定が格納されており、Xcode で読み込み、普通にGUI上で編集できます。
    (「ターゲット〜の情報」フォームに記述。(リンカ設定に使うオプションや、ビルド時のカスタムスクリプト)

    このパッケージ内を除くと、2〜4つほどファイルが格納されているのが分かります。
  • 拡張子.pbxproj − プロジェクトの様々な設定が書かれている。直接編集しないほうがいい。
  • TemplateInfo.plist − FilesToMacroExpand マクロ展開の対象ファイルの設定(重要)や、Description。
  • 拡張子.pbxuser − .pbxproj とは別に、プロジェクトに関するカスタム設定が書かれている。必要な場合もある。
    (Descriptionでは、「ファイル」>「新規プロジェクト」の新規プロジェクトアシスタントに表示される説明文。)
  • これらファイルはXcodeで「ターゲット〜の情報」「ファイル〜.c の情報」「ファイルとグループ」ツリー 等を編集するたびに更新されます。

    テンプレート作成時の注意:
  • 「拡張子.xcodeproj」 はXcodeで編集可能。タグも指定可能。その場合、Xcodeで編集後に、TemplateInfo.plist で設定を書き加える。
  • 「拡張子 .pbxuser」 と「拡張子.perspective」のファイルにはユーザー関連の情報が入っている。 テンプレートを作成する場合は不要(例外あり)。
  • 例外:『カスタム実行ファイル項目』を2つ以上用意するテンプレートを作成するなら「ユーザー名 .pbxuser」 ファイルも必要です。 これはカスタム実行ファイルに関するカスタマイズ情報が「ユーザー名 .pbxuser」ファイルに保存されているためです。配布する時には「ユーザー名.pbxuser」 を、「default.pbxuser」 という名前にすると良いでしょう。

  • 拡張子 .c , .m 等 −( テンプレートのソースコード)
    プログラミング言語に対応した Specificationsで関連づけられていれば、その拡張子が該当します。
    対応する拡張子については、各プログラミング言語の仕様が載っている文献を当たって下さい。

    コメント部には、置き換えのための特殊タグが埋め込まれてます。
    «DATE» − プロジェクトを作成した日時
    «PROJECTNAME» − ユーザーが名付けたプロジェクト名
    «FULLUSERNAME» − 作者名(ユーザー名)
    «ORGANIZATIONNAME» − ユーザーの所属(会社名やサークル名など)
    そのほか、プログラムの実行に必要なコードが書かれています。
    hello world のような簡単なものが多いです。

  • 拡張子 .pch , .h , .hpp 等 − テンプレートのヘッダ
    プログラミング言語に対応した Specificationsで関連づけられていれば、その拡張子が該当します。
    プログラミング言語やスクリプト言語によっては、ヘッダが必要ないものもあります。


  • info.plist (XMLファイル)
    Cocoaアプリのプロジェクトのメタデータに関する情報 (属性、ファイル、リソース、パッケージタイプ、バージョン管理情報、署名情報など)

  • version.plist (XMLファイル)
    バージョン情報(Cocoaアプリ)

  • 拡張子 .lproj (ディレクトリ)
    Cocoaアプリの、 GUIの各国語(英語や日本語など)リソースが入っている(nibファイルも)

  • 拡張子 .1(テキストファイル)
    マニュアルファイル (これはコマンドラインで実行するタイプに付属します。)
    拡張子は、数字の1です。コマンドライン上で表示することができます。



    ■Target Templates − ターゲットテンプレート

    作成するプログラムの種類に応じて、ディレクトリ分けされています。
    Cocoa, Carbon, BSD, JAVA...

    中には、拡張子.trgttmpl のファイルが入っています。
    どうやら生成されたプロジェクトの「ターゲットの情報」で表示されるデフォルト設定がこのファイルで設定されているようです。
    SDLのテンプレート例:
    OTHER_LDFLAGS = "-framework Cocoa -framework SDL
    FRAMEWORK_SEARCH_PATHS = "\"$(HOME)/Library/Frameworks\"";
    配布されているテンプレートによって、Target Templates が存在しなかったり、 ターゲット情報が .xcodeproj (.pbproj ) に存在している例もあることから、 ターゲット情報だけを独自に設定したい場合だけ、このターゲットテンプレートを用意するものと思われる。


    ■File Templates− ファイルテンプレート

    言語や環境ごとにディレクトリ分けされている(例外としてBSD、Cocoa,Carbonが区別されている)
    ディレクトリはさらに用途に応じて、拡張子.pbfiletemplateのディレクトリで細分化されています
    この中には、TemplateInfo.plist と、ソースとヘッダのひな形ファイルが入っています。

  • TemplateInfo.plist (XMLファイル)
    テンプレートとひな形ファイルの関連づけ。
    CounterpartTemplateFile: file.h、テンプレートのヘッダ
    Description: テンプレートについての簡単な記述
    MainTemplateFile: file.cpp テンプレートのソース
    上の構成はCocoaやCarbonの場合でC++言語を使うときのものです
    使用言語によっては構成ファイルの種類が全く違ってきます(Ruby等)。


  • 拡張子 .h , .c 等(ソースとヘッダのひな形)
    ここに置かれたファイルは、実際のプログラムコードはほとんど書かれておらず、どれもシンプルなひな形ファイルです。
    プログラミング言語が違っていてもコメント部には共通して 置き換えのための特殊タグが埋め込まれてます。
    «DATE» − プロジェクトを作成した日時
    «PROJECTNAME» − ユーザーが名付けたプロジェクト名
    «FULLUSERNAME» − 作者名(ユーザー名)
    «ORGANIZATIONNAME» − ユーザーの所属(会社名やサークル名など)

    基本コード部分の埋め込み部分
    «FILEBASENAMEASIDENTIFIER» −
    注意:これらの埋め込みタグは、特殊な括弧によって括られたキーワードとして記述されます。
    特殊な括弧は、 UTF-8 か 欧米 Mac OS Roman( x-mac-roman )というエンコーディングなら正しく表示できます。

    このファイルテンプレートがなくてもテンプレートはつくれます。

    ■IB Templates− インターフェイスビルダー・テンプレート

    インターフェイスビルダーのためのテンプレート。
    Cocoa と Carbon 用があり、 各国語にわかれた .lproj ディレクトリに nib ファイルが入っています。
    詳細不明


    ■Quartz Composer

    Quartz Composer 用の クリップとテンプレート(拡張子 .qtz)
    詳細不明

    C# の Xcode テンプレート作成記

    C# の Xcode テンプレート作成に挑戦したときのメモ(コンソールアプリ用です、まだ未完成)


    作成にあたり、参考にした文献:
  • Pascal言語のXcodeテンプレート作成ガイド Free Pascal for Xcode Integration Kit(pascal-central)
  • Xcode project for GBA Development -Xcode で GameBoyAdvance のソフトを開発する- (Cube de GBA develop)
  • CocoaSharp.org の テンプレート と チュートリアル
    (とても参考になりました! )

    テンプレート作成手順


    C#用の Specifications をCocoaSharp.orgから入手しておく。
    この作成記では、C#の ProjectTemplate の作成に挑戦しています。

    雛形をコピーする
    Xcodeをインストールしてから、
    /Library/Application Support/Apple/Developer Tools/Project Templates/Command Line Utility/Standard Tool/
    にある Console tool 用の 標準テンプレート(Standard Tool ディレクトリ)をコピーする。

    コピーしたディレクトリを、CSharptool という名に変更
    このディレクトリの中には、main.c、StandardTool.1、StandardTool.xcodeproj (main.c と、StandardTool.pbproj は使わない) が入っています。
    各ファイル名を StandardTool → CS_console_tool に変更。


    xcodeprojファイルを編集する
    次に、CS_console_tool.xcodeproj をダブルクリックし、Xcode2.2 を起動。
    左ペインの「グループとファイル」の Source フォルダ内、 main.c の参照を削除し、代わりに hello world コードを書いた main.cs を追加。
    // main.cs の中身
    public class Hello{
    public static void Main(){
    System.Console.WriteLine("Hello World!!");
    }
    }
    左ペインの「グループとファイル」の Source フォルダ内、main.cs を選択状態で、「情報」アイコンをクリックし、「ファイル、main.cs の情報」ウインドウを出す。

    特殊タグを埋め込みと、エンコーディングの設定
    「一般」タブの、名前 の欄に、«PROJECTNAME».cs と記入する。なお、ここで設定したファイルのエンコーディングが、新規プロジェクト作成時に反映されます。
    テンプレートのソースコードのエンコーディングと、Xcodeの«PROJECTNAME».cs に対するエンコーディングはそろえた方が無難です。
    テンプレートのソースコードのエンコーディングと、プロジェクト作成時の結果
    ソースコードの
    エンコーディング
    日本語文字列main.csに対する
    エンコード指定
    (Xcode上)
    新規プロジェクト作成後
    エディタでmain.csを表示
    備考(新規プロジェクト作成後)
    UTF-16(BigEndian)含むUTF-16OK日本語を含んだソースのテンプレートならこれが適切かもしれない。
    UTF-8を使っている場合は変換が必要。
    UTF-16(LittleEndian)含むUTF-16NG文字化け
    UTF-8含むUTF-8NG文字化けしないが «TAG» が置き換わらない。ビルドも失敗する。
    UTF-8含まないUTF-8NG文字化けしないが «TAG» が置き換わらない。ビルドも失敗する。
    x-macos-roman含まないUTF-16NG文字化け
    x-macos-roman含まないUTF-8OK新規作成後ならソースコードにUTF-8の日本語文字列を含めることが可能
    x-macos-roman含まないMacOS(欧米)
    x-macos-roman
    OKソースコードに日本語文字列を含ませるにはファイルのエンコーディングを変更する
  • ソースコードには日本語コメントを使わず、 x-macos-roman で作成するのが一番簡単です。

  • Xcodeのエンコーディングの扱い。 再解釈と変換の違い。
  • 再解釈:他のエンコーディングでそのまま読み込む(解釈させる)。
  • 変換:他のエンコーディングに変換する(変換不能な場合もある)
    UTF8 と x-mac-roman 間は再解釈が可能だったりもする。
    「public class honwaka」UTF8 → UTF-16に再解釈 = UTF-16文字化け「敡瑥搠批攠歯」失敗
    「public class honwaka」UTF8 → UTF-16に変換 = UTF-16に変換されるのでOK「public class honwaka」

    UTF-16文字化け「敡瑥搠批攠歯」 → UTF-8に再解釈 = UTF-8に変換されてOK「public class honwaka」
    UTF-16文字化け「敡瑥搠批攠歯」 → UTF-8に変換 =UTF8 さらに文字化け「敡瑥搠批攠歯」失敗
    他のエンコーディングに変更したい場合は「変換」を用いた方が良いです。


    ビルド、コンパイル用のコマンドを書く
    通常は、GCCに任せているこの部分、C#では専用のコンパイラ gmcsを使ってコンパイルします。そのため、コンパイルのためにカスタムスクリプトを書かなければいけません。 これは、コマンドライン上でコンパイルする時に打ち込むものと一緒です。

    Xcodeで、ターゲットの情報を見るために「グループとファイル」ツリーの、ターゲット> «PROJECTNAME» を選択、情報アイコンで「ターゲット、 «PROJECTNAME» の情報」ウインドウを出す。 「ルール」タブを選択し、▼DATA model compiler rule を選ぶ。

    (この時、ビルドルールのコピーを作りますか?と聞かれるので、はいを選択)
    同時に、カレントディレクトリにbuild ディレクトリが作成されます。これはテンプレート配布時は不要なので後で削除して下さい。

    CSharp Source Files(スクリプトを使用)を設定します。

    ▼CSharp Source Files(スクリプトを使用)
    プロセス: CSharp source files
    使用: カスタムスクリプト
    MACOSX_DEPLOYMENT_TARGET="10.4" 
    rm -f ${TARGET_BUILD_DIR}/${INPUT_FILE_BASE}.exe
    /usr/bin/gmcs  -d:MACOSX -t:exe  -unsafe -codepage:utf8 -out:${TARGET_BUILD_DIR}/${INPUT_FILE_BASE}.exe  ${INPUT_FILE_NAME}
    
    (コンパイルは gmcs でも mcs でも確認しました。)

    出力ファイルを、
    ${TARGET_BUILD_DIR}/«PROJECTNAME»
    ${TARGET_BUILD_DIR}/${INPUT_FILE_BASE}.exe
    ${TARGET_BUILD_DIR}/${INPUT_FILE_BASE}
    
    (カスタムスクリプトでは、 echo や chmod 等も使える。)

    カスタムスクリプトを設定する時の注意
    Xcode2.2ではビルド時に Debug、Deployment 別に自動的にディレクトリが作成されるため少々厄介である。 しかし、ターミナルからビルドする時のコマンドやコンパイラオプションの書式が分かっていればそんなに苦にならないと思う。 ファイルパスが把握しにくいけれども、他のテンプレート等を参考に ${TARGET_BUILD_DIR}などの変数をあてはめていこう。


    終わったら、一旦、Xcodeを終了します。


    TemplateInfo.plistを編集する
    それから、Finder から、CS_console_tool.xcodeproj を選択し「パッケージの内容を表示」で開きます。
    中に 拡張子 .pbxuser と、拡張子.perspective のファイルがあれば、不要なので削除する。

    他にTemplateInfo.plist というXMLファイルが見つかるので、それを priority List Editorか、テキストエディタで開く。
    Description を書き換える(この内容が、新規プロジェクトを選択時に表示される)。
    FilesToMacroExpand に、"«PROJECTNAME».cs" を追加する。以下のようになります。
    {
    	FilesToRename = {
    		"CS_console_tool.cs" = "«PROJECTNAME».cs";
    		"CS_console_tool.1" = "«PROJECTNAME».1";
    	};
    	FilesToMacroExpand = (
    		"«PROJECTNAME».cs","«PROJECTNAME».1"
    	);
    	Description = "This Project builds a command-line tool  written in C#  :-) ";
    }
    
    ※CS_console_tool.xcodeproj をダブルクリックして直接 Xcode で読み込んだ場合 TemplateInfo.plist が元に戻っている可能性があります。 テンプレートファイルを入れて、試す前に必ず、 FilesToMacroExpand の内容をチェックするように。 FilesToMacroExpand でファイルを指定しないと、«PROJECTNAME»タグが置き換わらず、そのまま残ってしまう。 もし、元ファイルが «PROJECTNAME».cs になってたら、CS_console_tool.cs にリネーム。


    最後の仕上げ
    最後に、CSharptool ディレクトリに
    CS_console_tool.1、CS_console_tool.xcodeproj、CS_console_tool.cs
    が入っているか確認し Xcodeのプロジェクトテンプレートのあるディレクトリに
    /Library/Application Support/Apple/Developer Tools/Project Templates/Application に、入れる。

    Xcodeを起動してから、プロジェクト開く(.xcodeprojをダブルクリックしてはいけない。メニューから、ファイル>新規プロジェクト作成)。
    新規プロジェクト作成アシスタントに従い、CSharptoolを選択し、適当なプロジェクト名で、新規プロジェクトを作成する。



    ▼CSharp
      CSharptool

    新規プロジェクト作成アシスタント画面でCSharp カテゴリのサブメニューとして表示させたければ
    /Library/Application Support/Apple/Developer Tools/Project Templates/Application に、
    CShap ディレクトリを作って、その中に CSharptool ディレクトリを入れるようにします。

    テンプレートのデバッグ
    テンプレートのデバッグは、作ったテンプレートをもとに新規作成したプロジェクトを実際にXcode上で動作させてみることです。
    Xcodeのビルドログや、エラーログを確認しながら行うとやりやすいです。

    もし不具合があれば、作成プロジェクトを修正しつつ、元のテンプレートに対しても同じように修正していきます。 元のテンプレートプロジェクトをXcode のGUIで修正する場合は、修正後に、必ず TemplateInfo.plist の内容を修正しておかないとファイル名やマクロが置き換わりません。
    自分はこの段階で何度もつまづいてしまいました。


    最終的にテンプレートがうまく機能したら成功です。
    コンパイル、ビルド、Xcodeの「ビルドと実行」のアイコンを押した時に ビルドしたアプリケーションが起動可能になれば成功です。

    さらに、続き↓

    System.Windows.Formsを使った C# の GUI アプリケーション


    System.Windows.Forms を使ったC#アプリケーションを実行する場合はX11環境でなければいけないらしい。
    // Winform による Hello World (X11用)
    // main.cs ソースコード
    using System;
    using System.Windows.Forms;

    public class test{
    public static void Main(){
    MessageBox.Show("Hello World!!");
    }
    }
    Xcodeのカスタムスクリプトでは、コンパイル時に Mono の System.Windows.Forms.dll を参照しています。
    /usr/bin/gmcs -d:MACOSX -t:exe -unsafe -out:${TARGET_BUILD_DIR}/${INPUT_FILE_BASE}.exe ${INPUT_FILE_NAME} /r:System.Windows.Forms.dll /r:System.dll /r:System.Drawing.dll -codepage:utf8

    /usr/bin/open-x11 xterm
    C#コンパイル時のオプション等

  • -codepage:utf8 オプションを含めないと、日本語が表示されません。

  • C# で、using System; 、 using System.Drawing; も使うには
    カスタムスクリプトのコンパイル時のオプションに、 /r:System.dll 、/r:System.Drawing.dll も参照として追加します。
  • 実行してほしくない行やメモを入れる場合は、その行を # コメントアウトします。

    /usr/bin/open-x11 xterm を追加する事で、この段階で xterm (X11)を起動しておくことができます。重要。
    /usr/bin/open /Applications/Utilities/X11.app でもOK。


    system.windows.form DLL を使う場合、X11をインストールしておいて下さい。
    C#アプリケーションを 実行するには、X11.appを起動し、X11端末 の xterm上(bash)から行います。
     user:~/Desktop/hello user$ mono hello.exe


    Mono System.Windows.Forms Assembly [$auto_build_revision$]
    Keyboard: Japanese 106 keyboard layout
    lorscheme
    Gtk# を導入していない場合は、Gtk# の 代わりに built-in colorscheme がGUI のインターフェイスに適用されます。
    この時、X11ターミナルに、Gtk not found (missing LD_LIBRARY_PATH to libgtk-x11-2.0.so?) using built-in colorscheme とメッセージが表示されます。
    さらに、続きます↓

    Xcode の「 実行可能ファイル」項目って何だろう


     Cocoaアプリケーションを作っていて「ビルドして実行」ボタンを押すと、ビルド後にアプリケーションはすぐに起動します。 これはXcodeの「実行可能ファイル」項目にアプリケーションが指定されているためです。しかし、ターミナルやX11上で動作するアプリケーションとなると、少々勝手が違ってきます。 Terminal.app や X11.app 上から起動する必要があるからです。

     このような場合は「実行可能ファイル」は、依存関係にあるアプリケーションを指定しておき、 本当に実行させたいファイルを、その引数に含めておくと便利です。
    ビルド時にカスタムスクリプト上で、依存関係にあるアプリケーションを起動させておくというのも手です。
     その他に、ビルド時にカスタムスクリプトを使って 起動用のシェルスクリプトを出力し、そのスクリプトを実行可能ファイル に指定する、二段構えの方法もあります。

    Xcodeでビルドした X11アプリケーション をすぐに起動したい

    X11で動作するUNIXアプリケーションを Xcode から ボタン一つでビルド後に実行する例、

    具体的には、
    Xcode のビルドと実行アイコンを押すと、ビルド作業完了後に
    X11環境が立ち上がり、 xterm が起動し、
    xterm から、.NET互換の mono を使って ビルド済みの C#のSystem.Windows.Forms アプリケーションを実行させたい。

     まず「 実行可能ファイル」に 新規カスタム実行ファイル項目 を追加します。(今回は X11 copy という名前を付けました)


     次に、肝心の項目を編集するために「グループとファイル」ペインの「実行可能ファイル」ツリーから、 先ほど追加した X11 copy を選択したまま「情報」アイコンをクリックします。

     すると、「"実行可能ファイル X11 copy""の情報」というウインドウが出るので、タブ「一般」「引数」をそれぞれを編集して下さい。
  • 一般タブ: 実行可能ファイルパスに xterm の存在するパス(/usr/X11R6/bin/xterm)を指定
  • 引数タブ:起動時に渡される引数に、Display オプション(xtermの起動に必須)と、実行のためのコマンドを記述します。
  • 引数タブ:環境に設定される引数に、export LANG=ja_JP.UTF-8 、環境変数 LANG の値に ja_JP.UTF-8 を指定します(日本語表示のため)。


  • X11の GUI で日本語フォントを表示できるようにしよう

    /usr/X11R6/lib/X11/fonts/TTF に、 osaka.unicode.ttf 日本語フォントをインストールしておきます。
    /usr/X11R6/lib/X11/fonts/TTF に、osaka.unicode.ttf をコピーする (か、シンボリックリンクを張る)。

    そしてターミナル から…
    cd /usr/X11R6/lib/X11/fonts/TTF
    sudo rm fonts.cache-1

    sudo fc-cache
    環境変数 LANG が設定されていない場合、日本語文字部分が□(いわゆる豆腐)になってしまいます。
    また、 C#のコードをコンパイルする時に、オプションに -codepage:utf8 を含めないと 、日本語文字部分が???? になってしまいます。




    環境変数LANG他のオプションについては、locale(ロケール)に関する情報に当たってください。

    そのほか

     「 実行可能ファイル」の項目は複数登録できますが、実際に適用されるのはその内の1つだけです。 ラジオボタンで選択したものが適用されます。

     X11アプリケーションを ターミナル上から実行する方法に、/usr/bin/open-x11 を使う方法もあります。 /usr/bin/open-x11 xterm としてもいいのですが、open-x11 は、プログラム単体の起動しかできません。 そのため、プログラムにさらに実行するオプションを渡すために /usr/X11R6/bin/xterm を直接実行可能ファイルのパスに指定しています。


    X11上で、System.Windows.Formsを使ったC#アプリケーションが起動時にクラッシュする(Xcodeのデバッガモードになる)ことがあります。この時 X11の日本語入力変換サーバー Ximに関するエラーメッセージが表示されます。(X11デフォルト設定で Ximを起動しようとするためか?)。
    Mono System.Windows.Forms Assembly [$auto_build_revision$]
    Keyboard: Japanese 106 keyboard layout
    Could not set X locale modifiers
    Could not get XIM
    このようなエラーを回避するには、 LANG の値に C を指定する ( export LANG=C ただし日本語は無効になる)、あるいは X11環境変数 XMODIFIERS の設定を XMODIFIERS @im=none にすることで、変換サーバーの指定を無効にできます(export XMODIFIERS="@im=none" xterm )。

    Xcodeでは次のように設定します。


    最後に
    なかなか大変なので、X11で動作するUNIXアプリケーション用にテンプレートを作っておくと便利かもしれません。


    参考文献:
  • Remote X Apps mini-HOWTO 9. トラブルシューティング
  • 覚え書き X11 for Mac OS X
  • Mac版OpenOffice.org 独自ビルドの情報 起動・設定 >
  • 第153回 OpenOffice.org 2.0の日本語環境を整備する(1) OOo2.0のインストール
    Last modified 2005.5.13

    Tsukubado