ixS*_*Sci 1 macos bash shell applescript
我有以下情况:
我的Mac OS捆绑了应用程序,该应用程序使用了一些第三方动态库,而这些库依赖于某些环境变量,因此命名它ENV_VAR。我只想ENV_VAR为我的应用程序设置一些值,因为如果为整个系统设置它,可能会破坏其他一些应用程序。而且它应该对用户透明,即他只需双击Application文件夹中的应用程序即可运行我的应用程序。我该如何实现?
注意:动态库会在主要功能启动之前加载,因此在主要功能中设置此变量无济于事。
您可以在应用程序包的Info.plist中添加键“ LSEnvironment”。该值可以是包含键和值的字符串的字典,当启动服务(例如,从Finder或Dock而不是从终端)启动应用程序时,这些键值对将添加到环境中。
<key>LSEnvironment</key>
<dict>
<key>ENV_VAR</key>
<string>value</string>
</dict>
Run Code Online (Sandbox Code Playgroud)
但是,在我的测试中(在Snow Leopard上),至少在编辑现有应用程序的Info.plist时,测试有点困难。基本上,Launch Services在首次遇到应用程序时会缓存应用程序Info.plist的这一部分,并且不一定能识别磁盘上的更改。有时您可以提示它重新读取Info.plist,例如,复制应用程序捆绑包或将其临时移动到其他文件夹。当然,过大的解决方案是使用lsregister刷新和重建缓存:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -seed
Run Code Online (Sandbox Code Playgroud)
调整Info.plist时,此缓存问题不会影响您的最终用户。另外,如果您在源Info.plist中进行了更改,然后使用Xcode构建了应用程序,那么它也不会影响您。