如何让iOS应用程序在iPhone3GS及更高版本的iOS 5.1和6上运行?

如何让iOS应用程序在iPhone3GS及更高版本的iOS 5.1和6上运行?,iphone,ios6,armv7,Iphone,Ios6,Armv7,这是一个出于兴趣的问题,因此请尽可能提供您的答案 我最近将Xcode更新为4.5,并失去了对iOS SDK 5.1的访问。使用几篇SO文章中描述的方法(使用以前Xcode安装程序中的图像),我再次添加了iOSSDK5.1 我希望我的应用程序支持的环境是iPhone3GS、iPhone4、iPhone4S和iPhone5。显然,iOS SDK 5.1和6.0。对于这些要求,建议的生成设置是什么 现在我在5.1上设置部署目标,在6.0上设置基本SDK,在armv7和armv7s上设置架构。这是正确的

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

我最近将Xcode更新为4.5,并失去了对iOS SDK 5.1的访问。使用几篇SO文章中描述的方法(使用以前Xcode安装程序中的图像),我再次添加了iOSSDK5.1

我希望我的应用程序支持的环境是iPhone3GS、iPhone4、iPhone4S和iPhone5。显然,iOS SDK 5.1和6.0。对于这些要求,建议的生成设置是什么

现在我在5.1上设置
部署目标
,在6.0上设置
基本SDK
,在armv7和armv7s上设置架构。这是正确的吗

现在,我相信iOSSDK5.1不是为armv7s(iPhone5架构)编译的。我如何确保为iOS 6.0编译的代码也适用于<5的iPhone?现在我收到链接器错误
ld:file是通用的(4个片),但不包含指向iOS 5.1 SDK的(n)个armv7s片
,当不检查
仅针对活动架构构建时
。我如何确保在发布到应用商店时,该应用仍将在iOS SDK 5.1上运行。它似乎是为armv7s与iOS 5.1结合而编译的——这是行不通的


非常感谢您的帮助。

您将
部署目标设置为5.1是正确的,您可以将架构保留在ARMv7和ARMv7s上

您不想指向5.1 SDK,只需使用iOS 6 SDK即可。只需确保不要直接调用任何iOS6SDK专用方法或类


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

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

请务必了解SDK版本、应用程序将兼容的iOS版本以及构建应用程序的体系结构之间的差异

使用SDK6.0编译并不意味着你的应用程序只能在iOS6上运行;这意味着您的应用程序将能够在iOS上运行,从您在
iOS\u DEPLOYMENT\u TARGET
中设置的版本到对应于SDK的版本,即6.0

因此,如果你想让你的应用程序与iOS 5.1及以上版本兼容,你仍然使用基本SDK 6.0编译它,而根本不需要SDK 5.1:你只需将
部署目标设置为5.1,将
基本SDK
设置为6.0(正如你在问题中所说的那样),因此你根本不需要SDK 5.1,这对于iOS6、iPhone5和armv7s的编译是无用的(它不包含必要的头、库和体系结构,这就是为什么SDK 6.0已经发布并且是必需的)

在最新版本的Xcode中使用像5.1(您单独下载)这样的旧SDK可能会导致问题,更重要的是,它不允许您为高于SDK版本的iOS版本(在您的示例中为5.1)编译应用程序。因此,即使您希望您的应用程序在iOS 5.1上兼容,也要使用SDK 6.0


有关您使用的SDK版本(基本SDK)、部署目标以及应用程序支持的iOS版本和体系结构之间差异的更多信息,请阅读苹果公司的文档,该文档详细解释了这一切