2013-04-24 32 views
0

之前,我有以下情況的過程中設置環境變量:用於啓動

我有一個應用程序的Mac OS捆綁它使用一些第三方的動態庫和這些庫依賴於某些環境變量,讓我們將其命名爲ENV_VAR。我想爲我的應用程序設置ENV_VAR以獲得一些價值,因爲如果我爲整個系統設置它,它可能會破壞其他一些應用程序。它應該對用戶透明地工作,即他通過雙擊它從應用程序文件夾運行我的應用程序。我怎樣才能實現它?

注意:動態庫在主函數啓動之前加載,因此在主函數中設置此變量並沒有幫助。

回答

1

您可以將key "LSEnvironment"添加到您的應用程序包的Info.plist。該值可以是包含鍵和值的字符串的字典,當您的應用程序由啓動服務啓動時(例如從Finder或Dock而不是從終端啓動),這些鍵值對將添加到環境中。

<key>LSEnvironment</key> 
<dict> 
    <key>ENV_VAR</key> 
    <string>value</string> 
</dict> 

然而,在我的測試(雪豹),這是一個有點片狀測試,編輯現有應用程序的Info.plist中至少當。基本上,啓動服務首次遇到應用程序時會緩存應用程序Info.plist的這部分內容,並且不一定會識別磁盤上的更改。例如,您可以通過複製應用程序包或將其暫時移動到其他文件夾來提示它重新讀取Info.plist。當然,矯枉過正的解決方案是使用lsregister沖洗和重建緩存:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -seed 

這個緩存的問題不會影響到您的最終用戶,只是你爲你調整Info.plist中。另外,如果您在源Info.plist中進行更改,然後使用Xcode構建應用程序,則不會影響您。

+0

非常好的緩存,謝謝! – ixSci 2013-04-25 10:57:42

1

我不確定下列是否有效,因爲我沒有這樣的應用程序來嘗試。這個想法是從終端設置環境變量,然後調用您的應用程序:

ENV_VAR=something open -a YourApplication 
+0

你的想法是絕對正確的。但問題是如何將其整合到捆綁中。 – ixSci 2013-04-24 06:17:28

+0

對不起,我無法幫到你。也許你應該嘗試http://apple.stackexchange.com – 2013-04-24 06:19:14

+0

謝謝,我已經在蘋果部分創建了一個問題。 – ixSci 2013-04-24 07:33:35

相關問題