スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Xcodeで書いたCocoaアプリケーションをGNUstepで動かすメモ

コードを書く際の注意

まずWriting portable code - GNUstepWikiに書いてあることはだいたい守る。 FoundationやAppKit以外の、OSXに特有のライブラリを使わないということ。

その他に気をつけることとしては、

  • Xcodeが自動生成するコードがNSApplicationDelegateプロトコル(formal protocol)を使っている場合があるが、GNUstepにはこのプロトコルはないので、#ifndef GNUSTEPなどで対処する。
    • GNUstepにはGSAppDelegateProtocolというプロトコルがあるが、コメントによればこれはドキュメント用に宣言されているだけで、アプリケーションが実装する必要はないとのこと。
    • GSAppDelegateProtocol@optional指定つければNSApplicationDelegateになりそうだが
  • Interface BuilderでUIを作る際に、Auto Layoutを使わないようにする。デフォルトでは「Interface Builder Document」の「Use Auto Layout」チェックがついていて、生成されるxib中でNSLayoutConstraintが使われてしまう。OSX上でもNSLayoutConstraintはかなり新しいAPIのはずだが、どうしてこうなった。

など。

ビルドシステム

GNUstep Makeを使うのが素直だろう。つまり、Xcodeのプロジェクトとは別にMakefileを書く。GNUstep MakeのMakefileの書き方はこのへんを参照。

ただし、上のリンク先に書いてない重要なことがいくつかあって、まずInterface Builderで作ったxibを指定すること。どう書けばいいかと言うと、アプリケーション名(APP_NAME)を例えばHogeとすると

Hoge_RESOURCE_FILES = Hoge/en.lproj/MainMenu.xib
Hoge_MAIN_MODEL_FILE = MainMenu

のような記述を入れておく。こうするとmakeした時にMainMenu.xibがアプリケーションバンドルにコピーされていい感じになる。

ここまでの手順で、簡単なアプリケーションはビルドできるはず。運が良ければ問題なく動作するかもしれない。

Info.plist

Xcodeで開発した時はInfo.plistというというファイルにアプリケーションの情報(名前とか作者とかアイコンとか)をいろいろ書いたが、GNUstepの場合はどうか?

まあ実際にビルドしてみるとアプリケーションバンドル内にInfo-gnustep.plistというファイルができていて、中には"Automatically generated"とか書かれている。アプリケーションアイコンを設定したり、アプリケーションメニューの「Info…」で出てくるダイアログにアプリケーションの情報を載せるにはInfo-gnustep.plistに書き出される内容をカスタマイズする必要があるわけだが、その方法には2種類ある。

  • Makefile中で変数を定義する。さっきの*_MAIN_MODEL_FILEと同様。CFBundleIconFile(*_APPLICATION_ICON)やNSPrincipalClass(*_PRINCIPAL_CLASS)など。
  • テンプレートとなるInfo.plistファイルを作って、make時に自動生成される分と合わせてマージさせる。上記以外のキー/値はこの方法を使う。テンプレートとなるInfo.plistファイルの名前は「HogeInfo.plist」で、GNUmakefileと同じディレクトリに置いておけば勝手に拾ってくれる。

この辺はまともなドキュメントがなさそうだが、辛うじて見つけられたのはこのへんとかこのへん。まあGNUstep Makeのソースコード(core/make/Instance/application.makeなど)を読むべきかもしれない。

あと今回はLinux(Ubuntu)でしか試していないので、Windowsで同じようにうまくいくのかは知らない。

スポンサーサイト

テーマ : プログラミング | ジャンル : コンピュータ

プロフィール

minoki

Author:minoki
好きなプログラミング言語:
Haskell,Lua
GitHubアカウント
Twitter

最新記事
月別アーカイブ
カテゴリ
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。