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

Posted

技术标签:

【中文标题】在 App Store 应用中同时支持 armv6 和 iOS 6?【英文标题】:Support both armv6 and iOS 6 in an App Store app? 【发布时间】:2012-09-25 00:51:40 【问题描述】:

从 Xcode 4.5 开始,我们无法为 armv6 构建,因此无法再支持 iPhone 3G 等设备。

是否可以使用 Xcode 4.3 来生成正确签名的 armv6 二进制文件,然后使用 lipo 将该二进制文件和 Xcode-4.5 生成的 armv7 二进制文件组合成一个胖文件?

我该怎么做呢?有谁知道好的教程吗?

是否允许将生成的胖二进制文件提交到 App Store?

【问题讨论】:

我认为这是不可能的,除非您尝试使用 Xcode 创建的档案。 虽然与您的问题不完全相同,但请参阅 Mike 对问题 How to support both armv6 and armv7s for release build in xcode 4.5 的回答。他描述了构建 armv6 和 ios 6.0 二进制文件的过程,然后以适用于提交到 App Store 的应用程序的方式组合它们。 【参考方案1】:

使用 lipo 修改二进制文件后,代码签名将不再匹配。所以捆绑包之后需要重新设计。

使用 Xcode 4.4 甚至更早版本构建的应用程序仍然可以在 iOS 6 设备上正常运行;并且有报道称 Apple 仍在接受使用 iOS 5.1 SDK 构建的应用程序。

Objective C 将允许您使用一些不在旧链接框架中的较新 API,方法是通过 Objective C 运行时按名称调用它们。 (当然,应用程序应该首先检查它们在当前设备上的可用性!)

您甚至可以从早期的 Xcode 和 iOS-6 之前的 SDK 支持新的 iPhone 5 显示屏,只需在应用程序包中包含一个 568@2x 高的默认图像,并设置所有应用程序的窗口和视图大小以及调整大小属性适当地。更新:当提交到 iTunes 应用商店时,Apple 不再接受以这种方式构建的应用程序。

添加: 另一个潜在的解决方案是将您的开发分成两个类似的应用程序。一个适用于 iOS 4.3 及更高版本。一款适用于不支持 iOS 6 和 iPhone 5 的 iOS 4.2.x 及更低版本。应用商店中有两个不同的应用。然而,苹果是否会允许这一点尚不清楚。

【讨论】:

在链接到 iOS 5.1 SDK 的同时使用 iOS 6 SDK 功能听起来不是一种非常可靠的做事方式,是吗?我更喜欢可以独立构建 armv6 和 armv7 版本的解决方案。至于代码签名:有没有办法在创建胖二进制文件后对包进行代码签名? 仅供参考:如果您在 iOS-6 之前的 SDK 中有 568@2x 默认图像,Apple 将声明您的二进制“无效”。我正在走有两个应用程序的道路 有没有办法在使用 lipo 修改后手动重新设计捆绑包? 刚刚在Apple的代码签名指南中找到了这个:“因为每个架构组件都是独立签名的,所以对签名的程序执行通用二进制操作(例如运行lipo命令)是可以的。结果将只要您不进行其他更改,仍然可以有效签署。”这意味着它应该可以工作,只要我已经正确设置了部署目标、架构和有效架构,对吧? 生成的存档在运行 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* 条目。 【参考方案2】:

似乎其他人想出了办法,请参阅this SO question。

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

【讨论】:

以上是关于在 App Store 应用中同时支持 armv6 和 iOS 6?的主要内容,如果未能解决你的问题,请参考以下文章

Apple App Store 在 iOS 7 中未显示正确的图标

应用在 iPad 的 App Store 中不可见

提交到App Store的所有应用程序都必须支持仅IPv6网络

Mac App Store 的多语言应用程序 - 在哪里设置 Mac App Store 中显示的语言?

是否可以仅为 64 位架构构建 Mac App Store 应用程序?

交付到 App Store 时,Fastlane 框架不支持的屏幕尺寸