【问题标题】:How can I make an iOS5 App backward compatible with iOS4?如何使 iOS 5 应用程序向后兼容 iOS 4?
【发布时间】:2012-02-12 02:01:43
【问题描述】:

我是 iOS 开发的新手,刚刚使用 iOS5 SDK 和 Xcode 4.2 完成了我的第一个应用程序。现在的问题是我的应用程序需要用户升级到 iOS5,因为我使用 Storyboard API 为应用程序创建 UI。 Storyboard 仅适用于 iOS5。

我的问题是,如何让我的应用至少向后兼容 iOS4?是否像使用 nib 文件创建 UI 一样简单?有人可以给我一个关于如何去做的例子吗?

另外,我是否需要注意其他类似的陷阱会导致我的应用向后不兼容?

【问题讨论】:

  • 在低于 4.0 的 Xcode 中打开项目,编译并查看.. 显示差异..
  • 考虑是否值得为新应用付出努力。有多少应用程序购买用户群(不是一般用户群)现在或将保留在 iOS4 上?如果您使用了故事板,那么您正在考虑进行重大改写。

标签: iphone objective-c ios xcode ios5


【解决方案1】:

UIStoryboardSegue 仅适用于 iOS 5,应用无法在 iOS 4 上运行。由于它不是编译时功能,您将不得不重新使用 NIB。

您使用的任何仅在 iOS 5 中可用的方法在 iOS 4 中都不起作用,这意味着任何处理情节提要的方法在 iOS 4 中都不起作用。

【讨论】:

    【解决方案2】:

    一般来说,如果你想向后兼容,你应该:

    1. 链接框架较弱。例如,Twitter.framework 仅在 iOS > 5.0 中可用,因此在 Xcode 的 Link Binary with Libraries 部分中将框架标记为 optional

    2. 像往常一样导入框架的头文件

      #import <Twitter.Twitter.h>
      
    3. 与其检查“操作系统版本是否大于 5.0”,不如像这样检查:

      • 具有特定名称的类是否可用:

        Class TWTweetClass = NSClassFromString(@"TWTweetComposeViewController");
        
        if (TWTweetClass){
            // Use the new stuff
            TWTweetComposeViewController *tweetSheet = [[TWTweetComposeViewController alloc] init];
            // etc.
        } else {
            // Handle the case when the class is not available
        }
        
      • 给定对象是否响应选择器:

        if([someObject doesRespondToSelector:@selector(someNewlyAvailableSelector:)]){
            [someObject performSelector:@selector(someNewSelector:)];
        }
        

    这适用于 Twitter 框架,但是,故事板在这方面有所不同,因为它不像您可以在运行时检查的可选框架。如果您想使用故事板,您的用户必须至少拥有 iOS 5.0 版。

    【讨论】:

      【解决方案3】:

      您应该查看https://github.com/doubleencore/DETweetComposeViewController。它是 TWTweetComposeViewController 的 iOS4 兼容重新实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 2023-03-06
        相关资源
        最近更新 更多