Ios6 在不同版本的XCode上编译并运行相同的代码,以针对不同的iOS版本

Ios6 在不同版本的XCode上编译并运行相同的代码,以针对不同的iOS版本,ios6,compilation,ios7,xcode4.5,xcode5,Ios6,Compilation,Ios7,Xcode4.5,Xcode5,我的应用程序以前是用XCode 4.5编码的,现在为了与iOS7兼容,我将它编码到XCode 5.0中,添加了一些代码,这些代码只从iOS7开始支持。同时,我需要在XCode 4.5上运行它,现在它将显示错误,因为特定代码在iOS

我的应用程序以前是用XCode 4.5编码的,现在为了与iOS7兼容,我将它编码到XCode 5.0中,添加了一些代码,这些代码只从iOS7开始支持。同时,我需要在XCode 4.5上运行它,现在它将显示错误,因为特定代码在iOS<7.0中不可用

例如

当我用XCode 5.0编译它时没有问题,但在XCode 4.5中编译时显示错误,我知道原因-也就是说,UIStatusBarStyleLightContent仅在iOS7中可用,并且iOS7从XCode 5.0开始就开始支持,但是我想要一个解决方案,如果它不支持特定的iOS目标,该代码不会影响它

大概

if(NOT_SUPPORTED_IOS) {
   //NO NEED TO COMPILE THIS LINE or THIS LINE WONT EXECUTE
}

您可以使用条件编译来处理此类情况:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 // iOS 7.0 supported
  // iOS 7 code here
#else
  // Pre-iOS 7 code here
#endif
当您在Xcode 5下编译时,您将根据iOS 7 SDK进行编译:在这种情况下,将使用第一个分支。在Xcode 4.5下编译时,将使用较旧的SDK版本,并将使用第二个分支

请注意使用预编译器if/endif:这将有效地使代码对编译器可见或不可见

这只会在编译时修复该问题。但你还需要考虑另一个问题:当你的Xcode 5内置应用程序将在iOS 6设备上运行时。在这种情况下,由于使用iOS 7-only功能,您的应用程序将崩溃。因此,您还需要运行时保护,如:

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
在您的情况下,这将提供:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 // iOS 7.0 supported
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
      [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
    else
#endif
      [UIApplication sharedApplication].statusBarStyle = ...;

您可以使用条件编译来处理此类情况:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 // iOS 7.0 supported
  // iOS 7 code here
#else
  // Pre-iOS 7 code here
#endif
当您在Xcode 5下编译时,您将根据iOS 7 SDK进行编译:在这种情况下,将使用第一个分支。在Xcode 4.5下编译时,将使用较旧的SDK版本,并将使用第二个分支

请注意使用预编译器if/endif:这将有效地使代码对编译器可见或不可见

这只会在编译时修复该问题。但你还需要考虑另一个问题:当你的Xcode 5内置应用程序将在iOS 6设备上运行时。在这种情况下,由于使用iOS 7-only功能,您的应用程序将崩溃。因此,您还需要运行时保护,如:

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
在您的情况下,这将提供:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 // iOS 7.0 supported
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
      [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
    else
#endif
      [UIApplication sharedApplication].statusBarStyle = ...;

您使用xCode 4.5的原因是为了支持iOS 7之前的iOS版本吗?或者还有其他原因吗?您使用xCode 4.5的原因是为了支持iOS 7之前的iOS版本吗?还是有其他原因?