uta*_*hak 4 iphone objective-c app-store ios c-preprocessor
我有一个预处理器命令,用于检测iOS的版本并支持或不支持iCloud.我想知道的是,如果像这样的宏:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 50000
//stuff
#endif
Run Code Online (Sandbox Code Playgroud)
如果有iOS 4.x的人从应用程序商店下载应用程序,但它是在iOS 5.x上编译的,那么这项工作是否有效
由于这将在编译时评估是在设备上编译的应用程序或如何工作?是否有更好的方法来获得相同的结果?
你不能使用宏.宏在编译时进行评估,而不是在运行时进行评估,这是您想要的功能/功能检测,如iCloud支持.(否则你最终会启用它,因为你在所有情况下都在编译 iOS 5 SDK)
您应该只测试普遍性方法的存在,它告诉您是否可以调用它们,它告诉您是否支持iCloud,例如:
if ([[NSFileManager defaultManager] respondsToSelector:@selector(isUbiquitousItemAtURL:)])
{
// call it and do other iCloud stuff
}
Run Code Online (Sandbox Code Playgroud)
快速跟进说明:关于编译的问题.编译是将实际代码转换为在设备上运行的二进制文件的过程.当您在Xcode中构建Build时会发生这种情况,它只发生在您的计算机上,而不会发生在Apple或设备上.这就是为什么版本号的编译时检查不起作用的原因 - 当你将它发送到设备时,就已经做出了决定.
归档时间: |
|
查看次数: |
1063 次 |
最近记录: |