为什么__IPHONE_OS_VERSION_MIN_REQUIRED返回基本SDK而不是部署目标?
我想使用一个只能在iOS 4.3及更高版本上运行的类,但仍支持4.0及更高版本。为了实现这一点,我断言如果我尝试在iOS版本低于4.3的设备上使用此类。为了避免断言,我通过检查4.3方法的可用性来避免类in-code。部署目标当前设置为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,这就是我提出问题的原因。
答案 0 :(得分:3)
如果您没有自己定义__IPHONE_OS_VERSION_MIN_REQUIRED
,__IPHONE_OS_VERSION_MIN_REQUIRED
最终由编译器(通过“AvailabilityInternal.h”中的宏)设置,以匹配您的最小iphone操作系统版本设置为,所以你需要确保你的部署目标设置为早于iOS 5.0的东西。
答案 1 :(得分:3)
您必须确保行为类似的Class实际上是相关项目的一部分,而不是通过工作区访问的另一个项目的一部分。这些项目可以设置为自己的部署目标,这些目标不必与您在主项目中期望的部署目标相同。
在我的例子中,类的部署目标设置为5.0(而不是我的主项目,设置为4.0),这意味着__IPHONE_OS_VERSION_MIN_REQUIRED
按预期工作。