info.plist中的环境变量不起作用

时间:2011-07-16 01:12:34

标签: xcode environment-variables info.plist dyld

我在Xcode中使用info.plist来设置环境变量,DYLD_LIBRARY_PATH和DYLD_FRAMEWORK_PATH。

我将DYLD_LIBRARY_PATH设置为

$ CONTENTS_FOLDER_PATH /运行/ 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ tiapp / 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ ticodec / 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ tidatabase / 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ tifilesystem / 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ timedia / 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ timonkey / 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ tinetwork / 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ tiplatform / 1.1.0: $ CONTENTS_FOLDER_PATH /模块/ tiprocess / 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ tiui / 1.1.0:$ CONTENTS_FOLDER_PATH /模块/ tiworker / 1.1.0

DYLD_FRAMEWORK_PATH到

$ CONTENTS_FOLDER_PATH /运行/ 1.1.0

当我双击我的.app文件夹时,dlopen找不到上面文件夹中引用的任何.dylib。

如果我采用相同的变量和路径并将它们放在Xcode的可执行参数中,一切正常,但只有当我通过Xcode运行软件时,我才需要在点击.app文件夹时一切正常

我在info.plist中做错了什么?它不喜欢$ CONTENTS_FOLDER_PATH吗?它需要一个不同的分隔符吗?为什么相同的参数在可执行参数中有效但在info.plist文件中不起作用?

提前致谢。

2 个答案:

答案 0 :(得分:2)

您在Info.plist中使用什么键来设置环境变量?你的意思是你在Xcode的“环境变量”配置中设置环境变量(Xcode 4中的Scheme的一部分,Xcode 3中自定义可执行文件的一部分),或者你的意思是你只是将键/值放入{{ 1}}并期望它们出现在环境中?

在前一种情况下,即使这样有效,它只会在您运行Xcode时有用,而不是在您运送产品时。在后一种情况下,Info.plist没有根据我的知识添加环境变量的机制。

就个人而言,我没有在你的捆绑包中放置这个巨大的树,而是让Xcode将你所有的dylib复制到你的bundle的插件目录(Info.plist)中,然后使用PlugIns(或{{1获取它的路径。或者你可以使用另一个目录,如果它们不是真正的“插件”。但是将它们全部放在捆绑包中的一个目录中。不要搜索它们。 (您可以自由地将它们放在源树中的许多目录中;这完全是关于捆绑包。)

答案 1 :(得分:0)

我最终使用@rpath来查找我的所有dylib和框架。我使用@ rpath / -name of library或framework-的安装名重建了所有框架和库。

然后我在主项目的运行搜索路径设置中添加了相对路径名,如@loader_path /../ runtime / 1.1.0和@loader_path /../ modules /等...

这允许dlopen调用在不使用plist或可执行参数的情况下查找当前路径。