Xcode 在库中包含调试构建';s Mac OS X SDK

Xcode 在库中包含调试构建';s Mac OS X SDK,xcode,macos,frameworks,Xcode,Macos,Frameworks,我相信您也知道,在SDK中同时包含库的调试版本和发布版本是很常见的。我的问题是,对于MacOSX框架,在分发和Xcode集成方面是否存在一种标准的方法 一个选项是提供第二个完全独立的框架,例如MyLibrary.framework和MyLibraryDebug.framework。如果这是正确的方法,那么告诉Xcode使用正确的方法有什么诀窍吗?在向Xcode项目添加框架时,它似乎没有只将其添加到单个构建配置的选项,并且对于相应的配置,必须手动将正确的-framework MyLibrary[D

我相信您也知道,在SDK中同时包含库的调试版本和发布版本是很常见的。我的问题是,对于MacOSX框架,在分发和Xcode集成方面是否存在一种标准的方法

一个选项是提供第二个完全独立的框架,例如
MyLibrary.framework
MyLibraryDebug.framework
。如果这是正确的方法,那么告诉Xcode使用正确的方法有什么诀窍吗?在向Xcode项目添加框架时,它似乎没有只将其添加到单个构建配置的选项,并且对于相应的配置,必须手动将正确的
-framework MyLibrary[Debug]
命令行选项放入其中,这似乎很困难


谢谢。

Mac OS X动态链接器(
dyld
)有一个功能正是为了这个目的:
dyld\u IMAGE\u SUFFIX
。它允许您动态加载链接到的任何框架或共享库的调试版本。这样,您就不需要一个完全独立的
.framework
包;只需创建另一个名为
MyLibrary\u debug
的共享库。例如,Tiger中的CoreFoundation包括调试和评测变体(看起来它们没有收到安全更新,但无论如何):

对于上述Apple框架,标准的“debug”后缀是
\u debug
。(Xcode内可执行文件的常规窗格中的“加载框架时使用[debug]后缀”设置设置设置设置为
DYLD\u IMAGE\u suffix=\u debug

您可能认为使用
\u debug
也是一个好主意,但我建议您不要这样做,因为苹果已经多次打破了他们框架的
\u debug
版本()。对于Leopard only
libSystem
libmx
libmathcomon
都有调试变量,但在Snow Leopard中,它们又坏了(我遇到了自己)

如果您为调试库选择了不同的后缀,那么您不应该触发Apple的bug,并且仍然能够在普通和调试变体之间共享框架的其余部分(标题、资源等)

% ls -l /System/Library/Frameworks/CoreFoundation.framework/Versions/A/
total 20080
-rwxr-xr-x    1 root  wheel       1M Sep 10 17:55 CoreFoundation*
-rwxr-xr-x    1 root  wheel       6M Apr 24  2007 CoreFoundation_debug*
-rwxr-xr-x    1 root  wheel       2M Apr 24  2007 CoreFoundation_profile*