天天看點

高效的 iOS 應用版本支援方法

<b>本文講的是高效的 iOS 應用版本支援方法,</b>

<b></b>

告誡:有時候會缺少一些常量。<code>NSFoundationVersionNumber</code> 是在 <code>NSObjCRuntime.h</code> 中定義的,作為 Xcode 7.3.1 的一部分,我們設定常數範圍從 iPhone OS 2 到 <code>#define NSFoundationVersionNumber_iOS_8_4 1144.17</code> - 而不是 9.0-9.3\。 對于<code>kCFCoreFoundationVersionNumber</code> 也一樣。注意,雖然這些數字很相似,但是它們的意義是不同的,是以使用其中一個或者另外一個。

在 SDK 10(Xcode 8)蘋果補充了缺少的數字,甚至還有未來的版本。

會有 iOS 9.4 嗎?考慮到 iOS 10 将在未來 3 個月内釋出,而且 9.3.3 仍然是 beta 版,我估計是不會有了,但是最好還是占個坑吧。在 PSPDFKit 中,我們是使用下面的模式來定義缺少的版本号。如果代碼以一個更高的最低部署目标建構,代碼會自動編譯,當我們遺漏了一些 iOS 版本時,這會很有幫助。

如果我們直接看 <code>operatingSystemVersion</code> 的實作,确實有點醜。它被緩存了,但是它通過調用<code>_CFCopySystemVersionDictionary()</code> 生成版本号,然後查找 <code>kCFSystemVersionProductVersionKey</code> (就是<code>ProductVersion</code>),然後對該字元串執行 <code>componentsSeparatedByString:</code> 。不知道為啥,我更期望這是寫死,但是從外部字典檔案讀取可能更加靈活。

現在可以用更少的代碼完成同樣的事:

在很早的時候,使用一個不在所有版本中可用的類意味着要使用下面的模式:

為 Objective-C 增加弱導入是 Snow Leopard 沒有按時釋出的原因。假設在 Mac OS X 10.7(以貓科動物命名)按時釋出,直到 Mac OS X 10.8 你才能用的上。

<b>原文釋出時間為:2016年07月28日</b>

<b>本文來自雲栖社群合作夥伴掘金,了解相關資訊可以關注掘金網站。</b>