【问题标题】:How can I support both iOS 4.X SDK and iOS 5 SDK in my iPhone app?如何在我的 iPhone 应用程序中同时支持 iOS 4.X SDK 和 iOS 5 SDK?
【发布时间】:2011-11-15 16:31:06
【问题描述】:

我正在编写一个 iPhone 应用程序,我想在这个时间点支持尽可能多的用户群(以最小的痛苦),所以我决定以 IOS 4.3+ 为目标对我的受众来说是一个很好的用户子集。

我开始使用 XCode 4.2,但当我意识到项目模板发生了变化并且一切似乎都与故事板、ARC 等密切相关时,我又回到了 XCode 4.1。

我已经将我的应用程序构建到我真正想在我的设备上进行测试的地步,该设备安装了 iOS5。但是,当我尝试使用它时,只要在 Organizer/XCode 中单击“用于开发”,就会收到此消息:

项目的构建设置如下所示:

我的问题是:如何让这个内置于 XCode 4.1 的应用程序在 iOS 4.3 和 iOS 5 手机上运行?

iOS SDK 不向后兼容吗?我来自 Android 开发,其中低于当前的 SDK 通常可以在较新的 SDK 上运行 - 这在 iOS 世界中是否有所不同?如果是这样,通常如何处理?

任何关于我应该如何进行的指导将不胜感激。

【问题讨论】:

  • 它看起来不起作用,因为您使用的 XCode 无法在 iOS 5 上测试应用程序;但通常较旧的应用程序可以在最新的 iOS 版本上运行。

标签: iphone objective-c ios xcode ios4


【解决方案1】:

您可以继续在 Xcode 4.2 中打开您的应用程序,它应该仍然可以工作。自从 Xcode 3.x 天以来,我一直在开发一个特定的应用程序,我几乎完成了,现在在 Xcode 4.2 中前进。这不应该是一个问题。如果你想使用 Xcode 4.1,你会很好,但你将无法使用 iOS 5 中引入的新功能。

“跨版本”开发有几个方面需要注意。

  1. 测试:您只能在您的 SDK 中包含的或安装在您可能拥有的物理设备上的 iOS 版本上进行测试。 SDK 通常只随最新的 iOS 一起提供,有时也包括以前的 iOS,但自从 Xcode 4 发布以来,旧的 SDK 已在每个版本中逐步弃用。这并不是说与 iOS 5 SDK 链接的应用程序不会在旧版本的 iOS 上运行。这仅取决于您如何实现新功能。

  2. 功能:为了正确支持旧版本的 iOS,您需要确保在没有properly checking for the existence of classes, methods, and properties that were introduced in the newer versions of the OS 的情况下不会实施新功能。与 Android 不同,您不必担心一百万种硬件配置。 ;-)

  3. 弱链接:要支持新功能并仍与旧版本的 iOS 兼容,您需要针对用于实现新功能的框架进行弱链接。您可以在Apple Documentation on Weak Linking 中阅读更多相关信息。

  4. 部署目标:阻止应用在旧设备上加载的设置称为“部署目标”。如果您将此设置为 3.1.3,那么您的应用程序将在 iOS 3.1.3 及更高版本上运行。请记住,如果您没有编写正确的版本检查代码,您的应用可能会崩溃。

  5. ARC:您可以在创建项目时选择启用或禁用自动引用计数。 ARC 仅在编译时扫描您的程序,而不是在运行时扫描,它不会破坏旧版本操作系统上的应用程序。

【讨论】:

    【解决方案2】:

    您需要最新版本的 XCode 和 iOS SDK 才能将您的应用程序安装到您的 iOS 5.0 手机上。这并不意味着反之亦然——您的设备上不需要与计算机上安装的相同版本的 iOS。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      您可以使用最新的 SDK,只需在项目构建设置中将“IOS 部署目标”版本设置为 4.3。

      【讨论】:

        【解决方案4】:

        XCode 4.1 不支持 iOS5,因为 Xcode 包不包含 iOS5 SDK。因此,您必须返回 Xcode 4.2 并将您的项目定位为 iOS 4.3(您也可以使用此 Xcode 版本将其定位为 iOS 4.0,但您将无法模拟它;您甚至可以从以下位置下载较旧的 iOS 4.x 包版本Xcode 首选项菜单,如果你真的需要在你的设备中模拟它们)。

        如果您愿意,您可以选择退出 ARC,这个选择是在您创建项目时提供给您的,所以不用担心;但考虑到 ARC 仅在编译时发挥其魔力,而不是在运行时,因此如果您决定使用该技术,您的向后兼容性将保持不变。最后,如果您不想要 Storyboard,只需选择 Empty app 模板,它只会将基本文件放入您的项目中。通过这个模板,您可以创建任何 iOS 应用程序,这是我通常遵循的方法。

        【讨论】:

          猜你喜欢
          • 2012-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-27
          • 2012-05-23
          相关资源
          最近更新 更多