我有以下情况:
我有 Mac OS 捆绑包,其中包含使用一些第三方动态库的应用程序,这些库依赖于一些环境变量,让我们命名它ENV_VAR
。我想设置ENV_VAR
仅对我的应用程序具有某些值,因为如果我为整个系统设置它,可能会破坏其他一些应用程序。它应该对用户透明地工作,即他只需双击应用程序文件夹即可运行我的应用程序。我怎样才能实现它?
注意:动态库是在主函数启动之前加载的,因此在主函数中设置此变量没有帮助。
您可以添加一个键“LSEnvironment”到您的应用程序包的 Info.plist。该值可以是包含键和值字符串的字典,当您的应用程序通过 Launch Services 启动时(例如从 Finder 或 Dock 但不是从终端启动),这些键值对将添加到环境中。
<key>LSEnvironment</key>
<dict>
<key>ENV_VAR</key>
<string>value</string>
</dict>
然而,在我的测试(在 Snow Leopard 上)中,测试有点不稳定,至少在编辑现有应用程序的 Info.plist 时是这样。基本上,Launch Services 在第一次遇到应用程序时会缓存应用程序 Info.plist 的这一部分,并且不一定会识别磁盘上的更改。有时,您可以通过复制应用程序包或暂时将其移动到其他文件夹等方式提示它重新读取 Info.plist。当然,过度的解决方案是使用lsregister
刷新并重建缓存:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -seed
此缓存问题不会影响您的最终用户,只会影响您调整 Info.plist 时的情况。此外,如果您在源 Info.plist 中进行更改,然后使用 Xcode 构建应用程序,它也不会对您产生影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)