我想要一些代码在10.6及以下编译,但不是10.7及以上。
例如:
#ifdef current version is MAC_OS_X_VERSION_10_6 or below
// do this
elif current version is MAC_OS_X_VERSION_10_7 or above
//do that
#endif
有人可以帮我找到合适的宏吗?我查看了AvailabilityMacros.h,但未能找出正确的ifdef。
我有一个动态库,它不能在10.7及以上版本下加载,但在10.6下正确加载。这是由私人符号_CGContextAppendPath
引起的。我希望在10.6及以下版本下使用它,但要避免在10.7及以下版本中使用它。这是因为10.7及更高版本上不存在_CGContextAppendPath
符号。
我用过,
SInt32 version = 0;
Gestalt( gestaltSystemVersion, &version );
bool lionabove = ( version >= 0x1070 );
没用。
答案 0 :(得分:2)
对于目标C,首选路线是通过例如检查特定API的可用性。 [object respondsToSelector:]
。
对于您正在使用的C库,弱链接到CoreGraphics.framework
(因此当某些函数不存在时加载不会失败)并通过{{1}检查相关函数的可用性}。
http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html#//apple_ref/doc/uid/10000163i-CH1-107837和http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Using/using.html#//apple_ref/doc/uid/20002000-1114537-BABHHJBC中的详细信息。
答案 1 :(得分:0)
Apple为iOS和Mac OS 10.6及更高版本(位于Availability.h
)引入了一个新的<SDK>/usr/include/Availability.h
宏文件。你可以这样做:
#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070
// code to run up through 10.6
#else
// code to run on 10.7 or higher
#endif
请注意,此宏也可用(根据您的逻辑,这可能更好):
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
// code to run on 10.7 or above
#else
// code to run below 10.7
#endif
此处的文档位于:Conditionally Compiling for Different SDKs,如果您要混合iOS和Mac OS X代码,尤其值得一看。我还强烈建议您阅读上面提到的头文件。