2011-01-08 9 views
0

Mac OS X上で動作するアプリケーションのポートがあります。私はmakeでビルドします。 NSOpenGLView。コンソールの代わりにMac OS Xアプリケーションをビルドする

  1. 現在のコンソールフォームではなく、適切なアプリケーションに変換するにはどうすればよいですか?私はそれを何かに束ねていますか?それとも、リンカ設定のいくつかのタイプですか(Windowsのように)? Xcodeを使ってビルドする必要はありますか?
  2. 現在のところ、OS Xのメッセージポンプを適切に利用するのではなく、イベントをポーリングするだけです。固定のフレームレートで私自身のものを「刻む」ことができている間に、私にそれを正しく行う方法を示すいくつかの基本的なサンプルやチュートリアルを教えてください。私は "サンプルやチュートリアル"と言っていますが、ドキュメントに関しては私は目が見えません。

ありがとう!

答えて

3

適切なMacアプリケーションを作成するには、Mac OS Xバンドルを作成する必要があります。素晴らしい文書はAppleのサイトhereにあります。標準的なツールで作成することができます(小さなPythonスクリプトを書いて、ファイルを記述する単純な.iniファイルからInfo.plistファイルを構築するバンドルを作成しました)。

基本的に、アプリケーションバンドルは、.app拡張子と固定構造の通常のディレクトリです。以下のファイルが必要です。

Application.app/ 
    + Contents/ 
    + MacOS/ 
    | + <Executable> 
    + Resources/ 
    | + <Icon> 
    + Info.plist 

Info.plistファイルは実行ファイル(CFBundleExecutable)の名​​前が何であるかを示していること、(XMLまたは古い形式のいずれか)の標準プロパティリストファイルで、何ですかアイコンファイルの名前(CFBundleIconFile)、バンドルタイプ(CFBundleTypeの値がAPPL)、その他の情報(サポートされているファイルタイプ、バージョン文字列、開発言語など)が含まれます。これらのファイルは、基本的なMac OS Xアプリケーションをインストールするために必要な最小限のものです。

Mac OS Xメッセージポンプの仕組みについては、Matt Gallagherのこのarticleをお読みください。 NSApplicationクラスの実行メッセージがどのように実装されているかを説明します。このメソッドは、保留中のメッセージがあるときにのみ反復するrunOnceメソッドを記述できます。その後、(それがPeekMessageTranslateMessageには本当に似ている、とWin32上DispatchMessageシーケンス)定期的にこの関数を呼び出します:

- (void)runOnce 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    [self finishLaunching]; 

    for (;;) 
    { 
     [pool release]; 
     pool = [[NSAutoreleasePool alloc] init]; 

     NSEvent *event = 
      [self 
       nextEventMatchingMask:NSAnyEventMask 
       untilDate:nil 
       inMode:NSDefaultRunLoopMode 
       dequeue:YES]; 

     if (sender == nil) 
      break; 

     [self sendEvent:event]; 
     [self updateWindows]; 
    } 

    [pool release]; 
} 
+1

私は、.iniファイルからMac OS Xバンドルを構築するスクリプトを持つコンピュータにアクセスできないが、興味があると思われる場合は、月曜日に投稿しようとします。 –

+0

音が盛り上がる!本当にありがとう! –

1

Mac固有のAPIとXCodeを実際に学びたいのでない限り、SDLを使用するだけです。イベントハンドリング、スレッド、マルチメディアなどを抽象化する、クロスプラットフォームのライブラリです。これには、コードの変更を最小限に抑えて適切なアプリケーションバンドルを作成できるXCodeテンプレートが含まれています。 SDLを使用すると、あなたが書いたMac固有のコードの大部分を捨てることになりますが、今後のポートを大幅に簡素化し、複数のプラットフォームでアプリケーションを簡単に管理できるようになります。

+0

おかげで、私はそれを自分で行うことを好むと私も勉強したいです。 –

+0

SDLは覚えておくのに最適な情報源でした。 –

関連する問題