iOS13不一樣版本Xcode的編譯適配

背景

新的Xcode 11.0出來了,在團隊裏,可能喜歡嚐鮮了同窗會優先更新體驗,調用一些iOS13纔有的API,好比html

@implementation UISearchBar (Ext)

- (UITextField *)getSearchTextField {
    if (@available(iOS 13.0, *)) {
        return self.searchTextField;
    } else {
        return [self valueForKey:@"_searchField"];
    }
}
@end
複製代碼

此時,還處於Xcode ~< 13.0的同窗編譯是不經過的,由於他們的~<13.0 UIKit中尚未這個API。ios

一. 解決方案

添加編譯判斷bash

#ifndef __IPHONE_13_0
    #define __IPHONE_13_0 130000
#endif

@implementation UISearchBar (Ext)

- (UITextField *)getSearchTextField {
/* #if avoid build errors*/
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
    if (@available(iOS 13.0, *)) {
        return self.searchTextField;
    } else {
        return [self valueForKey:@"_searchField"];
    }
#else
    return [self valueForKey:@"_searchField"];
#endif
}
@end
複製代碼

核心代碼在這裏ui

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
    //Base SDK最高支持版本大於等於13.0
#else
    
#endif
複製代碼

二. 解析

1.__IPHONE_OS_VERSION_MAX_ALLOWED

__IPHONE_OS_VERSION_MAX_ALLOWED這個東西進到頭文件usr/include/AvailabilityInternal.h能夠看到spa

__IPHONE_OS_VERSION_MAX_ALLOWED

它是當前支持的最高版本,至關於前面Xcode中選擇的Base SDK 參照:曾靜的博客-iOS開發之多系統版本兼容code

2.#define __IPHONE_13_0 130000

#define __IPHONE_13_0 130000這在這裏usr/include/AvailabilityInternal.hcdn

__IPHONE_13_0    130000

到此就解決了不一樣版本Xcode的編譯適配問題。htm

END
相關文章
相關標籤/搜索