为什么__IPHONE_OS_VERSION_MIN_REQUIRED返回基本SDK而不是部署目标?

我想使用只能在iOS 4.3和更高版本上运行,但仍支持4.0和更高版本的类。为此,我断言是否要在iOS版本低于4.3的设备上使用此类。为了避免断言,我通过检查4.3方法的可用性来避免类内代码。部署目标当前设置为4.0。

但是,由于断言只会在我在旧设备上运行应用程序时发生,因此如果部署目标小于4.3,我也想添加一条警告。我正在尝试使用__IPHONE_OS_VERSION_MIN_REQUIRED。但是,这总是以某种方式继续返回50000(基本SDK),而不是返回43000以下的内容,我不知道为什么。

代码:

NSLog(@"Deployment target: %i", __IPHONE_OS_VERSION_MIN_REQUIRED); // Returns 50000 instead of 40000.
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 43000
// Never gets here
NSLog(@"%@", @"WARNING! NWMethodWrapper does not work on iOS versions below 4.3. If you insist on supporting older iOS versions, make sure you do not call NWMethodWrapper methods unless dlsym(RTLD_DEFAULT,\"imp_implementationWithBlock\") evaluates to true.");
#endif
NSAssert(dlsym(RTLD_DEFAULT,"imp_implementationWithBlock"), @"NWMethodWrapper uses methods that are only available from iOS 4.3 and later."); // Asserts, as appropriate (running on iOS 4.2.1).

编辑:我的部署目标已经设置为4.0,这就是为什么我问这个问题。

最佳答案

如果您自己没有定义__IPHONE_OS_VERSION_MIN_REQUIRED,则__IPHONE_OS_VERSION_MIN_REQUIRED最终由编译器设置(通过“AvailabilityInternal.h”中的宏)以匹配您设置的最低iphone OS版本,因此您需要确保部署目标为设置为iOS 5.0之前的版本。

10-07 18:36