2010-01-24 46 views
2

正如我确信您知道,在SDK中包含调试版本和发布版本库是很常见的。我的问题是,是否存在用于Mac OS X框架的标准方式,在分发和可能的Xcode集成方面?在库的Mac OS X SDK中包含一个调试版本

一种选择是运送第二个完全独立的框架,例如, MyLibrary.frameworkMyLibraryDebug.framework。如果这是正确的方法,那么告诉Xcode使用正确的方法有一些窍门吗?当向Xcode项目添加框架时,似乎没有将其添加到单个构建配置的选项,并且似乎很笨拙,不得不求助于为相应配置手动设置正确的-framework MyLibrary[Debug]命令行选项!

谢谢。

回答

3

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,libmxlibmathCommon带有调试变种,但在雪豹他们再次爆发(我自己跑到this problem)。

如果你为你的调试库选择了一个不同的后缀,你不应该触发苹果的bug,并且仍然能够在正常和调试变体之间共享你的框架的其余部分(头文件,资源等)。