iOS 適配低版本的方法

weixin_34290000發表於2017-05-17

關於適配低版本的裝置

主要介紹了這兩個巨集__IPHONE_OS_VERSION_MAX_ALLOWED__IPHONE_OS_VERSION_MIN_ALLOWED

只介紹了 一個巨集的用法 __IPHONE_OS_VERSION_MAX_ALLOWED

這篇文章值得詳細研究,基本上把適配低版本的內容講完了

文章摘錄

  • Deployment Target
    指的是你的APP能支援的最低系統版本,如要支援iOS6以上,就設定成iOS6即可。

  • Base SDK
    指的是用來編譯APP的SDK(Software Development Kit)的版本,一般保持當前XCode支援的最新的就好,如iOS8.4。SDK其實就是包含了所有的你要用到的標頭檔案、連結庫的集合,你的APP裡面用的各種類、函式,能編譯、連結成最後的安裝包,就要靠它,蘋果每次升級系統,新推出的各種API,也是在SDK裡面。所以一般Base SDK肯定是大於等於Deployment Target的版本。

所以並不是說,能編譯通過的,就一定能執行成功!還要在執行時檢查!

  • 巨集只在編譯時生效!
    通俗易懂的說, 就是 只要是編譯時通過的程式碼, 打包在 真機上執行時就一定會走這些程式碼, 比如, 一個app 編譯的時候deployment target = 6.0 Base SDK = 8.0, 編譯的時候走的都是8.0的方法,那麼我們在真機系統為 iOS6.0的系統上執行的時候,就會走iOS8.0的方法, 那麼一定會奔潰, iOS 系統是向下相容的, iOS 6 中肯定不存在iOS 8 的方法,那麼必須會奔潰啊.

編譯時檢查SDK版本,執行時檢查系統版本

用到的巨集如下:

  • __IPHONE_OS_VERSION_MAX_ALLOWED: 值等於Base SDK,即用於檢查SDK版本的。
  • __IPHONE_OS_VERSION_MIN_REQUIRED: 值等於Deployment Target,檢查支援的最小系統版本。

下面兩個方法的具體例子看這裡

  • Weakly Linked - 執行時檢查類、方法是否可用 (具體事例 看原文)

  • 用Method Swizzling做相容(這個先不去管, 找時間 和執行時一起研究)

相關文章