如何在App Store应用中同时支持armv6和iOS 6?

7
自Xcode 4.5起,我们无法构建armv6,因此无法再支持像iPhone 3G这样的设备。
是否有可能使用Xcode 4.3生成正确签名的armv6二进制文件,然后使用lipo将该二进制文件和Xcode 4.5生成的armv7二进制文件组合成一个fat二进制文件?
我该怎么做?有人知道好的教程吗?
生成的fat二进制文件可以提交到App Store吗?

我认为这不太可能,除非您尝试操作Xcode创建的存档文件。 - Richard J. Ross III
1
虽然不完全是你的问题,但请参考Mike在如何在xcode 4.5中支持armv6和armv7s的发布构建问题的答案。他描述了一种构建armv6和iOS 6.0二进制文件的过程,然后以适用于提交到App Store的应用程序的方式将它们组合起来。 - Brad Larson
2个回答

5
修改二进制文件后,使用lipo将导致代码签名不再匹配。因此,应在修改后重新对bundle进行代码签名。
使用Xcode 4.4甚至更早版本构建的应用程序仍可以在iOS 6设备上正常运行;并且有报道称,苹果仍然接受使用iOS 5.1 SDK构建的应用程序。
Objective-C允许您通过按名称通过Objective-C运行时调用一些较新的API,而这些API不在旧链接的框架中。(当然,应用程序应首先检查其在当前设备上的可用性!)
您甚至可以通过在应用程序包中包含一个568@2x高的默认图像,并正确设置所有应用程序窗口和视图大小和调整大小属性,即使使用早期的Xcode和预iOS-6 SDK也可以支持新的iPhone 5显示。 更新:当提交到iTunes App Store时,苹果不再接受以这种方式构建的应用程序。
补充:另一个潜在的解决方案是将开发分成两个类似的应用程序。一个适用于iOS 4.3及以上版本。另一个适用于iOS 4.2.x及以下版本,不支持iOS 6和iPhone 5。在应用商店中有两个不同的应用程序。但是尚不清楚苹果是否会允许这样做。

1
请注意:如果您在iOS 6之前的SDK中使用568@2x默认图像,则苹果将宣布您的二进制文件“无效”。我将采取创建两个应用程序的方式。 - Brent Priddy
刚在苹果的代码签名指南中发现了这段内容:“由于每个架构组件都独立签署,因此对已签名程序执行通用二进制操作(例如运行lipo命令)是没问题的。只要您不进行其他更改,结果仍将被有效签名。” 这意味着只要我已经正确设置了部署目标、架构和有效架构,它就应该能正常工作,对吗? - tajmahal
1
生成的存档在运行iOS 6.0的iPhone 4上工作良好,因此代码签名没有任何问题。但是在运行iOS 4.2的iPhone 3G上尝试安装时,会出现“无法安装”的错误。我还在3G上测试了仅限于armv6(由Xcode 4.3创建)的应用程序版本,它运行得很好。我不知道问题出在哪里。也许是Base SDK,需要保持在6.0,以便能够支持iOS 6功能,如新的4英寸屏幕。也许是Xcode在创建捆绑包时放入Info.plist中的DT *条目。 - tajmahal
然而,更改这些将需要重新签署捆绑包。如果有人想尝试并成功了,请在此处发布结果。谢谢! - tajmahal
@hotpaw2:总结一下,不可能在不需要 iOS 6 的情况下同时支持 iPhone 5 并防止兼容模式。我以前做过一次幸运的更新,可以同时支持 iPhone 5 和 iOS 4.2.1,但现在似乎已经不可能了。 - Timm
显示剩余5条评论

0

看起来有人已经想出了如何做到这一点,请参见此SO问题

不过我自己还没有测试过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接