Xcode info.plist don';行不通

Xcode info.plist don';行不通,xcode,environment-variables,info.plist,dyld,Xcode,Environment Variables,Info.plist,Dyld,我正在使用Xcode中的info.plist设置环境变量DYLD_LIBRARY_PATH和DYLD_FRAMEWORK_PATH 我正在将DYLD\u LIBRARY\u路径设置为 $CONTENTS\u FOLDER\u PATH/runtime/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tiapp/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tidatabase/1.1.0:$CONTENTS\u FOLDER\u

我正在使用Xcode中的info.plist设置环境变量DYLD_LIBRARY_PATH和DYLD_FRAMEWORK_PATH

我正在将DYLD\u LIBRARY\u路径设置为

$CONTENTS\u FOLDER\u PATH/runtime/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tiapp/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tidatabase/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tifilesystem/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/timedia/1.1.0:$CONTENTS\u PATH/modules/timonkey/1.1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tinetwork/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tiplatform/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tiprocess/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tiui/1.1.0:$CONTENTS\u FOLDER\u PATH/modules/tiworker/1.1.0

DYLD_框架_路径

$CONTENTS\u FOLDER\u PATH/runtime/1.1.0

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

如果我使用相同的变量和路径,并将它们放在Xcode中的可执行参数中,那么一切都可以正常工作,但前提是我通过Xcode运行软件,并且当您单击.app文件夹时,我需要一切都正常工作

我在info.plist中做错了什么?它不喜欢$CONTENTS\u文件夹\u路径吗?它需要不同的分隔符吗?为什么相同的参数在可执行参数中有效,但在info.plist文件中无效


提前感谢。

您在
Info.plist
中使用什么键来设置环境变量?您的意思是在Xcode的“环境变量”配置中设置环境变量(Xcode 4中的方案的一部分,Xcode 3中的自定义可执行文件的一部分),还是只是将键/值抛出到
Info.plist
中,并期望它们出现在环境中

在前一种情况下,即使这样做有效,它也只有在运行Xcode时才有用,而不是在发布产品时。在后一种情况下,
Info.plist
没有向我的知识中添加环境变量的机制


就我个人而言,我不想让这棵大树出现在你的包中,而是让Xcode将你所有的DYLIB复制到你包的插件目录(
PlugIns
)中,然后使用
NSBundle
(或
Cbundle
)获得它的路径。或者,如果这些不是真正的“插件”,您也可以使用另一个目录,但请将它们全部放在捆绑包中的一个目录中。不要搜索它们。(您可以在源代码树中的许多目录中自由地使用它们;这纯粹是关于捆绑包的问题。)

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

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


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

我使用的是Xcode 3,我正在设置info.plist变量“Environment Variables”,在实际的info.plist中它显示为LSEnvironment。我可以找到绑定包中每个.dylib的直接路径,但问题是.dylib本身依赖于其他.dylibs,所以当我进行dlopen调用和加载时.dylib使用环境变量DYLD_LIBRARY_path来找到它所依赖的其他.dylibs的路径,因此,在应用程序打开之前,我需要将捆绑包中的路径附加到DYLD_LIBRARY_PATH变量。我需要它在应用程序可能也在的任何地方工作。Xcode构建变量(如CONTENTS\u FOLDER\u PATH)在运行时无法启动服务。我将从追求一个更简单的链接系统开始,理想情况下是一个静态链接系统。否则,您将需要在代码中设置DYLD_LIBRARY_PATH,如果不可能,您将需要构建一个助手可执行文件,根据包的位置为您设置它,然后启动真正的可执行文件。所有这些都是非常复杂的方法,静态链接是首选。我不认为静态链接是我现在的选择。谢谢你的建议。事实上,当前的设计是让应用程序的第一次运行设置环境变量,然后再次启动相同的可执行文件,然后再设置环境变量,有点像构建助手的建议。我正试图避免这种做法,并希望有一个单一的应用程序执行,使事情更容易对每个人。