之前,我有以下情況的過程中設置環境變量:用於啓動
我有一個應用程序的Mac OS捆綁它使用一些第三方的動態庫和這些庫依賴於某些環境變量,讓我們將其命名爲ENV_VAR
。我想爲我的應用程序設置ENV_VAR
以獲得一些價值,因爲如果我爲整個系統設置它,它可能會破壞其他一些應用程序。它應該對用戶透明地工作,即他通過雙擊它從應用程序文件夾運行我的應用程序。我怎樣才能實現它?
注意:動態庫在主函數啓動之前加載,因此在主函數中設置此變量並沒有幫助。
之前,我有以下情況的過程中設置環境變量:用於啓動
我有一個應用程序的Mac OS捆綁它使用一些第三方的動態庫和這些庫依賴於某些環境變量,讓我們將其命名爲ENV_VAR
。我想爲我的應用程序設置ENV_VAR
以獲得一些價值,因爲如果我爲整個系統設置它,它可能會破壞其他一些應用程序。它應該對用戶透明地工作,即他通過雙擊它從應用程序文件夾運行我的應用程序。我怎樣才能實現它?
注意:動態庫在主函數啓動之前加載,因此在主函數中設置此變量並沒有幫助。
您可以將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構建應用程序,則不會影響您。
非常好的緩存,謝謝! – ixSci 2013-04-25 10:57:42