चलिए इसे दो प्रश्नों में विभाजित करते हैं: पर्यावरण परिवर्तनीय कैसे सेट करें और मोनोमैक एप्लिकेशन में देशी ढांचे को कैसे बंडल करें।
स्थापना पर्यावरण चर
आपको अपने आवेदन की Info.plist
की LSEnvironment
खंड में वातावरण चर सेट कर सकते हैं, इस तरह:
<?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>
यह की तरह लगता है मैन्युअल रूप से एक बार उस फ़ाइल को संपादित करने और जोड़ने के लिए करने के लिए कम से कम एक पर्यावरण परिवर्तनीय।
फ़ाइल स्वचालित रूप से मोनो डेवलप द्वारा बनाई गई है, इसलिए आपको केवल LSEnvironment
अनुभाग जोड़ना है।
उसके बाद, आप उन्हें मोनो डेवलपमेंट में संपादित कर सकते हैं: प्रोजेक्ट विकल्प, "मैक ओएस एक्स एप्लिकेशन", "उन्नत" पर जाएं।
बंडलिंग मूल निवासी फ़्रेमवर्क एक MonoMac आवेदन में
आप एक देशी ढांचा एक MonoMac आवेदन में बंडल के लिए किसी भी वातावरण चर सेट करने के लिए की जरूरत नहीं है, वहाँ यह करने के लिए एक बहुत आसान है और क्लीनर तरीका है, जो ऑब्जेक्टिव सी
मैंने एक छोटे से test applications को बनाया है, जो एक मूल उद्देश्य सी अनुप्रयोग और एक मोनोमैक में एक ढांचे को बंडल करता है।
पहली चीज़ जो आपको करने की ज़रूरत है वह ऐप के साथ आपके ढांचे को बंडल कर रहा है। वर्तमान में मोनो डेवलपमेंट में इसे स्वचालित रूप से करने का कोई तरीका नहीं है, इसलिए आपको फ़ाइलों को मैन्युअल रूप से कॉपी करने या कुछ पोस्ट-बिल्ड स्क्रिप्ट का उपयोग करने की आवश्यकता है (मेरे उदाहरण में copy-framework.sh
देखें)।
मैं फ्रेमवर्क को YourApp.app/Contents/Frameworks/YourFramework.framework
में डालने की अनुशंसा करता हूं क्योंकि एक्सकोड इसे कैसे संभालता है; Apple's Documentation भी देखें।
अपने एप्लिकेशन बंडल के अंदर एक लाइब्रेरी का संदर्भ देने के लिए, आप `@executable_path 'का उपयोग कर सकते हैं (dyld man page देखें)।
मैं <dllmap>
का उपयोग करके एक app.config फ़ाइल बनाने की अनुशंसा करता हूं, इसलिए आपको अपने कोड में कोई पथनाम डालने की आवश्यकता नहीं है, इस प्रकार फ्रेमवर्क संस्करणों को बदलना आसान हो जाता है। उदाहरण के लिए:
<configuration>
<dllmap dll="TestFramework" target="@executable_path/../Frameworks/TestFramework.framework/TestFramework" />
</configuration>
अपने ढांचे के अंदर वास्तविक पुस्तकालय lib
साथ शुरू होता है या .so
/.dylib
साथ समाप्त होता है, तो आप उस नाम (ऊपर dllmap TestFramework.framework/libTestFramework.dylib
दाखिल नहीं होगा, उदाहरण के लिए) का उल्लेख करना होगा है। यह मोनो में एक बग है, जिसे मैंने अभी तय किया है।
क्या आप कह रहे हैं कि 'सिस्टम। पर्यावरण .etEnvironmentVariable' मोनो में काम नहीं करता है? –