让我们将其分为两个问题:如何设置环境变量以及如何在 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>
似乎必须手动编辑该文件一次并添加至少一个环境变量。
该文件是由 MonoDevelop 自动创建的,因此您所要做的就是添加LSEnvironment
部分。
之后,您可以在 MonoDevelop 中编辑它们:转到项目选项、“Mac OS X 应用程序”、“高级”。
在 MonoMac 应用程序中捆绑本机框架
您不需要设置任何环境变量来将本机框架捆绑到 MonoMac 应用程序中,有一种更简单、更简洁的方法来完成此操作,这也类似于 Objective C 中的工作方式。
我创建了一个小测试应用,它在本机 Objective C 应用程序和 MonoMac 应用程序中捆绑了一个框架。
您需要做的第一件事是将框架与应用程序捆绑在一起。目前在 MonoDevelop 中无法自动执行此操作,因此您需要手动复制文件或使用一些构建后脚本(请参阅copy-framework.sh
在我的例子中)。
我建议将框架放入YourApp.app/Contents/Frameworks/YourFramework.framework
因为这就是 XCode 处理它的方式;也可以看看苹果的文档.
要引用应用程序包中的库,您可以使用“@executable_path”(请参阅dyld 手册页).
我建议使用创建一个 app.config 文件<dllmap>
,因此您无需将任何路径名放入代码中,从而更轻松地更改框架版本。例如:
<configuration>
<dllmap dll="TestFramework" target="@executable_path/../Frameworks/TestFramework.framework/TestFramework" />
</configuration>
如果框架内的实际库以lib
或以.so
/ .dylib
,那么你必须指定该名称(上面的 dllmap 不会归档TestFramework.framework/libTestFramework.dylib
, 例如)。这是 Mono 中的一个错误,我刚刚修复了。