【问题标题】:Is it possible to install iOS 6 SDK on Xcode 5?是否可以在 Xcode 5 上安装 iOS 6 SDK?
【发布时间】:2013-08-27 17:57:57
【问题描述】:

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

编辑:

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

【问题讨论】:

  • 利用 Xcode 5 中的许多改进,同时仍然能够为当今的应用商店构建应用。
  • 嘿 maddy,关于“无论如何都拥抱 iOS 7”的观点与 GA 版本完全无关。重新设计应用程序的整个设计语言和 UX 以符合扁平化设计和重新设计的 iOS7 UI 组件的决定和努力既不小,从业务和时间的角度来看也不容易。针对 SDK 6.1 构建将使 iOS7 使用 iOS 6 及之前的 UI 设计语言(出于向后支持的目的)。因此,我们希望在 Xcode 5 中针对 6.1 SDK 进行开发是很有必要的。
  • hmmm 可能是因为他希望 SDK 与 IDE 分离,而不是一堆单一的代码?
  • 我目前正在使用的客户端尚未准备好接受 IOS7 UI 更改,但可以从 XCode 5 中的核心数据迁移改进中受益。所以在这种情况下,这正是我想要的也是。
  • 有人可能会认为Xcode,如果不包括SDK 6.1,至少会顺利集成它。但是还有this problem

标签: ios xcode ios6 xcode5


【解决方案1】:

查找并下​​载旧的 SDK。 Older SDKs are found here.

我已将 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 构建的应用程序都不会被应用商店接受!
【解决方案2】:

我目前安装了 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,但这是一个很好的提醒,在升级到或安装最新的 Xcode 版本之前备份 SDK 目录(或完全重命名应用程序)。跨度>
【解决方案3】:

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

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

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

Apple 邮件的内容我很清楚

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

【讨论】:

  • 是的,但 iOS 6 SDK 也适用于 iOS 7。有些应用真的很难切换。
  • 我相信你是不正确的。 Apple 要求 (a) 由最新的 Xcode 5 构建,以及 (b) 针对 iOS 7 优化。请参阅我对 Rob Napier’s answer 的评论以获取链接。
  • 我们中的一些人为企业分发而开发,需要针对较旧的 SDK(和设备)。企业应用程序不经过 Apple 审核流程和/或 App Store,此讨论非常有用,仍然相关,并且将继续与未来相关。我理解你的观点,但它不是唯一的。
  • 你完全正确!!!我没有考虑企业分布。但别忘了,你仍然可以在新的 Xcode 上部署 iOS6,只需设置部署目标,无需关心 ios7 的优化和审核过程。
【解决方案4】:

编辑:从 2014 年 2 月 1 日起,Apple 将不再接受 iOS7 之前的应用程序提交到 App Store。因此,尽管这种技术仍然有效,但对大多数读者来说并没有用处。


是的,这很好。我仍然为一个项目使用 iOS 4.3 构建(我们更新已经有一段时间了;但在 iOS 6 发布后他们仍然接受它),我目前使用 Xcode 5 构建 10.5 应用程序。

有关如何设置的详细信息,请参阅How to point Xcode to an old SDK so it can be used as a "Base SDK"?。你可以使用我的fix-xcode 每次升级时为您链接所有内容的脚本。

唯一的窍门是获取旧的 SDK。如果没有,一般需要下载旧版本的 Xcode(在developer.apple.com 上仍然可用),打开安装包,四处寻找所需的 SDK。

SDK 可以在安装包中找到:

Xcode.app/Contents/Developer/Platforms/

【讨论】:

  • 存档时是否需要移除 iOS 7 SDK 以确保使用 iOS 6 SDK 构建?
  • 嗨。这很接近,但对我来说并不完全。这些按钮看起来像 iOS 6,但是当使用 UINavigationController 时,视图控制器的内容仍然在导航栏后面。关于如何获得 iOS 6 行为的任何想法?
  • 否;你只会在设备上看到这个。 iOS 7 模拟器中没有 iOS 6 兼容模式。如果您想看看它在模拟器中的样子,请在 iOS 6 模拟器上进行测试。
  • 我可以将使用 Xcode 5 和 iOS 6 SDK 构建的应用提交到 App Store 吗?
  • 只要 iPad 1 仍受支持,您始终可以假设 Apple 将接受 5.X iOS。无法升级。
【解决方案5】:

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

this answer 中所述,还需要在 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 进行调试的解决方案。

【讨论】:

    【解决方案6】:

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

    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. Simple 复制文件夹 iPhoneOS6.X sdk 并将其粘贴到您的 xcode.app
      • 右键单击 Applications 文件夹中的 xcode.app。
      • 转到 Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
      • 在此处粘贴即可。

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

    在您的模拟器上测试 iOS 6 中的应用: - 只需在您的活动方案中选择 iOS 6.0。

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

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 这一定是在 xcode 5 推出 beta 版并且现在是通用版本之后发生的。很高兴知道,谢谢 Smikey
      • @Manni 这与针对旧 API 进行编译不同。您正在使用适用于 iOS 6 的新 API 进行构建。
      • 这些选项默认情况下不会出现在 Xcode 6 上,即使您设置了较旧的目标平台。
      【解决方案8】:

      可以这样做,但没必要

      怎么做

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

      所以/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs 包含不同的sdks。 (将 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 的新功能。

      这可以使用 Weakly Linked ClassesWeakly Linked MethodsFunctionsSymbols 来完成p>

      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 上运行,但仍然可以利用可用的新功能。

      【讨论】:

        【解决方案9】:

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

        只需从“正在寻找旧版本的 Xcode?”的开发中心链接下载 Xcode 4.6.3。 (当前指向here)并挂载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 就完成了。

        【讨论】:

          【解决方案10】:

          当我更新到 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。

          这里有一些截图。

          【讨论】:

          • 你是如何以及在哪里下载这个 ios6.1 sdk 的?我正在寻找针对我的 Xcode 5 运行的 iOS 5 sdk。你可以上传它还是指向我可以自己下载的地方。谢谢
          • 其实我也有旧系统。所以我从旧的 xcode 中获取了这个。我为 ios sdk 5 尝试过的相同,但由于不需要太多,我没有尝试从中得到它。另外,如果这个答案看起来不错,我会用 + 或 - 来评价您的反馈。谢谢。
          • 嘿 Avtar,我下载了你的 ios6 zip,在你列出的位置路径下解压缩,完全关闭 xcode 5,再次重新启动它,但我仍然在下拉选项中看到 7.0 作为可部署目标.我假设缺少步骤并且还有更多步骤?
          • 这同样适用于我。只是一个问题,您是否将其添加到 xcode 应用程序本身或创建了符号链接?
          • 直接到应用程序目录本身。
          【解决方案11】:
          • 从 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

          【讨论】:

            【解决方案12】:

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

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

            【讨论】:

              【解决方案13】:

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

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

              然后你可以选择如下SDK:

              希望对你有所帮助。

              【讨论】:

              • 我做了同样的事情,但我的应用程序 GUI 发生了变化,它看起来像 iOS 7 GUI。我选择了 iPhone Retina(4 英寸 64 位)模拟器来运行应用程序。这样做后我还缺少其他任何东西。
              【解决方案14】:

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

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

              【讨论】:

              • 不这样做的原因 - Xcode 5 目前非常不稳定。对我来说每小时崩溃一次。在某些视图中还有一些奇怪的位置问题和颜色问题(虽然没有很多工作需要修复)
              【解决方案15】:

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

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

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

              【讨论】:

              • 我已经这样做了(使用较早答案中的下载链接),iOS 6.1 sdk 选项确实出现在 xcode 5 中的 Build Settings > Architectures > Base SDK 下。但是,当我在 iOS 7 模拟器(或 iOS 7 设备)上构建和运行时,它 仍然 使用 iOS 7 UIKit 按钮(不是 iOS 6 版本)。如果有人对原因有任何建议,我将不胜感激......
              • 如果你安装了 TimeMachine 你可以打开上面的路径(在终端类型:open "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/" )和从那里恢复 iOS6.1 SDK。
              猜你喜欢
              • 2014-07-25
              • 2014-07-25
              • 2015-01-20
              • 1970-01-01
              • 2012-03-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多