我有以下情况:
我有一个应用程序的Mac OS捆绑它使用一些第三方的动态库和这些库依赖于某些环境变量,让我们将其命名为ENV_VAR
。 我想设置ENV_VAR
到某一值时,我的应用程序,只是因为如果我将它设置为整个系统它可能会中断一些其他应用程序。 它应该透明地工作给用户,即他只是通过双击运行它从应用程序文件夹我的应用程序。 我怎样才能实现呢?
注:动态库之前主要功能加载开始,因此设置在主这个变量没有帮助。
我有以下情况:
我有一个应用程序的Mac OS捆绑它使用一些第三方的动态库和这些库依赖于某些环境变量,让我们将其命名为ENV_VAR
。 我想设置ENV_VAR
到某一值时,我的应用程序,只是因为如果我将它设置为整个系统它可能会中断一些其他应用程序。 它应该透明地工作给用户,即他只是通过双击运行它从应用程序文件夹我的应用程序。 我怎样才能实现呢?
注:动态库之前主要功能加载开始,因此设置在主这个变量没有帮助。
您可以添加一个键“LSEnvironment”到你的应用程序包的Info.plist。 该值可以是与在您的应用程序是通过启动服务(从Finder或Dock而不是从终端EG)推出键和值,并将这些键值对字符串将被添加到环境的字典。
<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中构建应用程序。
我不知道,如果以下工作,因为我没有这样的应用尝试。 这个想法是从终端设置环境变量,然后调用您的应用程序:
ENV_VAR=something open -a YourApplication