2011-01-14 140 views
4

好吧我一直在開發iPhone應用程序已經超過一年了, 但有一件事仍然非常糟糕。iphone版本兼容性掃描儀

比方說,我要讓我的應用程序與iOS 3.0 兼容設置我的SDK到最新版本,我的部署目標設定爲3.0

但會發生什麼,如果你不小心調用一個函數只在... 3.1.x或更高版本中? 對,它只是崩潰。

沒有任何警告或指示符告訴您,函數僅在以後的iOS版本中可用。由於仿真器不支持版本< 4.0,因此無法測試應用程序是否真的有效。你甚至不能購買新設備,因爲他們已經安裝了新的iOS。 即使你有一個較舊的設備,有時幾乎不可能檢查你的代碼的每一部分。

我真的需要支持舊版本,因爲我知道我的客戶(大約2/3)仍然使用3.x版本。

是不是有任何代碼分析器或掃描應用程序內調用的所有函數的可用性?

在一種情況下,應用程序崩潰,因爲我叫

+ (id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending 

哪些IA ALLOC的便捷方法+

- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending; 

(加上它的自動釋放) 但sortDescriptorWithKey僅在4.0 avaible @ _ @

回答

2

同樣的問題在這裏。我想通過設置Project AND Target的Base SDK爲3.0。然後編譯器會檢查你是否調用了一些不存在的方法。

但是,掃描儀的問題仍然存在,因爲上面的方法在使用ASI HTTP框架時會引發一些錯誤。所以我的程序是

  1. 變化SDK的3.0
  2. 經過這背後我自己的代碼
  3. 改變錯誤的方法是3.0兼容
  4. 設置項目的Base SDK回 最新的SDK

您可能必須安裝以前的XCode版本的SDK 3.0。並且不需要將目標Base SDK設置回最新版本。我曾經將它設置爲3.0,並從ASI HTTP獲取任何錯誤。

//編輯:對了XCode 3.2.1下載鏈接:Snow LeopardLeopard

+0

但我在哪裏得到舊的xcode版本? – Infinite 2011-01-14 13:48:39

+0

下載鏈接加入後,您必須先登錄,使用您的開發者帳號才能下載;) – 2011-01-14 14:53:39

+0

Thx :)現在我必須在同一時間安裝xcode的副本,但至少我可以針對較老的SKD代碼 – Infinite 2011-01-16 03:03:51

0

嘗試調用respondsToSelector方法

if([your_obj respondsToSelector:@selector(sortDescriptorWithKey:ascending:)]){ 
    // call sortDescriptorWithKey 
} 
else 
{ 
    // call another method 
} 

,您會收到在編譯時警告,但不會崩潰在運行時檢查。