30

在 XCode 4.6.3 上编译我的应用程序并在 iOS 7 上运行它效果很好。

在 XCode 5 上编译我的应用程序并在 iOS 7 上运行它会导致我现在不想处理的大 UI 混乱。(iOS 7 选择器、标签栏、表格视图等)

目标:

我希望能够使用 XCode 5 并在 iOS 7 模拟器上测试我的应用程序,但仍然使用 iOS 6 和更低的 UI 和感觉。

原因:

我不想将我的应用程序重新设计为 iOS 7,但我确实想确保它在使用 XCode 5 iOS 7 模拟器的 iOS 7 上运行良好。

XCode 5 上是否有快速切换以强制一切保持不变?

在 XCode 5 中使用 iOS 6 Base SDK之类的操作是可以接受的,还是有点太老套了?

编辑:

使用 iOS 6 SDK 没有帮助。您仍然可以在应用程序上获得 iOS 7 的外观,只是错误更多。

4

13 回答 13

16

这是场景:

  • 您的应用在 iOS 6 及更低版本上运行良好
  • 您想在 iOS 7 上测试您的应用
  • 如果您的设备上有 iOS 7,则需要 XCode 5 才能在其上进行测试
  • 如果你想在 iOS 7 模拟器上测试它,你需要为它安装 XCode 5
  • 在 XCode 5 上编译你的工作应用程序将打破一切,并迫使你至少为 iOS 7 重新设计你的应用程序
  • 到目前为止,此处建议的解决方案将帮助您了解您的应用在 iOS 7 上的外观,但不会在 iOS 7 上保持 iOS 6 和更低版本的外观。

到目前为止我找到的最佳解决方案:

  1. 将您当前的 XCode 更新为 XCode 5
  2. 从这里下载 XCode 4.6.3
  3. 将其安装在不同的位置并将应用程序的名称更改为 XCode4 以区分两者。
  4. 找到您的 XCode 5 应用程序图标,右键单击它并选择“显示包内容”
  5. 找到文件夹 MacOS 并将 xcode 文件移到其文件夹之外。最后两个步骤是为了防止您不小心使用 XCode 5 打开项目。另一种方法是更改​​默认的“打开方式”应用程序,但由于某种原因,这对我不起作用,而且我想在拥有一个之后更加确定使用 XCode 5 打开项目并且 StoryBoard 更改为仅与 XCode 5 兼容。*
  6. 打开 XCode 4.6.3 并运行您的项目。在您的模拟器菜单中,您现在应该看到 iOS 7。即使在 XCode 顶部栏中您会看到AppName->iPhone 6.1 Simulator,在模拟器上选择 iOS 7 也会在 iOS 7 中运行您的应用程序并保持一切不变。

完成上述操作后,您将拥有两个版本的 iOS 模拟器。包含 iOS 7 模拟器的版本 6 和版本 7。

第 5 步:

在此处输入图像描述

于 2013-09-23T08:07:55.077 回答
5

复制iPhoneSimulator6.1.sdk

<YOUR XCode4 path>/Xcode4.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/

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

并将您的基本目标设置为 iOS6.1(它将在从 xcode4 复制/粘贴后列出)和

在此处输入图像描述 在此处输入图像描述

于 2013-09-26T10:05:13.120 回答
4

您不能在 iOS 7 模拟器上执行此操作。您可以在 iOS 6 模拟器(在 Xcode 5 下运行)和设备上(只要您使用 iOS 6 SDK 构建,就可以运行 iOS 7)执行此操作。但是iOS 7 Simulator 中没有iOS 6 兼容模式。

请注意,iOS 6 兼容模式并不是对 iOS 6 的完美复制。仍然存在您可能需要测试和处理的各种行为差异。但是基本的 UI 组件是您所期望的。

于 2013-09-22T22:54:12.977 回答
3

编辑 - 请注意,无法强制应用在使用 Xcode 5 的 iOS 7 设备上使用 iOS 6 界面(除非您制作自定义图形)。这也不是一个好的设计方法。iOS 7 上的用户期望某种 UI 风格,这就是他们更新的原因;所以把它给他们,不要强迫他们回到旧界面。

如果你真的真的需要 pre-iOS-7 界面,你可以下载 Xcode 4 的副本并使用它进行构建。但是,从 2014 年 2 月 1 日开始,Apple 将停止接受使用早于 Xcode 5.0 的任何内容构建的应用程序(我想我在 iOS 7 开发文档中看到了一些关于此的内容,但无法再次找到参考)。


在您的应用程序中保留 iOS 6 UI,但为 iOS 7 构建是相当简单的。确保您已将部署目标设置为 iOS 6.1 或更早版本。您的 Base SDK 仍然可以设置为 iOS 7。现在,只需按照以下说明操作每个接口文件:

  1. 打开故事板文件或 XIB 文件
  2. 打开右侧的实用程序面板。
  3. 单击文件检查器选项卡。您现在应该看到如下内容:

    Xcode 5 实用程序面板和文件检查器

  4. 接下来转到 Interface Build Document Section 并将Builds For设置更改为iOS 6.0 及更高版本或您需要的任何版本。

    Xcode 5 实用程序面板界面构建文档部分

  5. 然后将View As设置更改为iOS 6.1 或更早版本

    Xcode 5 界面构建文档部分 - 查看为设置

  6. Xcode 会提示您,只需确认您要转换为旧版 UI。

确保在 iOS 6 模拟器中运行您的项目。否则,iOS 7 模拟器将覆盖它自己的 iOS 7 UI 样式。要下载 iOS 6 模拟器,请转到 Xcode 菜单栏。选择 Xcode,首选项。然后单击“下载”选项卡。最后,点击您需要下载的模拟器:

在此处输入图像描述

然后在 iOS 6 模拟器上运行您的应用程序: 在此处输入图像描述

不幸的是,即使在 Xcode 中禁用 iOS 7 UI 也不会在设备/模拟器上覆盖它。除非您设计自定义 UI 元素,否则无法在 iOS 7 上维护您的 iOS 6 UI。但正如我向您展示的那样,您可以继续在 iOS 6 中编辑它并为 iOS 6 构建

于 2013-09-22T20:09:22.247 回答
1

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

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

// put in main.m
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"UIUseLegacyUI"];
[[NSUserDefaults standardUserDefaults] synchronize];

注意:这是一个未记录的密钥,不推荐用于 App Store 构建!

使用 Xcode 4.6 构建的版本也存在细微差别。例如,透明导航栏的行为不同(导致视图为全尺寸)。

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

更新: Xcode 4.6.3 在 Mavericks 上的崩溃仅在使用 LLDB 时发生。当切换回 GDB 时,它可以工作。

于 2013-10-28T13:52:16.753 回答
0

与我的评论相反,我实际上可以按照链接中提到的步骤进行操作。我尝试的并不是什么hacky:

  • 打开 XCode 4.6 应用程序包(我还安装了它)
  • 转到Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs文件夹。
  • 复制 iPhoneOS6.1.sdk 文件夹。
  • 打开 XCode 5 应用程序包。
  • 转到同一Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs文件夹。
  • 粘贴。

然后,我可以将 iOS 6.1 视为基于Build Settings->Base SDKs.

然而,即使在我在 iOS 7 模拟器下运行应用程序时这样做了,我也感觉不到视觉上的差异——所有内容都以默认的 iOS 7 样式呈现——无边框按钮和栏。

重置模拟器后没有变化。

更改故事板版本后也没有变化。

所以这似乎再次证实了我的断言,即这是不可能的。

如果有人试过,我想知道。

于 2013-09-22T19:49:30.553 回答
0

我想补充一点,虽然您可能无法在模拟器中执行此操作,但您可以在具有 iOS 7 的实际设备上以兼容模式运行您的应用程序。

于 2013-09-25T03:03:44.680 回答
0

这将让您预览应用程序在使用 Xcode 5 的 iOS 6 中的外观。

我在 WWDC 视频中看到了这一点。

406 - 控制自动布局 xcode 5(大约 32 分钟)

使用情节提要中的预览功能。

在此处输入图像描述

这将允许您在 iOS 7 和 iOS 6 上的外观之间进行选择。

在此处输入图像描述

该视频展示了 xcode 的一个很酷(几乎隐藏)的功能,它允许您同时查看 iOS6 和 iOS7 的预览,将 Xcode 分成 3 个单独的视图

于 2013-09-22T23:05:59.410 回答
0

这对我有用,但这里的解释需要清理和详细说明。如果仍然需要,请告诉我,我会详细介绍。

这个答案开始

  • 除了复制 iPhoneOS6.1.sdk 文件夹外,还需要下载 iOS 6.1 模拟器(正确的方法或从旧的 Xcode 安装中复制)
  • 然后,复制 iOS 7 模拟器并将其 plist 替换为 6.1 模拟器的 plist
  • 重启 Xcode
  • 然后,您将看到每个设备选项有两个 iOS 7 模拟器选项。一个是普通的 iOS 7 模拟器。另一个将在 7 模拟器上运行您的 6.1 SDK 构建
  • 警告之后您可能无法从 Xcode 的下拉列表中删除虚拟模拟器(我没有尝试过。删除虚拟模拟器文件夹后它卡住了)
于 2013-11-01T11:42:28.720 回答
0

我认为在 XCode 5(和 iOS7 模拟器)上显示 iOS 6 控件的唯一方法是将 Target 的 Base SDK 设置为 iOS 6.1(6.0)。

您应该像 Nirav 描述的那样将旧 sdk 复制到 XCode 5 并重新启动 XCode 以使其在 Base SDK 选择下可见。

我的猜测是它对 Nirav 不起作用,因为他更改了项目的设置,并且在他的情况下,它们与目标的设置不同步。因此,请确保您的目标的 Base SDK 是 iOS 6.0。然后它应该可以工作(至少它对我有用)。

于 2013-09-22T22:59:54.347 回答
0

好消息是我们现在可以使用 XCode 5 将基本 sdk 设置为 iOS 6.1(在我的例子中,它是版本 5.0.1 (5A2053)),现在可以在 iOS 7 模拟器上测试和调试我们在 iOS7 之前设计的应用程序。

对于那些不知道如何为 XCode 将基本 sdk 设置为 iOS 6.1 的人,此链接可能是一个指南。

一切似乎都运行良好,与 iOS 7 之前的设计外观和感觉相同,除了一些操作系统以 iOS 7 的方式提供了诸如 ActionSheet 外观和行为的控件。

顺便说一句,我昨天将我的 mac os 升级到了 maverick,不确定这是否是一个影响因素。

于 2013-10-23T21:13:57.217 回答
0

哇,这真是一团糟。谢谢,苹果 [*]

我得到了这个(这个:XCode 5 building iOS 6 apps)为我工作,但我有几个XIB被搞砸了,它需要结合上述几个步骤才能让它工作。

1) 使用 iOS 6 基础 sdk 设置 XCode 5

@Sha 有很好的步骤: How to use iOS Simulator 7 \ XCode 5 to test pre-iOS 7 UI(无需升级 iOS 7 的应用程序)

2)遍历每个XIB并将其设置为XCode 4.6模式

@RazorSharps 帖子有很好的步骤: How to use iOS Simulator 7 \ XCode 5 to test pre-iOS 7 UI(无需升级 iOS 7 应用程序)

我不确定这是 100% 需要的,但我做到了,而且效果很好。(也许我稍后会回去尝试不使用这个,当我还不生气的时候)。

3)在XIB(或代码)中找到任何可能设置为半透明的导航控制器,将它们设置为不透明

这对我来说是个窍门。我有一个将导航栏定义为黑色半透明的根 XIB,但所有加载的 XIB 都以自己的外观覆盖。
在“真正的 iOS 6”中,控制器设置将覆盖此设置(即导航栏将显示为不透明),但在 iOS 7 上的 iOS 6 兼容模式中则不会(即,它将具有 iOS 6 的外观,但透明,并弄乱视图布局)。

    • @appledevtools:我们感谢您的辛勤工作,这很难做到。但这里有一个建议:将现有项目升级到 XCode 5 时,IB xib 应该保留在 XCode 4.6 模式下。让 Editor > Validate Settings 代码提供升级设置,并给出合理的暗示警告。 不要自动且无声地执行此操作:-) 另外,请查找并修复导航栏样式在 iOS 6 兼容模式下发生变化的原因。
于 2013-09-25T03:34:07.880 回答
-1

从部署信息中将部署目标设置为 iOS 7.0。点击项目名称,在第一个屏幕上,您将看到部署信息... 将部署目标更改为 7.0。退出模拟器后,再次构建并运行应用程序。

于 2013-09-22T18:05:53.120 回答