2010-01-24 93 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,並且仍然能夠在正常和調試變體之間共享你的框架的其餘部分(頭文件,資源等)。