1

这是一个出于兴趣的问题,因此请尽可能提供您的答案。

我最近将 Xcode 更新到 4.5,并且无法访问 iOS SDK 5.1。使用几篇 SO 帖子中描述的方法(使用以前 Xcode 安装程序中的图像),我再次添加了 iOS SDK 5.1。

我希望我的应用程序支持的环境是 iPhone 3GS、iPhone 4、iPhone 4S 和 iPhone 5。显然使用 iOS SDK 5.1 和 6.0。这些要求的推荐构建设置是什么?

现在我在 armv7 和 armv7s 上设置了Deployment Target5.1、6.0Base SDK架构。它是否正确?

现在,我相信 iOS SDK 5.1 不是为 armv7s(iPhone 5 架构)编译的。如何确保为 iOS 6.0 编译的代码也适用于小于 5 的 iPhone?现在我收到ld: file is universal (4 slices) but does not contain a(n) armv7s slice指向 iOS 5.1 SDK 的链接器错误,而不是检查Build For Active Architectures Only. 我如何确保在发布到 App Store 时,该应用仍将在 iOS SDK 5.1 上运行。它似乎正在为结合 iOS 5.1 的 armv7s 进行编译——这是行不通的。

任何帮助是极大的赞赏。

4

2 回答 2

0

您将 设置Deployment Target为 5.1 是正确的,您可以将架构保留在 ARMv7 和 ARMv7s 上。

您不想指向 5.1 SDK,只需使用 iOS 6 SDK。只需确保您没有直接调用任何仅适用于 iOS 6 SDK 的方法或类。

部署目标是这里的关键,它定义了运行此应用程序所需的最低 iOS 版本,因此将其设置为 5.1 将使您的应用程序运行在 5.1 或更高版本上。

于 2012-10-18T09:05:03.477 回答
0

您根本不需要下载 SDK 5.1。SDK 6.0 包括 SDK 5.1 包括的所有库和头文件,以及 iOS6 中添加的库和头文件。

请务必了解 SDK 版本、您的应用程序将兼容的 iOS 版本以及您构建应用程序的架构之间的区别。

使用SDK 6.0编译并不意味着您的应用只能在 iOS6 上运行;这意味着您的应用程序将能够在iOS上运行,从您设置IOS_DEPLOYMENT_TARGET的版本到SDK对应的版本,即6.0。

因此,如果您希望您的应用程序与 iOS 5.1 及更高版本兼容,您仍然使用 Base SDK 6.0 编译它并且根本不需要 SDK 5.1:您只需将 设置Deployment Target为 5.1 并设置为Base SDK6.0(正如您在你的问题),所以没有任何地方需要 SDK 5.1,这对于为 iOS6、iPhone5 和 armv7s 编译无论如何都是无用的(它不包含必要的头文件、库和架构,这就是为什么 SDK 6.0 已经发布和是必要的)。

使用像 5.1 这样的旧 SDK(您单独下载)和最新版本的 Xcode 可能会导致您遇到问题,更重要的是不允许您为高于 SDK 版本的 iOS 版本编译您的应用程序(在您的情况下为 5.1) . 所以使用 SDK 6.0,即使您希望您的应用程序从 iOS 5.1 开始兼容。


有关您使用的 SDK 版本(基础 SDK)、部署目标以及您的应用程序支持的 iOS 版本和架构之间的差异的更多信息,请阅读Apple 文档中的SDK 兼容性指南,其中详细解释了这一切。

于 2012-10-18T09:08:36.553 回答