Podzielmy to na dwa pytania: jak ustawić zmienne środowiskowe i jak łączyć natywne frameworki w aplikacji MonoMac.
Ustawianie zmiennych środowiskowych
Można ustawić zmienne środowiskowe w sekcji LSEnvironment
swojej aplikacji na Info.plist
, podobnie jak to:
<?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>
Wydaje się musiał ręcznie edytować ten plik raz i dodać co najmniej jedną zmienną środowiskową.
Plik jest automatycznie tworzony przez MonoDevelop, więc wszystko, co musisz zrobić, to dodać sekcję LSEnvironment
.
Następnie można edytować je w MonoDevelop: przejdź do opcji projektu, "Aplikacja Mac OS X", "Zaawansowane".
Bundling Native szkieletowe w aplikacji Monoman
Nie trzeba ustawiać żadnych zmiennych środowiskowych do bundle native ramy w Monoman zgłoszeniu, istnieje o wiele łatwiejsze i bardziej przejrzysty sposób to zrobić, co jest Podobnie jest z działaniem w Objective C.
Stworzyłem mały test applications, który łączy strukturę zarówno w natywnej aplikacji C z celami, jak i w MonoMac.
Pierwszą rzeczą, którą musisz zrobić, to powiązać swój framework z aplikacją. W tej chwili nie ma możliwości zrobienia tego automatycznie w MonoDevelop, więc musisz ręcznie skopiować pliki lub użyć skryptu po budowaniu (w moim przykładzie zobacz copy-framework.sh
).
Polecam umieścić ramkę w YourApp.app/Contents/Frameworks/YourFramework.framework
, ponieważ obsługuje ją XCode; patrz także Apple's Documentation.
Aby odwołać się do biblioteki wewnątrz pakietu aplikacji, można użyć `@executable_path '(zobacz dyld man page).
Zalecam utworzenie pliku app.config przy użyciu <dllmap>
, więc nie trzeba umieszczać żadnych ścieżek w kodzie, co ułatwia zmianę wersji szkieletu. Na przykład:
<configuration>
<dllmap dll="TestFramework" target="@executable_path/../Frameworks/TestFramework.framework/TestFramework" />
</configuration>
Jeżeli rzeczywista biblioteka wewnątrz ramy zaczyna się lub kończy lib
.so
/.dylib
, następnie należy podać tę nazwę (Powyższe dllmap nie złoży TestFramework.framework/libTestFramework.dylib
, na przykład). To jest błąd w Mono, który właśnie naprawiłem.
Czy mówisz, że 'System.Environment.SetEnvironmentVariable' nie działa w Mono? –