2014-03-31 50 views
0

我有一個應用程序,我一直在使用10.9 SDK開發10.9,我想分發給我的朋友誰正在運行10.8。我知道我不能保證它不會在沒有找到OS X 10.8系統(可能在虛擬機中)並在那裏運行它,但是有什麼辦法可以檢查我沒有使用任何僅支持10.9的API ?甚至可以獲得我的應用程序使用的10.9-only API的列表?有沒有辦法告訴(在構建時)我的10.9應用程序是否將在10.8上運行?

我的理解是:

  • 「部署目標」並沒有這樣做 - 這只是設置LC_VERSION_MIN_MACOSX,所以如果你想在OS X的早期版本上運行它,它會拒絕啓動。

  • 「基礎SDK」不會這樣做 - 這是它編譯的API的版本。在較新版本的SDK中添加的某些功能在運行時即使在較早版本的OS X上也可用(例如,NSArray -firstObject)。

Xcode的靜態分析是識別符號(類/方法),我使用的源相當不錯的,所以它看起來這應該很容易做到的,但我不知道該怎麼做。

+0

我不認爲這樣的工具存在。我很想被證明是錯誤的。 –

回答

1

「基礎SDK」在合法性意義上做你想要的。是的,你可能會得到一些假陰性 - 對於像firstObject這樣的方法 - 但比誤報更好。您可以檢查任何已報告的不存在的API,並輸入代碼以動態檢查(respondsToSelector:)和防禦性代碼,或者在必要時忽略它們,並確定它們可用。

+0

我傾向於同意,除了Xcode/Clang在達到一定數量的問題後似乎放棄了,並且對於最初不是用舊的SDK編寫的應用程序,可能會有很多假陰性。我的應用程序的一個乾淨的版本將報告十幾個「firstObject」問題,然後保釋。 – user3404855

+0

您可以通過'-ferror-limit = 0'來設置錯誤限制,缺省值爲20,0表示無限制(參見[Clang命令行選項](http://clang.llvm.org/docs/UsersManual.html#選項 - - 控制錯誤和警告的消息))。對於測試,你也可以在'NSArray'上定義一個'#if'類來定義'preObject'前的10.9以消除這些特定的警告 - 在你的項目的'.pch'中包含類別的'.h'等。這並不完美,但是你可以做(​​和一些虛擬機幫助!) – CRD

相關問題