MonoDevelop3.0.2で簡単なアプリバンドルを作成しようとしています。
新しいソリューションを作成します。MonoMacプロジェクトを空にします。System.Windows.Formsへの参照を追加します。次のコードで新しいクラスを作成します。
using System;
using System.Windows.Forms;
namespace MM2
{
public class Program
{
public static void Main()
{
MessageBox.Show ("Hello world");
}
}
}
これはMonoDevelopから完全に実行されます。次に、 [プロジェクトオプション]ダイアログボックスで、[ MacOSXパッケージ]画面を選択します。アプリケーションバンドルにMonoランタイムを含めるをチェックします。他のオプションはデフォルトのままにします(プラットフォームはX86です)。
[ビルド/すべてビルド]を選択してバンドルをビルドします。これにより、bin/DebugフォルダーにMM.appバンドルが作成されます。
パッケージャはlibgdiplus.dylibをバンドルにコピーしなかったので、これを手動で行う必要があります。(この手順がないと、アプリを起動できず、コンソールログにMonoがlibgdiplusを見つけられなかったことが明確に示されます)。ファイルlibgdiplus.0.dylibとリンクlibgdiplus.dylibを/Library/Frameworks/Mono.framework/LibrariesフォルダーからアプリバンドルのContents/Resourcesフォルダーにコピーしました。
これで、アプリバンドルは自己完結型になり、Monoランタイムをインストールする必要がなくなりました。実行中は、メッセージボックスが表示されます。しかし、[OK]ボタンをクリックしてプログラムをシャットダウンすると、Monoランタイムがクラッシュします。これは、コンソールログからのスタックトレースです。
Native stacktrace:
6/8/12 6:11:43.089 PM [0x0-0x26026].com.yourcompany.MM2: 0 MM2 0x000a072f mono_handle_native_sigsegv + 287
6/8/12 6:11:43.089 PM [0x0-0x26026].com.yourcompany.MM2: 1 MM2 0x000058de mono_sigsegv_signal_handler + 334
6/8/12 6:11:43.089 PM [0x0-0x26026].com.yourcompany.MM2: 2 libsystem_c.dylib 0x9435859b _sigtramp + 43
6/8/12 6:11:43.089 PM [0x0-0x26026].com.yourcompany.MM2: 3 ??? 0xffffffff 0x0 + 4294967295
6/8/12 6:11:43.089 PM [0x0-0x26026].com.yourcompany.MM2: 4 CoreFoundation 0x940e4e05 _CFAutoreleasePoolPop + 53
6/8/12 6:11:43.089 PM [0x0-0x26026].com.yourcompany.MM2: 5 Foundation 0x9386ea2f -[NSAutoreleasePool release] + 131
6/8/12 6:11:43.089 PM [0x0-0x26026].com.yourcompany.MM2: 6 MM2 0x00002b52 main + 1458
6/8/12 6:11:43.089 PM [0x0-0x26026].com.yourcompany.MM2: 7 MM2 0x00002555 start + 53