最新发行说明表明4.2.1及更低版本将不受支持,我们现在必须使用2版本的Xcode来支持旧设备?如果我们想要开发iOS6并支持4.2及更低版本,这将很难支持旧设备。
我认为Xcode 4.4不支持iOS6。所以这就是问题所在。开发人员如何在没有这么多麻烦的情况下轻松支持这些平台?
答案 0 :(得分:29)
你可以这样做,但它需要一些小的Xcode黑客攻击和一些牺牲。根据“支持iOS 6”的含义,这可能对您有用,也可能不够。如果您只是希望您的应用在iOS 6上运行,那么这应该可行。如果您还需要应用程序来合并新的iOS 6功能,那么它就不会。
(对于使用多个Xcode版本没有问题的其他人请注意:this similar question的答案允许您也使用新的iOS 6 API并直接定位armv7)
See basic instructions on chpwn's blog here(但也请阅读下面的其他内容!)
基本上,您可以使用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 does not support ARC。
最后,您可能仍会看到来自Xcode的关于iOS部署目标低于4.3的警告,并且armv6
不受支持。我发现,这些不是问题,可以忽略不计:
在我的应用程序可执行文件上运行lipo -info
后显示所需的结果:
lipo -info MyAppName
Architectures in the fat file: MyAppName are: armv6 armv7
答案 1 :(得分: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个选择:
如果您对超越Xcode直接支持的内容感到满意,请参阅Nate的回答。
答案 2 :(得分:2)
最初的iPhone和iPhone 3G是唯一不支持iOS 5的设备。现在iPhone 3G已经有4年了。您可能需要考虑放弃对iOS 4的支持。如果您不想这样做,我认为您必须开发两个不同版本的Xcode。
答案 3 :(得分:2)
我认为对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。正确?
答案 4 :(得分:0)
答案 5 :(得分:0)
尝试使用IPHONEOS_DEPLOYMENT_TARGET=4.0
手动设置项目设置。但是,我不知道是否有任何副作用。