是否可以在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的早期版本,则不再需要变通方法。

在此处输入图片说明


41
要利用Xcode 5的许多改进,同时仍然能够为当今的应用商店构建应用。
Tony

61
嗨,妈妈,关于“无论如何都拥抱iOS 7”的观点与GA版本完全无关。重新设计应用程序的整个设计语言和UX以适应平面设计和重新设计的iOS7 UI组件的决定和努力既不小,也从业务和时序角度来看都不容易。针对SDK 6.1构建的版本将使iOS7使用iOS 6和更低版本的UI设计语言(出于向后支持的目的)。因此,很可能我们很想在将来的一段时间内针对6.1 SDK在Xcode 5中进行开发。
2013年

2
嗯,也许是因为他希望SDK与IDE分离,而不是一堆完整的代码?
phreakhead

1
我目前正在与一个尚未准备好接受IOS7 UI更改的客户端一起工作,但是可以从XCode 5中的Core Data迁移改进中受益。因此,在这种情况下,这正是我想要的。
Droid Chris

有人可能会认为,如果不包含SDK 6.1,Xcode至少会顺利集成。但是,这就是一个问题
21:08的JohnK

Answers:


203

编辑:从2014年2月1日开始,Apple将不再接受iOS7之前的应用程序提交到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/内容/开发人员/平台/


归档时是否需要删除iOS 7 SDK,以确保它是与iOS 6 SDK一起构建的?
ohayon 2013年

6
你好 这很接近,但对我来说并不完全。按钮看起来像iOS 6,但是使用UINavigationController时,视图控制器的内容仍在导航栏后面。关于如何获得iOS 6行为的任何想法吗?
matt bezark

2
没有; 您只会在设备上看到此信息。iOS 7模拟器中没有iOS 6兼容模式。如果要查看它在模拟器中的外观,请在iOS 6模拟器上进行测试。
Rob Napier 2013年

1
我可以将使用Xcode 5和iOS 6 SDK构建的应用程序提交到App Store吗?
hujunfeng

1
只要仍支持iPad 1,您就可以始终假定Apple将接受5.X iOS。无法升级。
ahwulf

60

当我更新到xcode 5时,我也遇到了同样的问题,它删除了较旧的sdk。但是我从另一台计算机上获得了旧版SDK的副本,您可以从以下链接下载该副本。

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

有2种工作方式。

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。

我进行的另一项更改是“构建设置”>“体系结构”>“标准”(不是64),因此请列出“部署目标”的所有版本

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

这是一些屏幕截图。 在此处输入图片说明 在此处输入图片说明


2
您如何以及在何处下载此ios6.1 SDK?我正在寻找可以在Xcode 5上运行的iOS 5 SDK。您可以上传该文件还是指向我自己下载的位置。谢谢
山姆乙

实际上,我也有旧系统。所以我是从较旧的xcode中获取的。我为ios sdk 5尝试过的方法相同,但由于不需要太多,因此我并未尝试将其消除。另外,如果这个答案看起来不错,我会以+或-表示您的反馈意见。谢谢。
AvtarSingh Suchariya

1
嗨,Avtar,我下载了ios6 zip,将其解压缩到列出的位置路径下,完全关闭了xcode 5,再次启动了它,但在下拉选项中我仍然只看到7.0作为可部署目标。我假设缺少步骤,还有更多吗?
山姆B

同样适用于我。只是一个问题,您是否将此添加到了xcode应用程序本身或创建了符号链接?
AvtarSingh Suchariya

直接到应用程序目录本身。
Sam B

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

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

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

夹。注销+登录只是为了确保更改生效,并且您应该在新的XCode中看到较旧的SDK


我已经做到了这一点(在较早的答案中使用下载链接),并且iOS 6.1 sdk选项的确显示在xcode 5的“构建设置”>“体系结构”>“基本SDK”下。但是,当我在iOS 7模拟器(或iOS 7设备)上构建并运行时,它仍在使用iOS 7 UIKit按钮(而非iOS 6版本)。如果有人对为什么有任何建议,我将不胜感激..
比尔·帕特森

如果安装了TimeMachine,则可以打开上述路径(在终端类型中:打开“ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/”),然后从此处还原iOS6.1 SDK 。
2013年

11

只需添加一下,您实际上就可以使用Xcode 5本身下载模拟器的旧版本-只需转到首选项即可在“下载”下找到它们:

在此处输入图片说明


自从xcode 5发布beta版以来,这一定已经发生了,现在已经是通用发行版了。众所周知,谢谢Smikey
Tony

5
@Manni这与针对旧API进行编译不同。您正在使用iOS 6的新API进行构建
。– oligofren

即使您设置了较旧的目标平台,这些选项默认也不显示在Xcode 6上。
GilesDMiddleton 2014年

10
  • 从Apple开发人员中心下载Xcode 4.6.x:https//developer.apple.com/downloads/index.action
  • 在Applications文件夹中创建一个名为Xcode4的文件夹,然后将下载的dmg拖放到该文件夹​​中。
  • 打开终端窗口

    $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. 在较旧的xcode版本中找到较旧的SDK,例如“ iPhoneOS6.1 sdk”。如果还没有,则可以从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 在此处输入图片说明
  2. 简单复制文件夹iPhoneOS6.X sdk并将其粘贴到xcode.app中
    • 右键单击“应用程序”文件夹中的xcode.app。
    • 转到目录/开发人员/平台/iPhoneOS.platform/Developer/SDKs/
    • 只需粘贴在这里。

在此处输入图片说明

  1. 关闭您的xcode应用程序,然后再次将其重新打开。

要在模拟器上的iOS 6中测试应用,请执行以下操作:-只需在活动的Sheme中选择iOS 6.0。 在此处输入图片说明

要在iOS 6中构建您的应用,因此您的应用设计将是具有iOS 7的iPhone上的较旧设计:-在Targets中选择iOS6.1-基本SDK

在此处输入图片说明

只需注意:在Targets中更改基本SDK时,将无法在模拟器上构建iOS 7.0!


9

可以做到,但不是真的有必要

这该怎么做

杰森·李(Jason Lee)得到了答案。在安装xCode时,我倾向于保留以前的安装,而不是替换它们。所以我的安装文件夹中有这些

在此处输入图片说明

因此,/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

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

在此处输入图片说明

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

为什么没有必要

引用Apple Documentaion

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

  1. 选择一个部署目标

    这标识了可以在其上运行软件的最早的OS版本。

  2. 选择一个基本的SDK

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

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

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

在此处输入图片说明

另外,您可以无条件地使用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,该链接显示“正在寻找旧版本的Xcode?”。(当前指向此处)并安装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,您就完成了。


3

我的应用程序已无缝过渡到Xcode 5,因为它仍然可以使用您在项目中设置的原始iOS部署目标(本例中为5.1)进行构建。如果新的SDK不会引起一些无法解决的问题,那么为什么不使用它进行构建呢?当然,引擎盖下有许多改进。

例如,我将更喜欢使用Xcode 5而不是Xcode 4.6.3。为什么?我会得到更多的电池寿命,因为Xcode 5中的UI滚动文本/代码区域不再消耗整个CPU线程。


不这样做的原因-Xcode 5目前非常不稳定。每小时崩溃一次。在某些视图中,还有一些奇怪的位置问题和颜色问题(尽管没有很多工作要解决)
Nick H247 2013年

2

如其他答案所述,将6.1 SDK链接到X​​code 5是一个步骤。但是,这仍然不能解决以下问题:在iOS 7上运行时会采用新的UI元素,将视图控制器设为全尺寸等。

如此答案中所述,还需要将UI切换到iOS 7上的旧版模式:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"UIUseLegacyUI"];
[[NSUserDefaults standardUserDefaults] synchronize];

当心:这是一个未公开的密钥,不建议用于App Store构建!

另外,根据我在设备上进行测试的经验,我发现即使我在应用程序启动的早期就运行了代码,它也只能在第二次启动该应用程序时起作用+[AppDelegate initialize]。使用Xcode 4.6构建的版本也存在细微差异。例如,透明导航栏的行为有所不同(导致视图变为全尺寸)。

但是,由于Xcode 4.6.3在Mavericks上崩溃(至少对我来说,请参阅rdar:// 15318883),因此这至少是继续使用Xcode 5进行调试的解决方案。


1

我下载了XCode 4,并按照其他答案中的说明将iOS 6.1 SDK从其迁移到了XCode 5。然后,我还安装了iOS 6.1 Simulator(可在首选项中使用)。我还在项目设置中将Base SDK切换到了iOS 6.1。

完成所有这些操作后,带有6.1 base sdk的项目将在iOS 7 Simulator中以竞争能力模式运行。


1

从2月1日起,Apple将拒绝仅适用于iOS6或更低版本的应用程序。这也是官方通信从苹果。最好开始为iOS7构建。

为了阐明我的观点:如果您是针对iOS6或更低版本构建的,Apple将拒绝您的应用程序。如果您是针对iOS7构建的,则降低一切就可以了,这意味着:

  1. 您必须使用xcode5
  2. 您至少应在iOS7上进行部署。

Apple电子邮件的内容对我来说很清楚

“确保您的应用程序可以与iOS 7中的创新技术无缝协作。从2月1日开始,必须使用Xcode 5和iOS 7 SDK构建提交给App Store的新应用程序和应用程序更新。”


是的,但是iOS 6 SDK也可以与iOS 7很好地兼容。有些应用真的很难切换。
Aniruddh Joshi 2014年

我相信你是不对的。Apple要求(a)由最新的Xcode 5构建,并且(b)针对 iOS 7 优化。请参阅我对Rob Napier的评论链接。
罗勒·布尔克

我们中有些人是为企业发行版开发的,需要针对较旧的SDK(和设备)。企业应用程序没有经过Apple Review流程和/或App Store,并且此讨论非常有用,仍然很重要,并且在将来仍将是重要的。我了解您的观点,但这不是唯一的观点。
凯文·奥马拉

你是完全正确的!我没有考虑过企业分销。但是请不要忘记,您仍然可以通过设置部署目标而在使用新Xcode的iOS6上进行部署,而无需关心ios7优化和审查过程。
安德里亚(Andrea)

0

我目前安装了Xcode 4.6.3和5.0。我使用以下bash脚本将5.0链接到旧版本的SDK:

platforms_path="$1/Contents/Developer/Platforms";
if [ -d $platforms_path ]; then
    for platform in `ls $platforms_path`
    do
        sudo ln -sf $platforms_path/$platform/Developer/SDKs/* $(xcode-select --print-path)/Platforms/$platform/Developer/SDKs;
    done;
fi;

您只需要提供.app的路径即可:

./xcode.sh /Applications/Xcode-463.app

请注意,升级到5.1会删除我的7.0.x SDK,并将其替换为7.1 SDK。我已经安装了旧版本Xcode5-DP6,可以从其中恢复7.0.x,但这是一个很好的提醒,请先备份SDK目录(或完全重命名应用程序),然后再升级或安装最新的Xcode版本。
韦恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.