36

最新的发布说明显示不支持4.2.1及更低版本,现在支持旧设备时必须使用2版本的Xcode开发??如果我们想开发 iOS6 并支持 4.2 及更低版本,这将很难支持旧设备。

我认为 Xcode 4.4 不会支持 iOS6。所以这就是问题所在。开发人员如何轻松支持这些平台而没有那么多麻烦?

4

6 回答 6

29

你可以做到这一点,但它需要一些小的 Xcode 黑客攻击和一些牺牲。根据您所说的“支持 iOS 6”的含义,这对您来说可能不够,也可能不够。如果您只是希望您的应用程序在 iOS 6 上运行,那么这应该可以。如果您还需要您的应用程序包含新的 iOS 6 功能,那么它不会。

    (注意使用多个版本的 Xcode 没有问题的其他人:这个类似的问题的答案确实允许您也使用新的 iOS 6 API 并直接针对 armv7s)

在此处查看 chpwn 博客上的基本说明 (但也请阅读下面的其余部分!)

基本上,您可以使用 Xcode 4.5 为 iOS 4 及更高版本构建,但是您不能利用新的仅 iOS 6 功能。因此,您实际上是在为 iOS 4 和 5 构建,并假设应用程序可以在 iOS 6 上正常运行(这应该是真的,但您需要自己测试)。

您需要复制 iOS 5 SDK 文件夹

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.*.sdk

从旧的 Xcode 安装(您需要暂时保留,或重新安装到非标准位置)。然后,您将 Build Settings 中的Deploy Target设置为 iOS 4.0(或您想要的任何最低操作系统)。您可能需要project.pbxproj在文本编辑器中打开文件以手动设置:

IPHONEOS_DEPLOYMENT_TARGET = 4.0;

您还需要将架构设置为armv6armv7您也不能直接定位armv7s. 但是,这并不意味着您的应用程序不会在 iPhone 5 上运行。 armv7可执行文件应该在 iPhone 5 上运行,只是没有在armv7s. 只是兼容性在另一个方向上不起作用(例如,armv7可执行文件不能在armv6iPhone 3G 上运行)。

在此处输入图像描述

还有一个步骤可能是必要的,在 chpwn 的博客中没有提到。您可能会收到这些警告(实际上是错误,因为 Xcode 不会正确生成您的可执行文件):

警告:没有规则为架构 armv6 处理 sourcecode.c.objc 类型的文件“$(PROJECT_DIR)/main.m”

为了解决这个问题,你需要为你的目标设置一个自定义的构建规则,告诉 Xcode 使用LLVM GCC 4.2来生成 armv6 代码。为匹配模式的文件定义规则*.[mc]

在此处输入图像描述

这将是一个不同于 Xcode 默认编译器的编译器,您可能需要调整 Objective-C 代码中的一些语法。尽管许多想要这样做的人可能在 ARC 之前编写了他们的应用程序,但重要的是要注意LLVM gcc 4.2 不支持 ARC

最后,您可能仍会看到来自 Xcode 的有关 iOS 部署目标低于 4.3 且armv6不受支持的警告。我发现这些都不是问题,可以忽略:

在此处输入图像描述

在此之后在我的应用程序可执行文件上运行lipo -info会显示所需的结果:

lipo -info MyAppName
Architectures in the fat file: MyAppName are: armv6 armv7 
于 2012-10-25T04:29:39.807 回答
22

Xcode 4.5 使 iOS 4.3 成为最早支持的操作系统,它有效地孤立了原始 iPhone 和 3G。

如果您想支持 4.3 之前的 iOS 版本,您将需要保留大约 4.4 版本的 Xcode。

更清楚一点:你不能轻易(意味着 Xcode 不是开箱即用的)支持 4.3 之前的设备并在同一个应用程序中使用 iOS 6 功能。这是因为 iOS 6 功能需要 XCode 4.5,这也将 iOS 4.3 设置为支持的最低操作系统。

因此,您有 3 个选择:

  1. 继续使用 XCode 4.4。您将能够以 4.3 之前的 iOS 为目标。您将无法利用 iOS 6 的功能,但假设您在实际的 iOS 6 设备上执行了充分的测试,您的应用程序应该可以正常运行。
  2. 迁移到 XCode 4.5。您将无法以 4.3 之前的 iOS 为目标,但您将能够利用 iOS 6 的功能。
  3. 为您的应用制作两个版本。使用 XCode 4.4 构建一个版本(如选项 1),另一个使用 4.5(如选项 2)。从分发的角度来看,这将是 2 个独立的应用程序,它们每个都有自己的捆绑 ID,等等。您将在应用程序商店中有两个条目。

如果您愿意超越 Xcode 直接支持的内容,请参阅 Nate 的回答。

于 2012-09-17T16:34:01.447 回答
2

最初的 iPhone 和 iPhone 3G 是唯一不支持 iOS 5 的设备。iPhone 3G 现在已经使用了 4 年。您可能需要考虑放弃对 iOS 4 的支持。如果您不想这样做,我认为您将不得不在两个不同版本的 Xcode 中进行开发。

于 2012-09-17T16:20:00.013 回答
2

我认为放弃对 iOS 4.2.1 的支持不是核心问题。事实上,我试图解决这个问题并执行以下操作:

  • 使用 iOS 6 SDK 构建应用程序,将部署目标设置为 iOS 4.2.1(有效)。
  • 打包应用程序以进行临时安装并将应用程序安装在 iOS 4.2.1 设备 (iPod touch 2G) 上。
  • 测试应用程序。

但是,安装失败。这里的原因是 - afaik - 不是 iOS 版本。原因是架构。XCode 4.5 不再允许您为 armv6 构建。它仅适用于 armv7。另一方面:所有具有 armv7 或更高版本的设备都可以运行 iOS 5。唯一不支持 armv7 的设备是 iPhone、iPhone 3G、iPod touch 1G 和 iPod touch 2G。

所以对我来说,问题是:你能用 XCode 4.5 和 iOS 6 作为基础 SDK 为 armv6 构建吗?

编辑:你不能这样做,因为 iOS 6 基础 SDK 不适用于 armv6。对?

于 2012-10-13T13:23:22.043 回答
0

根据ios版本统计,我认为定位到4.3是最好的选择

于 2012-09-28T07:07:32.260 回答
0

尝试使用手动设置项目设置IPHONEOS_DEPLOYMENT_TARGET=4.0。不过不知道有没有副作用。

于 2012-10-08T10:09:19.063 回答