Just My Life & My Work

[iOS] 判斷iOS版本

身為開發者的我們,面對程式語言日新月異是非常正常的事情,iOS每年都會發佈更新,於是我們就必須去了解哪些API即將棄用(deprecated),在未來的專案就儘量不要去使用。

iOS_Support_Matrix_V16.1

這張iOS支援陣列圖非常詳細地描述i設備的各種特性,點開放大來看可說是嘆為觀止!如果是個Apple粉絲開發者,那麼鐵定要好好徹底了解它:D

實際上我是在iOS 5開始接觸寫iOS APP,恰好可以藉由這一張iOS版本比較圖表來回顧過去與放眼未來! Apple已公開今年2014 WWDC是在六月初,由於想與會的人非常之多,這次顛覆以往搶購的規則,令人震驚地採取抽籤機制,只要是開發者都有機會被抽中,哈~我好想去蘋果總部一趟呀!

ios_version_chart_2013

過去的我沒什麼在寫判斷iOS版本的程式碼,其實也是不太曉得哪些API已被棄用,直到測試的時候使用不同iOS版本的機子,發生crash的狀況才很訝異地找到問題。

/**
 Theme: Detect iOS version
 IDE: Xcode 5
 Language: Objective C
 Date: 103/04/14
 Author: HappyMan
 Blog: https://cg2010studio.wordpress.com/
 */
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_0)
{
    //做以前就能做的事情
}
else
{
    //做未來才能做的事情
}

NSObjCRuntime.h

#if TARGET_OS_IPHONE
#define NSFoundationVersionNumber_iPhoneOS_2_0	678.24
#define NSFoundationVersionNumber_iPhoneOS_2_1  678.26
#define NSFoundationVersionNumber_iPhoneOS_2_2  678.29
#define NSFoundationVersionNumber_iPhoneOS_3_0  678.47
#define NSFoundationVersionNumber_iPhoneOS_3_1  678.51
#define NSFoundationVersionNumber_iPhoneOS_3_2  678.60
#define NSFoundationVersionNumber_iOS_4_0  751.32
#define NSFoundationVersionNumber_iOS_4_1  751.37
#define NSFoundationVersionNumber_iOS_4_2  751.49
#define NSFoundationVersionNumber_iOS_4_3  751.49
#define NSFoundationVersionNumber_iOS_5_0  881.00
#define NSFoundationVersionNumber_iOS_5_1  890.10
#define NSFoundationVersionNumber_iOS_6_0  993.00
#define NSFoundationVersionNumber_iOS_6_1  993.00
#endif

可以見到,這些關鍵字都被定義成浮點數,於是知道這一點之後,我們就能以數值來判斷版本範圍囉~

比較讓人疑惑的是,居然沒有iOS 7.0和iOS 7.1,明明就已經更新Xcode 5.1了呢!

開發的時候總會有兩種狀況:

  1. 舊版iOS呼叫新版SDK:會崩潰
  2. 新版iOS呼叫棄用(deprecated)SDK:沒事,通常還可以使用

參考:彼得潘、iOS Support Matrix

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲