最新的发布说明指出将不再支持4.2.1及以下版本,如果要支持旧设备,我们现在必须使用两个版本的Xcode来开发??如果我们想要开发iOS6并支持4.2及以下版本,这将会是一个困难。
我认为Xcode 4.4将不支持iOS6。所以这是问题所在。开发人员如何能够轻松地支持这些平台而不需要太多麻烦呢?
最新的发布说明指出将不再支持4.2.1及以下版本,如果要支持旧设备,我们现在必须使用两个版本的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安装中(您需要暂时保留或重新安装到非标准位置),您将设置构建设置中的部署目标为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无法正确生成可执行文件):
警告:没有处理源代码类型为sourcecode.c.objc且架构为armv6的文件“$(PROJECT_DIR)/main.m”的规则
为了解决这个问题,您需要为目标设置一个自定义构建规则,告诉Xcode使用LLVM GCC 4.2来生成armv6代码。为与*.[mc]
匹配的文件定义规则:
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,您需要保留一个Xcode 4.4版本。
更明确地说:您不能轻松地(意味着Xcode不能直接)在同一应用程序中支持早于4.3的设备并使用iOS 6功能。这是因为iOS 6功能需要XCode 4.5,它还将iOS 4.3设置为最低支持的操作系统。
所以,你有3个选择:
如果您愿意超出Xcode直接支持的范围,请参考Nate的答案。
lipo
将armv6、armv7和armv7s的可执行文件合并到一个捆绑包中,提交给Apple。 - Nate原始的 iPhone 和 iPhone 3G 是唯一不支持 iOS 5 的设备。iPhone 3G 现在已经有4年历史了。您可能需要考虑放弃对 iOS 4 的支持。如果您不想这样做,我认为您将不得不在两个不同版本的 Xcode 中进行开发。
IPHONEOS_DEPLOYMENT_TARGET=4.0
。然而,我不知道是否会有任何副作用。根据 iOS 版本统计,我认为以4.3为目标是最好的选择。
*.mm
的构建规则,并指向LLVM GCC 4.2编译器。 - Nate