我相信您已经意识到在SDK中包含调试和发布版本的库是很常见的。我的问题是,对于Mac OS X框架,在分发和可能的Xcode集成方面是否存在标准的方法?
一种选择是发布第二个完全独立的框架,例如MyLibrary.framework
和MyLibraryDebug.framework
。如果这是正确的方法,是否有一些技巧告诉Xcode使用正确的?在向Xcode项目添加框架时,它似乎没有选择只将它添加到单个构建配置中,并且似乎不得不手动将正确的-framework MyLibrary[Debug]
命令行选项放入各自的配置!
感谢。
答案 0 :(得分:3)
Mac OS X动态链接器(dyld
)具有完全出于此目的的功能:DYLD_IMAGE_SUFFIX
。它允许您动态加载您链接到的任何框架或共享库的调试版本。那么你不需要一个完全独立的.framework
捆绑;只需创建另一个名为MyLibrary_debug
的共享库。例如,Tiger中的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*
对于Apple的框架,标准的“debug”后缀为_debug
。 (Xcode中可执行文件的“常规”窗格中的“在加载框架时使用[debug]后缀”设置设置DYLD_IMAGE_SUFFIX=_debug
)。
您可能认为使用_debug
也是一个好主意,但我建议您不要这样做,因为Apple已多次破坏其_debug
版本的框架some examples)。从Leopard开始libSystem
,libmx
和libmathCommon
都带有调试版本,但在Snow Leopard中它们再次崩溃(我自己遇到了this problem)。
如果为调试库选择不同的后缀,则不应触发Apple的错误,并且仍然能够在正常变体和调试变体之间共享框架的其余部分(标题,资源等)。