我有以下情况:
我有Mac OS捆绑应用程序,它使用一些第三方动态库,这些库依赖于某些环境变量,我们将其命名为ENV_VAR
。我想将ENV_VAR
设置为我的应用程序的某个值,因为如果我为整个系统设置它,它可能会破坏其他一些应用程序。它应该对用户透明地工作,即他只需双击它就可以从Application文件夹运行我的应用程序。我怎样才能实现它?
注意:在主函数启动之前加载动态库,因此在main中设置此变量没有帮助。
答案 0 :(得分:3)
您可以在应用套装的Info.plist中添加key "LSEnvironment"。该值可以是包含键和值字符串的字典,当您的应用程序由Launch Services启动时(例如,从Finder或Dock启动而不是从终端启动),这些键值对将添加到环境中。
<key>LSEnvironment</key>
<dict>
<key>ENV_VAR</key>
<string>value</string>
</dict>
然而,在我的测试中(在Snow Leopard上),测试有点不稳定,至少在编辑现有应用的Info.plist时。基本上,启动服务在第一次遇到应用程序时缓存应用程序的Info.plist的这一部分,并且不一定能识别磁盘上的更改。您有时可以通过复制应用程序包或临时将其移动到其他文件夹来提示它重新读取Info.plist。当然,过度杀伤解决方案是使用lsregister
来刷新和重建缓存:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -seed
这个缓存问题不会影响您的最终用户,只需要您调整Info.plist。此外,如果您在源Info.plist中进行更改,然后使用Xcode构建应用程序,它不应该影响您。
答案 1 :(得分:1)
我不确定以下是否有效,因为我没有这样的应用程序可以尝试。我们的想法是从终端设置环境变量,然后调用您的应用程序:
ENV_VAR=something open -a YourApplication