最新的发布说明显示不支持4.2.1及更低版本,现在支持旧设备时必须使用2版本的Xcode开发??如果我们想开发 iOS6 并支持 4.2 及更低版本,这将很难支持旧设备。
我认为 Xcode 4.4 不会支持 iOS6。所以这就是问题所在。开发人员如何轻松支持这些平台而没有那么多麻烦?
最新的发布说明显示不支持4.2.1及更低版本,现在支持旧设备时必须使用2版本的Xcode开发??如果我们想开发 iOS6 并支持 4.2 及更低版本,这将很难支持旧设备。
我认为 Xcode 4.4 不会支持 iOS6。所以这就是问题所在。开发人员如何轻松支持这些平台而没有那么多麻烦?
你可以做到这一点,但它需要一些小的 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;
您还需要将架构设置为armv6
和armv7
。您也不能直接定位armv7s
. 但是,这并不意味着您的应用程序不会在 iPhone 5 上运行。 armv7
可执行文件应该在 iPhone 5 上运行,只是没有在armv7s
. 只是兼容性在另一个方向上不起作用(例如,armv7
可执行文件不能在armv6
iPhone 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
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 个选择:
如果您愿意超越 Xcode 直接支持的内容,请参阅 Nate 的回答。
最初的 iPhone 和 iPhone 3G 是唯一不支持 iOS 5 的设备。iPhone 3G 现在已经使用了 4 年。您可能需要考虑放弃对 iOS 4 的支持。如果您不想这样做,我认为您将不得不在两个不同版本的 Xcode 中进行开发。
我认为放弃对 iOS 4.2.1 的支持不是核心问题。事实上,我试图解决这个问题并执行以下操作:
但是,安装失败。这里的原因是 - 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。对?
根据ios版本统计,我认为定位到4.3是最好的选择
尝试使用手动设置项目设置IPHONEOS_DEPLOYMENT_TARGET=4.0
。不过不知道有没有副作用。