iOSのバージョン別の適応問題(ifdef_IPHONE_7_0)
2913 ワード
部分参照http://www.cnblogs.com/ios8/p/ios-version-com.html
以下では、簡単な例を挙げて、iOS 7.0とiOS 6.1(およびより低いバージョン)との間の適応問題を説明する.
新しいプロジェクトは、デフォルトのdevelopment target、base sdk及びシミュレータのバージョンは全部7.0で、App DelegateのdidFinish Launching WithOptionsの方法に書いてください.
development target、base sdk及びシミュレータのバージョンは6.1に変更されました.そして運転したらエラーが発生します.
つまり、tintColor属性はiOS 6.1にはないです.コンパイルするときにエラーが発生します.この時は下のように判断文を加えても無駄です.やはりエラーを報告します.
このほか、frame eworkまたは.aを使用する場合は注意が必要です.
frame ewarkまたは.aをコンパイルする際には、iOS 6のsdkを使用するとframe eworkまたは.aをスムーズにコンパイルすることができますが、appを生成する際には、コンパイルされたapを保証する必要があります.float Valueそれ)
説明:
1、もし低バージョンのsdkを使ってコンパイルされた場合(iOS 6など)、最終的なアプリケーションを最高のバージョンのデバイス(iOS 7のシステム)にインストールすると、問題が起こらないはずです.iOS 7はiOS 6に対応していますが、iOS 7特有の新しい機能は使えません.コードが遮断されていますので.
2、高バージョンのsdkを使ってコンパイルした場合(iOS 7など)、最終的なアプリケーションを低バージョンのデバイス(iOS 6のシステム)にインストールします.この場合、運行に参加しないと問題が発生すると判断します.アプリケーション自体はiOS 7でコンパイルしていますので、iOS 7ならではの新機能を使っていますが、デバイスはiOS 7をサポートしていません.
書いたのはちょっと乱れているかもしれません.自分で記録するためのものです.
以下では、簡単な例を挙げて、iOS 7.0とiOS 6.1(およびより低いバージョン)との間の適応問題を説明する.
新しいプロジェクトは、デフォルトのdevelopment target、base sdk及びシミュレータのバージョンは全部7.0で、App DelegateのdidFinish Launching WithOptionsの方法に書いてください.
self.window.tintColor = [UIColor redColor];
そして運行します.このように間違いはありません.これからdevelopment target、base sdk及びシミュレータのバージョンは6.1に変更されました.そして運転したらエラーが発生します.
つまり、tintColor属性はiOS 6.1にはないです.コンパイルするときにエラーが発生します.この時は下のように判断文を加えても無駄です.やはりエラーを報告します.
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
self.window.tintColor = [UIColor redColor];
}
このような状況に遭遇した場合は、前処理文を加えて書くしかないです.#ifdef __IPHONE_7_0
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
self.window.tintColor = [UIColor redColor];
}
#endif
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
self.window.tintColor = [UIColor redColor];
}
#endif
__IPHONE_OS_VERSION_MAX_ALLOWED usr/include/AvailabilityInternal.h
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
/* make sure a default max version is set */
#ifndef __IPHONE_OS_VERSION_MAX_ALLOWED
#define __IPHONE_OS_VERSION_MAX_ALLOWED __IPHONE_7_0
#endif
/* make sure a valid min is set */
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_0
#undef __IPHONE_OS_VERSION_MIN_REQUIRED
#define __IPHONE_OS_VERSION_MIN_REQUIRED __IPHONE_2_0
#endif
。。。。
#endif
#import
…… sdk6.1 usr/include Availability.h , , iphone
#define __IPHONE_2_0 20000
#define __IPHONE_2_1 20100
#define __IPHONE_2_2 20200
#define __IPHONE_3_0 30000
#define __IPHONE_3_1 30100
#define __IPHONE_3_2 30200
#define __IPHONE_4_0 40000
#define __IPHONE_4_1 40100
#define __IPHONE_4_2 40200
#define __IPHONE_4_3 40300
#define __IPHONE_5_0 50000
#define __IPHONE_5_1 50100
#define __IPHONE_6_0 60000
#define __IPHONE_6_1 60100
#define __IPHONE_NA 99999 /* not available */
sdk 7.0の中で1行多くなりました. #define __IPHONE_7_0 70000
iOS 8ももちろん同じです.このほか、frame eworkまたは.aを使用する場合は注意が必要です.
frame ewarkまたは.aをコンパイルする際には、iOS 6のsdkを使用するとframe eworkまたは.aをスムーズにコンパイルすることができますが、appを生成する際には、コンパイルされたapを保証する必要があります.float Valueそれ)
説明:
1、もし低バージョンのsdkを使ってコンパイルされた場合(iOS 6など)、最終的なアプリケーションを最高のバージョンのデバイス(iOS 7のシステム)にインストールすると、問題が起こらないはずです.iOS 7はiOS 6に対応していますが、iOS 7特有の新しい機能は使えません.コードが遮断されていますので.
2、高バージョンのsdkを使ってコンパイルした場合(iOS 7など)、最終的なアプリケーションを低バージョンのデバイス(iOS 6のシステム)にインストールします.この場合、運行に参加しないと問題が発生すると判断します.アプリケーション自体はiOS 7でコンパイルしていますので、iOS 7ならではの新機能を使っていますが、デバイスはiOS 7をサポートしていません.
書いたのはちょっと乱れているかもしれません.自分で記録するためのものです.