250

Xcode 5 有一个首选项窗格,允许下载 iPhone 6.1 模拟器,但是我找不到允许下载 iOS 6 SDK 的地方,因此在使用 Xcode 5 开发时无法将活动 SDK 设置为 iOS 6 . 有没有一种解决方法可以让 Xcode 5 安装 iOS 6 SDK?

编辑:

由于 Xcode 5 已普遍可用并允许您下载以前版本的 SDK,因此不再需要变通方法。

在此处输入图像描述

4

15 回答 15

204

编辑:从 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/Contents/Developer/Platforms/

于 2013-08-25T00:00:49.390 回答
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 并在此处创建符号链接,以便 SDK 将保持不变,即使你更新 Xcode。

我所做的另一个更改,构建设置 > 架构 > 标准(不是 64)所以列出了部署目标的所有版本

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

这是一些屏幕截图。 在此处输入图像描述 在此处输入图像描述

于 2013-09-19T18:44:06.033 回答
34

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

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

在此处输入图像描述

然后您可以选择如下所示的 SDK:

在此处输入图像描述

希望这对您有所帮助。

于 2013-09-22T12:13:32.353 回答
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
于 2013-09-23T11:22:44.197 回答
11

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

在此处输入图像描述

于 2013-10-14T17:09:52.230 回答
11

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

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

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

于 2013-09-17T19:28:20.733 回答
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
于 2013-09-25T16:24:56.103 回答
10

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

  1. 例如,在旧版本的 xcode 中找到旧 SDK,例如“iPhoneOS6.1 sdk”。如果你还没有,你可以从苹果开发者服务器下载它,地址是: 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
    • 右键单击 Applications 文件夹中的 xcode.app。
    • 转到 Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
    • 就贴在这里吧。

在此处输入图像描述

  1. 关闭您的 xcode 应用程序并重新打开它。

要在您的模拟器上测试 iOS 6 中的应用程序: - 只需在您的活动 sheme 中选择 iOS 6.0。 在此处输入图像描述

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

在此处输入图像描述

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

于 2013-10-21T16:34:59.943 回答
9

可以这样做,但不是真的必要

这个怎么做

杰森·李得到了答案。安装 xCode 时,我更喜欢保留以前的安装而不是替换它们。所以我在我的安装文件夹中有这些

在此处输入图像描述

所以/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs包含不同的sdk。(将 Xcode.app 替换为正确的编号)将以前的 sdks 复制到

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

这是我复制后的文件夹。

在此处输入图像描述

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

为什么没有必要

参考 Apple 文档

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

  1. 选择一个部署目标

    这标识了您的软件可以运行的最早的操作系统版本。

  2. 选择基础 SDK

    您的软件可以使用操作系统版本中提供的功能,包括对应于基本 SDK 的版本。默认情况下,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 上运行,但仍然可以利用可用的新功能。

于 2013-10-02T07:12:36.497 回答
4

这里的其他答案也是正确的,但我发现以下步骤是最简单的:

只需从“正在寻找旧版本的 Xcode?”的开发中心链接下载 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,你就完成了。

于 2013-10-01T04:12:15.140 回答
3

我的应用程序无缝过渡到 Xcode 5,因为它仍然可以使用您在项目中设置的原始 iOS 部署目标(在我的情况下为 5.1)构建。如果新的 SDK 没有造成一些无法克服的问题,那为什么不使用它来构建呢?引擎盖下肯定有很多改进。

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

于 2013-09-19T04:33:08.730 回答
2

如其他答案中所述,将 6.1 SDK 链接到 Xcode 5 是一个步骤。然而,这仍然不能解决在 iOS 7 上运行新的 UI 元素,视图控制器被制作成全尺寸等问题。

本答案中所述,还需要在 iOS 7 上将 UI 切换到旧模式:

[[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 进行调试的解决方案。

于 2013-10-28T16:16:41.387 回答
1

我下载了 XCode 4 并将 iOS 6.1 SDK 从它带到 XCode 5,如其他答案中所述。然后我还安装了 iOS 6.1 Simulator(它在首选项中可用)。我还在项目设置中将 Base SDK 切换到 iOS 6.1。

在所有这些操作之后,带有 6.1 基础 sdk 的项目在 iOS 7 模拟器中以可兼容模式运行。

于 2013-09-25T10:07:58.627 回答
1

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

澄清我的声明:如果您为 iOS6 或更低版本构建,Apple 将拒绝您的应用程序。如果您为 iOS7 构建并降低一切都很好,这意味着:

  1. 你必须使用 xcode5
  2. 你至少应该部署在 iOS7 上。

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

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

于 2014-01-14T14:28:50.150 回答
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
于 2013-11-20T22:18:58.540 回答