ChatGPT解决这个技术问题 Extra ChatGPT

是否可以在 Xcode 5 上安装 iOS 6 SDK?

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

编辑:

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

https://i.stack.imgur.com/Ihgmd.png

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

C
Community

编辑:从 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。它无法升级。
A
AvtarSingh Suchariya

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

https://i.stack.imgur.com/YdMkn.png


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

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

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

https://i.stack.imgur.com/tltLn.png

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

https://i.stack.imgur.com/27YiH.png

希望这对您有所帮助。


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

查找并下载旧的 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 构建的应用程序都不会被应用商店接受!
u
unspokenblabber

您可以下载旧版 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,您可以打开上述路径(在终端类型中:打开 "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/" )并从那里恢复 iOS6.1 SDK .
S
Smikey

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

https://i.stack.imgur.com/gpg6U.png


这一定是因为 xcode 5 从测试版出来,现在是一个通用版本。很高兴知道,谢谢 Smikey
@Manni 这与针对旧 API 进行编译不同。您正在使用适用于 iOS 6 的新 API 进行构建。
这些选项默认情况下不会出现在 Xcode 6 上,即使您设置了较旧的目标平台。
a
autremoi

从 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/开发者/SDKs/

由于您位于系统文件夹中,系统将提示您输入密码

打开 Xcode 5,您现在应该会看到两个 SDK


D
Daniel C.

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

例如,在旧版本的 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 简单复制文件夹 iPhoneOS6.X sdk 并将其粘贴到您的 xcode.app右键单击 Applications 文件夹中的 xcode.app。转到 Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ 在这里粘贴。

https://i.stack.imgur.com/fephk.png

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

https://i.stack.imgur.com/4pd0m.png

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

https://i.stack.imgur.com/2bpqw.png

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


C
Community

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

这个怎么做

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

https://i.stack.imgur.com/GGVfT.png

所以/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

这是我复制后的文件夹。

https://i.stack.imgur.com/z3SVb.png

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

为什么没有必要

参考 Apple 文档

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

选择一个部署目标。这标识了您的软件可以运行的最早的操作系统版本。选择基础 SDK 您的软件可以使用操作系统版本中可用的功能,包括对应于基础 SDK 的版本。默认情况下,Xcode 将此设置为 Xcode 支持的最新操作系统。

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

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

https://i.stack.imgur.com/4zZ9B.png

另外,您可以无条件地使用 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 上运行,但仍然可以利用可用的新功能。


n
nioq

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

只需从“正在寻找旧版本的 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,你就完成了。


S
Steven Lu

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

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


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

如其他答案中所述,将 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 进行调试的解决方案。


O
OneSman7

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

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


A
Andrea

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

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

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

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

“确保您的应用程序与 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,此讨论非常有用,仍然相关,并且将继续与未来相关。我理解你的观点,但它不是唯一的。
你完全正确!!!我没有考虑企业分布。但不要忘记,你仍然可以在 iOS6 上部署新的 Xcode,只需设置部署目标,无需关心 ios7 的优化和审核过程。
W
Wayne

我目前安装了 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 目录(或完全重命名应用程序)。