能否在Xcode 5上安装iOS 6 SDK?

250

Xcode 5有一个偏好设置面板,允许下载iPhone 6.1模拟器,但我找不到允许下载iOS 6 SDK的地方,因此在使用Xcode 5开发时无法将活动SDK设置为iOS 6。是否有一种解决方法可以使Xcode 5安装iOS 6 SDK?

编辑:

现在Xcode 5已经普遍可用,并允许您下载先前版本的SDK,因此不再需要解决方法。

enter image description here


41
利用 Xcode 5 中的许多改进,同时仍能构建适用于今天应用商店的应用程序。 - Tony
61
嘿,Maddy,“无论如何都要拥抱iOS 7”的意思与GA发布无关。重新设计应用程序的整个设计语言和UX以符合平面设计和重新设计的iOS 7 UI组件的决定和努力既不小,也不能轻易从商业和时间角度考虑。针对SDK 6.1构建将使iOS 7使用iOS 6及之前的UI设计语言(为了支持向后兼容性)。因此,我们可能有很充分的理由希望在Xcode 5中针对6.1 SDK进行开发一段时间。 - Marchy
2
也许是因为他期望SDK与IDE分离,而不是一个庞大的代码堆积体? - phreakhead
1
我目前正在与一位客户合作,该客户尚未准备好接受IOS7 UI的更改,但可以从XCode 5中的Core Data迁移改进中受益。因此,在这种情况下,这正是我想要的。 - Droid Chris
有人可能认为,如果不包括SDK 6.1,Xcode至少会平稳地集成它。但是,就像这个问题一样。 - JohnK
15个回答

204

编辑:从2014年2月1日开始,苹果将不再接受预iOS 7应用提交到App Store。因此,虽然这种技术仍然有效,但对于大多数读者来说已经没有用了。


没问题,我仍在为一个项目构建iOS 4.3(很久以前我们更新过; 但是他们在iOS 6发布后仍然接受它),我目前使用Xcode 5构建10.5应用程序。

请参见如何将Xcode指向旧的SDK,使其可以用作“基本SDK”? 以获取设置详细信息。您可以使用我的fix-xcode脚本,每次升级时都为您链接所有内容。

唯一的诀窍是获取旧的SDK。如果您没有它们,通常需要下载旧版本的Xcode(仍可在developer.apple.com上获得),打开安装程序包,并寻找所需的SDK。

SDK可在安装程序包中找到:

Xcode.app/Contents/Developer/Platforms/


6
你好,这个看起来很接近但对我来说还不太够。按钮看起来像iOS 6,但是当使用UINavigationController时,视图控制器的内容仍然会上移到导航栏后面。你有没有想过如何实现iOS 6的行为呢? - matt bezark
你无法获得那个。iOS 6的行为在iOS 7上不可用(即使是使用iOS 6构建的内容)。如果可用,我们就不必更新布局以支持iOS 7了。你需要至少进行一些iOS 7调用来重新配置视图控制器。如果这是一个问题,你应该提出一个新的问题。 - Rob Napier
2
不会的,这只会在设备上出现。iOS 7模拟器中没有iOS 6兼容模式。如果您想在模拟器中查看其外观,请在iOS 6模拟器上进行测试。 - Rob Napier
1
我可以将使用Xcode 5和iOS 6 SDK构建的应用提交到App Store吗? - Junfeng
1
只要iPad 1仍然得到支持,你可以始终假定苹果将接受5.X iOS。它无法升级。 - ahwulf
显示剩余11条评论

60

当我更新到xcode 5时,遇到了同样的问题,它删除了旧的SDK。但是我从另一台计算机中拷贝了旧的SDK,您可以从以下链接下载相同的版本。

http://www.4shared.com/zip/NlPgsxz6/iPhoneOS61sdk.html
(www.4shared.com测试账户test@yopmail.com/test)

有两种方法可以使用:

1) 解压并将此文件夹粘贴到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs,并重新启动xcode。

但是如果您更新xcode,则这可能会再次被Xcode删除。

2) 另一种方式是解压并粘贴到所需位置,然后进入/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs,在这里创建一个符号链接,这样即使您更新Xcode,SDK也将保持不变。

我还做了另一个更改,Build Setting > Architectures>standard(而不是64),以列出所有Deployment Target的版本。

如果您只想更改部署目标,则无需下载zip文件。

以下是一些屏幕截图。 输入图像描述 输入图像描述


2
你是如何在哪里下载到iOS 6.1 SDK的?我正在寻找iOS 5 SDK以便在我的Xcode 5上运行。你能否上传它或者指导我在哪里自己下载它。谢谢。 - Sam B
1
嘿,Avtar,我下载了你的ios6压缩包,在你列出的路径下解压缩了它,完全关闭了xcode 5,重新启动了它,但是在下拉选项中仍然只看到7.0作为可部署目标。我猜测可能有一些步骤遗漏了,还需要更多的操作吗? - Sam B
直接返回应用程序目录本身。 - Sam B
好的,我也做了同样的操作,显示了从4.3到7.0的选项。但是我也安装了所有的模拟器,不确定这是否会有影响。 - AvtarSingh Suchariya
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/37689/discussion-between-avtarsingh-suchariya-and-sam-budda - AvtarSingh Suchariya
显示剩余5条评论

34

是的,我今天刚解决了这个问题。

  1. 在你或你朋友的旧版Xcode目录中找到SDK文件,例如iPhoneOS6.1.sdk。
  2. 复制并将其放入Xcode 5目录:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs。

输入图像描述

然后你可以像下面这样选择SDK:

输入图像描述

希望这对你有所帮助。


2
我也做了同样的事情,但我的应用程序GUI发生了变化,看起来像iOS 7 GUI。我选择了iPhone Retina(4英寸64位)模拟器来运行应用程序。在这之后,我还有什么遗漏吗? - python

20

查找并下载旧版SDK。 旧版SDK可在此处找到

我已将xcode.app目录复制为Xcode_4.6.3.app。

现在,您可以在两个版本的Xcode中进行测试和调试。您必须从相应的文件夹运行它们或在桌面上创建快捷方式。当从命令行构建时,将参数设置为iPhoneOS6.1而不是iPhoneOS7.0

这在我的Xcode5和iOS上非常有效。

进入Xcode5的SDK目录。它通常位于:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

像这样为旧的SDK添加一个符号链接:

sudo ln -s /Applications/Xcode_4.6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk iPhoneOS6.1.sdk

更准确地说,可以从命令行的任何位置执行此操作,

sudo ln -s /Applications/Xcode_4.6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk

我们可以使用这个选项来测试我们的应用,但是可能在2014年2月之后,任何使用早期iOS 7 sdk构建的应用都将无法在应用商店中被接受! - karim

11

补充一点,你实际上可以使用Xcode 5本身下载旧版本的模拟器 - 只需转到首选项,您将在下载下找到它们:

输入图片描述


这一定是自从Xcode 5退出beta版并成为通用版本以来发生的。好知道,谢谢Smikey。 - Tony
5
这并不意味着针对旧 API 进行编译。您是在使用 iOS 6 的新 API 进行构建。 - oligofren
即使您设置了旧的目标平台,这些选项在Xcode 6上默认情况下也不会显示。 - GilesDMiddleton

11

您可以下载旧版SDK并将其安装在

Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/

文件夹中。 注销+登录以确保更改生效,然后您应该在新的XCode中看到旧版SDK


我已经按照之前回答中的下载链接进行了操作,在Xcode 5的“Build Settings > Architectures > Base SDK”下,确实出现了iOS 6.1 sdk选项。然而,当我在iOS 7模拟器(或iOS 7设备)上构建和运行时,它仍然使用iOS 7 UIKit按钮(而不是iOS 6版本)。如果有人有任何建议,请告诉我,我将不胜感激... - Bill Patterson
如果您已安装TimeMachine,您可以打开上面的路径(在终端中键入:open“/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/”),并从那里恢复iOS6.1 SDK。 - avance

10
$sudo cp -R /Applications/Xcode4/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
  • 由于您处于系统文件夹内,将提示您输入密码

  • 打开Xcode 5,现在您应该可以看到两个SDK

  • 10

    对我来说最简单的解决方案:

    1. 找到一个旧的SDK,比如“iPhoneOS6.1 SDK”在旧版本的Xcode中。 如果没有,你可以从Apple Developer服务器上下载,网址为: https://developer.apple.com/downloads/index.action?name=Xcode, 当你打开xcode.dmg文件时,可以通过打开Xcode.app(右击并选择"显示内容")找到它, 然后进入Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1 SDK enter image description here
    2. 只需复制iPhoneOS6.X SDK文件夹并将其粘贴到xcode.app中,
      • 在应用程序文件夹中右键单击xcode.app。
      • 转到Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
      • 直接粘贴到此处。

    enter image description here

    1. 关闭Xcode应用程序,然后重新打开它。

    要在模拟器中测试iOS 6中的应用程序: - 只需在活动方案中选择iOS 6.0即可。 enter image description here

    要在iOS 6中构建您的应用程序,使其在安装有iOS 7的iPhone上呈现旧版设计: - 在Targets - Base SDK中选择iOS 6.1

    enter image description here

    请注意:当你在Targets中更改基本SDK时,iOS 7.0将不再可用于在模拟器上构建!


    9

    可以做到这一点,但并不是必要的

    如何做到这一点

    Jason Lee找到了答案。在安装xCode时,我更喜欢保留之前的安装而不是替换它们。所以我在我的安装文件夹中有这些东西

    enter image description here

    因此/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs包含不同的sdk。(用正确的数字替换Xcode.app)将先前的sdk复制到

    /Applications/Xcode 3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

    这是我复制一个后的文件夹。

    enter image description here

    现在重新启动xCode,您就可以将先前版本的sdks设置为基本sdk。

    为什么这不是必要的

    参考苹果文档

    要为Xcode项目使用特定的SDK,请在项目的构建设置中进行两个选择。

    1. 选择部署目标

      这确定了软件可以运行的最早的操作系统版本。

    2. 选择基本SDK

      您的软件可以使用在包括与基本SDK相对应的操作系统版本在内的操作系统版本中可用的功能。默认情况下,Xcode将其设置为Xcode支持的最新操作系统。

    规则是使用最新的基本SDK并将部署目标设置为应用程序应该运行的最小版本

    例如,您可以将iOS 7作为基本sdk,并将iOS 6设置为部署目标。在iOS 6模拟器上运行以测试它在iOS 6上的工作方式。如果模拟器不在可用的模拟器列表中,请安装模拟器。

    enter image description here

    此外,您可以无条件地使用iOS 6的功能。同时支持先前的版本和新更新设备的iOS 7的新功能。

    这可以通过弱链接类弱链接方法函数符号来实现

    https://developer.apple.com/library/ios/documentation/developertools/conceptual/cross_development/Using/using.html#//apple_ref/doc/uid/20002000-SW3

    弱链接

    假设在Xcode中,您将部署目标(最低要求版本)设置为iOS6,目标SDK(最大允许版本)设置为iOS7。在编译期间,编译器会弱链接任何在iOS7中引入的接口,同时强链接较早的接口。这将使您的应用程序在iOS6上继续运行,但在可用时仍能利用新功能。

    4
    这里的其他答案也是正确的,但我发现以下步骤最简单:
    只需从开发中心链接下载Xcode 4.6.3(当前指向此处)并挂载dmg文件。
    然后在终端中,复制SDK文件即可:
    cp -R /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
    

    最后,重新启动Xcode即可完成。

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