我認爲它只會崩潰,對吧?如果我開發一款使用iOS 4 SDK的iPhone應用程序,並使其進入應用程序商店,我如何確保它不會被運行舊版iOS的用戶下載?如果我的iOS 4 iPhone應用程序在iOS 3.2手機上執行,會發生什麼?
在此先感謝您的幫助!
我認爲它只會崩潰,對吧?如果我開發一款使用iOS 4 SDK的iPhone應用程序,並使其進入應用程序商店,我如何確保它不會被運行舊版iOS的用戶下載?如果我的iOS 4 iPhone應用程序在iOS 3.2手機上執行,會發生什麼?
在此先感謝您的幫助!
如果您的項目指定4.0作爲目標,那麼它甚至不會在3.2手機上加載 - 沒問題。
當您將應用程序發佈到商店時,您可以指定最低的操作系統級別和可接受的設備(例如,您不需要在iPod Touch上查找GPS)。有一個兼容性檢查可以防止應用程序在不兼容的情況下被加載。應用程序審批流程(希望)確保您所說的實際上是兼容的。
如果您以某種方式使用設備上不存在的API(因爲您在引入該API之前定位了某個版本或出於任何其他原因),那麼是的,您將因未知選擇器而崩潰。
您可以使用
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200
檢查你的目標是什麼版本?第一個數字(3)是主要的修訂,第三個數字(2)是次版本。因此顯示的檢查是3.2。
而不是使用編譯時的預處理程序指令來分割你的代碼,可以考慮使用運行時檢查像respondsToSelector:
,使用針對零NSClassFromString
檢查,以確定是否存在類和聯弱到新的框架和庫使用亞當埃伯巴赫的做法。
這將允許你寫一個應用程序,可以住在多個設備上,無需任何代碼隔離或單獨的二進制文件。
會導致代碼膨脹,或者更糟糕,性能更慢/更重? – 2010-06-08 10:59:49
我相信性能的影響是完全可以忽略的......根據你的代碼膨脹的定義,我傾向於不同意。這裏有幾行代碼,可以在刪除對舊操作系統的支持時刪除。 – Jasarien 2010-06-09 11:49:45
respondsToSelector是一個很好的方法,可能比預處理器更好。 – 2010-06-10 22:17:34
目前還沒有iOS 3.2手機。 iOS 3.2僅適用於iPad。 iOS 3.0和3.1適用於iPhone。 – 2010-06-08 02:05:56