从基础SDK 3.0升级到SDK 4.0

5

我安装了SDK 4.0,发现无法访问3.2版本之前的所有先前SDK版本。

我找到了一个下载SDK 3.1.3的链接,所以我有两个.dmg安装文件。

问题:

SDK 4.0不允许访问早期版本吗?

如果上面的答案是否定的,那么这是否意味着我必须安装两个版本的SDK?

如果答案是肯定的...如何操作?

谢谢!


您可以使用SDK4.0并针对早期设备进行开发。这在之前的问题中有详细介绍。 - progrmr
5个回答

7
术语有点混淆,但一旦你理解了就很容易。"基础 SDK"只是你正在编译的 SDK 版本。因此,你可以使用基础 SDK 中的任何类、属性或方法。"部署版本"是你希望用户能够运行你的代码的操作系统最早版本。如果你使用了基础 SDK 版本中可用但在部署版本中不可用的功能,则你的代码将在两个版本上启动,但在使用新功能时会在早期操作系统版本上崩溃,因此,如果想这样做,你需要检查新功能是否存在。所以你不需要基础 SDK 3.0 来运行在 3.0 上 - 只需将基础 SDK 设置为 4.0,将部署版本设置为 3.0,并且不使用超出 3.0 的 SDK 中不存在的任何功能即可。

嗨,是的,我明白了,可能问题表述不太清楚。我的问题是,我再也看不到3.2以下的部署版本了? - user7865437
啊哈!明白了,但是我为什么会感到困惑呢。“所以你不需要3.0的基础SDK来运行在3.0上 - 只需将基础SDK设置为4.0,部署版本设置为3.0,并且不使用任何超出3.0之外的SDK功能。”您可以通过构建配置表单来完成此操作,然后选择先前的版本。我通常使用工具栏设备选项来完成这个过程,该选项以前会显示所有先前的版本,而现在使用SDK 4则不会。好吧,至少现在我已经让它工作了 :-)谢谢 - user7865437
1
这是否意味着在运行时之前无法告知你是否意外地使用了一个新的API? - jamesh

0

您需要将基本 SDK 设置为最新版本,并将 iPhone 部署目标设置为 3.0。

推荐测试应用程序以适应早期版本。


0

部署目标可以设置为任何值(甚至是2.2),但基础SDK除了3.2和4.0之外没有其他内容。我本以为,如果您将部署目标设置为3.0,那么基础SDK也可以设置为3.0。

因此,如果部署SDK为3.0,而基础SDK为4.0,则正在编译哪个?
请注意,在新的SDK中,您不能选择除上述提到的3.2和4.0之外的任何内容。


请问有人可以帮忙吗?需要安装两个版本的XCode并在每个版本中编译相同的应用程序才能使其在早期版本上运行,这似乎很愚蠢?只是确认一下,我安装了SDK 4.0,这样做后,我现在只有3.2和4.0的目标?如果我想构建到任何更低版本,我必须关闭XCode并打开给我访问低于3.2的那些目标的早期版本。奇怪的是,在4.0的开发者文件夹中,它列出了所有早期目标的SDK,但不会让我从XCode内部访问它们。救命啊!拜托了.....谢谢 - user7865437
Chris,http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html 对部署目标和基础 SDK 设置以及编译的应用程序如何解析符号有很好的解释。 - Christopher Pickslay

0

看起来是苹果的问题。我也遇到了一个问题:"Base SDK Missing",在安装Snow Leopard和iPhone SDK 4之后。在我的情况下没有基本SDK。

我是系统的新手,本意是要发表评论,而不是回答。

更新: 在仔细阅读SDK 4附带的自述文件后,我发现它(xCode 3.2.3及其iPhone SDK4)不支持3.2之前的iPhone - 解决方案是在不同的目录中安装旧的SDK。此外,如果您使用较新的xCode/SDK,请不要忘记更新您的设备。
另一个更新:
请忽略这个回答,参见上面由aizuchi提供的回答。不要忘记阅读关于基本SDK区域与部署不同的部分。


1
这是不正确的。即使您想支持旧版本的操作系统,也没有理由安装多个XCode副本。 - user342492
我相信你是对的。我花了很长时间才终于明白你所说的“iPhone OS Deployment Target”是获取旧版本操作系统支持的地方。Base SDK只有在设置为3.2或4.0后才能启动 - 然后你需要在几个屏幕下面的Deployment字段中进行设置。无论如何,非常感谢你的回答! - MCroswell

0
根据我的理解,现在除了3.2和4.0之外使用任何SDK都已经被废弃,不再适用于应用商店的提交。因此,从逻辑上讲,在xCode(3.2.3)中也不再提供这些其他的SDK选项。我认为,试图规避这个问题是徒劳的。我写了一个社区Wiki,更详细地解释了这个问题在这里

你为什么要“规避它”呢?你可以设置部署目标,就好像什么也没有改变一样。 - typeoneerror
在许多方面都是错误的。 首先,我认为您误解了部署目标。据我所知,这只是应用商店的标志,而您仍然可以访问“Base SDK”的完整API,没有警告。您只负责有条件地使用高于您的部署目标的API。例如,我的部署目标是3.0,但我可以实例化UIGestureRecognizer(3.2+)。在现场中,这将引发错误。此外,一些人可能希望通过某种方式“绕过它”,例如运行较旧的模拟器,这是您一直以来都能够做到的,直到现在。 - Clay Bridges

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