Xcode 5 有一个首选项窗格,允许下载 iPhone 6.1 模拟器,但是我找不到允许下载 iOS 6 SDK 的地方,因此在使用 Xcode 5 开发时无法将活动 SDK 设置为 iOS 6 . 有没有一种解决方法可以让 Xcode 5 安装 iOS 6 SDK?
编辑:
由于 Xcode 5 已普遍可用并允许您下载以前版本的 SDK,因此不再需要变通方法。
编辑:从 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/
当我更新到 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。
这是一些屏幕截图。
是的,我今天刚刚解决了这个问题。
然后您可以选择如下所示的 SDK:
希望这对您有所帮助。
查找并下载旧的 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
补充一点,您实际上可以使用 Xcode 5 本身下载旧版本的模拟器 - 只需转到首选项,您会在下载下找到它们:
您可以下载旧版 SDK 并将其安装在
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
文件夹。注销 + 登录只是为了确保更改生效,您应该在新 XCode 中看到旧 SDK
打开终端窗口
$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/
由于您位于系统文件夹中,系统将提示您输入密码
对我来说最简单的解决方案:
要在您的模拟器上测试 iOS 6 中的应用程序: - 只需在您的活动 sheme 中选择 iOS 6.0。
要在 iOS 6 中构建您的应用程序,因此您的应用程序设计将是带有 iOS 7 的 iPhone 上的旧设计: - 在 Targets 中选择 iOS6.1 - Base SDK
请注意:当您更改 Targets 中的基本 SDK 时,iOS 7.0 将不再可用于在模拟器上构建!
可以这样做,但不是真的必要
杰森·李得到了答案。安装 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 项目,请在项目的构建设置中进行两个选择。
选择一个部署目标。
这标识了您的软件可以运行的最早的操作系统版本。
选择基础 SDK
您的软件可以使用操作系统版本中提供的功能,包括对应于基本 SDK 的版本。默认情况下,Xcode 将此设置为 Xcode 支持的最新操作系统。
例如,您可以使用 iOS 7 作为基础 sdk 并将 iOS 6 设置为部署目标。在 iOS 6 模拟器上运行以测试它在 iOS 6 上的工作方式。如果没有模拟器列表,请安装模拟器。
另外,您可以无条件地使用 iOS 6 之前的功能。并且有条件地,您可以为新更新的设备支持 iOS 7 的新功能,同时支持以前的版本。
这可以使用弱链接类、弱链接方法、函数和符号来完成
假设在 Xcode 中,您将部署目标(所需的最低版本)设置为 iOS6,将目标 SDK(允许的最大版本)设置为 iOS7。在编译期间,编译器会弱链接 iOS7 中引入的任何接口,同时强链接早期的接口。这将允许您的应用程序继续在 iOS6 上运行,但仍然可以利用可用的新功能。
这里的其他答案也是正确的,但我发现以下步骤是最简单的:
只需从“正在寻找旧版本的 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,你就完成了。
我的应用程序无缝过渡到 Xcode 5,因为它仍然可以使用您在项目中设置的原始 iOS 部署目标(在我的情况下为 5.1)构建。如果新的 SDK 没有造成一些无法克服的问题,那为什么不使用它来构建呢?引擎盖下肯定有很多改进。
例如,我更喜欢使用 Xcode 5 而不是 Xcode 4.6.3。为什么?我将获得更长的电池寿命,因为 Xcode 5 中文本/代码区域的 UI 滚动不再占用整个 CPU 线程。
如其他答案中所述,将 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 进行调试的解决方案。
我下载了 XCode 4 并将 iOS 6.1 SDK 从它带到 XCode 5,如其他答案中所述。然后我还安装了 iOS 6.1 Simulator(它在首选项中可用)。我还在项目设置中将 Base SDK 切换到 iOS 6.1。
在所有这些操作之后,带有 6.1 基础 sdk 的项目在 iOS 7 模拟器中以可兼容模式运行。
从 2 月 1 日起,Apple 将拒绝仅为 iOS6 或更低版本构建的应用程序。这也是来自苹果的官方通讯。更好地开始为 iOS7 构建。
澄清我的声明:如果您为 iOS6 或更低版本构建,Apple 将拒绝您的应用程序。如果您为 iOS7 构建并降低一切都很好,这意味着:
苹果电子邮件的内容对我来说很清楚
“确保您的应用程序与 iOS 7 中的创新技术无缝协作。从 2 月 1 日开始,提交到 App Store 的新应用程序和应用程序更新必须使用 Xcode 5 和 iOS 7 SDK 构建。”
我目前安装了 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