在库的Mac OS X SDK中包含一个调试版本
正如我确信您知道,在SDK中包含调试版本和发布版本库是很常见的。我的问题是,是否存在用于Mac OS X框架的标准方式,在分发和可能的Xcode集成方面?在库的Mac OS X SDK中包含一个调试版本
一种选择是运送第二个完全独立的框架,例如, MyLibrary.framework
和MyLibraryDebug.framework
。如果这是正确的方法,那么告诉Xcode使用正确的方法有一些窍门吗?当向Xcode项目添加框架时,似乎没有将其添加到单个构建配置的选项,并且似乎很笨拙,不得不求助于为相应配置手动设置正确的-framework MyLibrary[Debug]
命令行选项!
谢谢。
Mac OS X动态链接器(dyld
)具有用于此目的的功能:DYLD_IMAGE_SUFFIX
。它将允许您动态加载您链接到的任何框架或共享库的调试版本。那么你不需要一个完全独立的.framework
包;只需创建另一个名为MyLibrary_debug
的共享库。例如,在的CoreFoundation虎包括调试和分析变异(看起来像他们还没有收到安全更新,但无论如何):
% 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*
利用以上苹果的框架,标准的“调试”后缀是_debug
。 (Xcode中的可执行文件上的常规窗格中的“在加载框架时使用[debug]后缀”设置为DYLD_IMAGE_SUFFIX=_debug
)。
你可能会想到用_debug
以及是一个好主意,但我建议你不这样做,因为苹果已经打破了多次(someexamples)的_debug
版本的框架。截至Leopard只有libSystem
,libmx
和libmathCommon
带有调试变种,但在雪豹他们再次爆发(我自己跑到this problem)。
如果你为你的调试库选择了一个不同的后缀,你不应该触发苹果的bug,并且仍然能够在正常和调试变体之间共享你的框架的其余部分(头文件,资源等)。