2010-03-30 44 views
2

我正在構建一個應用程序,它利用僅限於Mac OS X 10.6的技術,但沒有放棄向10.5 10.5 Leopard的向後兼容性。如何避免XCode框架弱連接問題?

的方式我這樣做是通過設置10.6 SDK爲基礎SDK,弱聯的所有框架和設置部署目標至10.5中描述:

http://developer.apple.com/mac/library/DOCUMENTATION/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html

也能正常工作;在進行Snow Leopard調用之前,我只需檢查選擇器或實際存在的類。或者我可以在撥打電話前檢查操作系統版本。

問題是,這是令人難以置信的脆弱。如果我只打一個10.6的電話,我只能打豹子兼容性。因此即使使用正常的代碼完成功能也可能是危險的。

我的問題:是否有任何方法來檢查哪些調用沒有定義在10.5版本之前?某種靜態分析,或者甚至只是一個技巧(設置其他SDK的目標?)會做。

我很明顯應該在釋放任何東西之前在Leopard機器上進行測試,但即使如此,在每次發佈之前,我都無法通過該程序的所有路徑。

任何意見,將不勝感激。

最好的問候,

弗蘭克

回答

1

您可以將目標SDK更改爲10.5。編譯器將輸出warning: definition for '-snowLeopardOnlyMethod:' not found消息。

+0

謝謝, 我不知道我明白我需要設置到10.5 .. 我已經得到了「基地SDK」設置爲10.6和「部署目標」已被設置爲10.5。並且絕對沒有snowLeopardOnlyMethod:任何地方都有警告。 將Base SDK更改爲10.5當然會產生很多錯誤,但問題在於會有很多錯誤和警告,這些錯誤和警告是由於之前的代碼未編譯以及編譯器在一段時間後停止生成錯誤,所以即使將手動通過錯誤消息可能無法捕捉每個方法只有10.6個API。 我敢肯定我錯過了什麼,但在哪裏? – 2010-03-31 10:16:45

+0

'snowLeopardOnlyMethod:'只是一個示例方法名稱(它可能是'exampleMethod:')。我建議閱讀http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html以瞭解Apple使用的術語。 – 2010-03-31 15:06:25

+0

嗨,本篤,感謝您的鏈接。我讀完了讀完。蘋果談到了「部署操作系統版本」(又名MACOSX_DEPLOYMENT_TARGET)和「基本SDK(aka SDKROOT)」。我認爲「目標SDK」是指「基本SDK」/ SDKROOT。根據圖2- 1在您連接的文檔中意味着「不要使用這些API」用於Mac OS X 10.6調用,這就是爲什麼我按照您的建議遇到問題。 暫時這樣做,然後將基礎SDK重置爲10.6呈現我在我的第一個評論。 – 2010-04-02 07:22:54