これを2つの質問に分けてみましょう。環境変数を設定する方法と、MonoMacアプリケーションにネイティブフレームワークをバンドルする方法です。
環境変数の設定
次のようLSEnvironment
に、アプリケーションのセクションで環境変数を設定できます。Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.TableViewTest</string>
<key>CFBundleName</key>
<string>TableViewTest2</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>10.6</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>LSEnvironment</key>
<dict>
<key>Foo</key>
<string>Bar</string>
</dict>
</dict>
</plist>
そのファイルを一度手動で編集し、少なくとも1つの環境変数を追加する必要があるようです。
ファイルはMonoDevelopによって自動的に作成されるため、LSEnvironment
セクションを追加するだけです。
その後、MonoDevelopでそれらを編集できます。プロジェクトオプション、「Mac OS Xアプリケーション」、「詳細」に移動します。
MonoMacアプリケーションでのネイティブフレームワークのバンドル
ネイティブフレームワークをMonoMacアプリケーションにバンドルするために環境変数を設定する必要はありません。これを行うには、はるかに簡単でクリーンな方法があります。これは、ObjectiveCでの動作と同様です。
ネイティブのObjectiveCアプリケーションとMonoMacアプリケーションの両方にフレームワークをバンドルする小さなテストアプリケーションを作成しました。
最初に行う必要があるのは、フレームワークをアプリにバンドルすることです。現在、MonoDevelopでこれを自動的に行う方法はないため、ファイルを手動でコピーするか、ビルド後のスクリプトを使用する必要があります(copy-framework.sh
私の例を参照)。
YourApp.app/Contents/Frameworks/YourFramework.framework
XCodeがフレームワークを処理する方法であるため、フレームワークを組み込むことをお勧めします。Appleのドキュメントも参照してください。
アプリケーションバンドル内のライブラリを参照するには、 `@ executeable_path'を使用できます(dyldのマニュアルページを参照)。
を使用してapp.configファイルを作成することをお勧めします<dllmap>
。これにより、コードにパス名を入力する必要がなくなり、フレームワークのバージョンを簡単に変更できるようになります。例えば:
<configuration>
<dllmap dll="TestFramework" target="@executable_path/../Frameworks/TestFramework.framework/TestFramework" />
</configuration>
フレームワーク内の実際のライブラリが/で始まるか、 /でlib
終わる場合は、その名前を指定する必要があります(たとえば、上記のdllmapはファイルされません)。これはMonoのバグで、修正したばかりです。.so
.dylib
TestFramework.framework/libTestFramework.dylib