【问题标题】:How to use iOS Simulator 7 \ XCode 5 to test pre-iOS 7 UI (without upgrading the app for iOS 7)如何使用 iOS Simulator 7\XCode 5 测试 pre-iOS 7 UI(无需升级 iOS 7 应用)
【发布时间】:2013-09-27 15:04:46
【问题描述】:

在 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 上是否有快速切换以强制一切保持不变?

做类似using iOS 6 Base SDK in XCode 5 的事情是可以接受的还是有点太老套了?

编辑:

使用 iOS 6 SDK 没有帮助。您的应用仍将获得 iOS 7 的外观,只是有更多错误。

【问题讨论】:

  • 如何在 xcode 5 中使用 ios 6 sdk?
  • +1 用于询问每个人(讨厌“Flat”)希望用他们的桌面应用程序做什么。不过,您在这里要问的是公开驳斥所有被称为 iOS 7 的巨大变革保护伞下的所有内容。不太可能。
  • @DineshRaja 上面有一个链接描述了如何做到这一点。
  • @RazorSharp 我在同一条船上。我想知道是否有办法知道是谁干的,最好有理由。
  • 我可以确认我整天都在使用我的解决方案,到目前为止我没有看到任何副作用

标签: ios cocoa-touch ios6 ios7 xcode5


【解决方案1】:

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

this answer 中所述,还需要在 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 时,它可以工作。

【讨论】:

    【解决方案2】:

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

    如果您真的真的需要 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. 单击文件检查器选项卡。您现在应该会看到如下内容:

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

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

    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 构建

    【讨论】:

    • 我已按照您的步骤进行操作,但它似乎对我不起作用。在设备上运行时,UI 仍使用新的 iOS 7 样式。
    • @lxt 我已经更新了我的答案。该解决方案现在应该可以工作了。请考虑“取消投票”
    • 我很想测试一下,但有问题的应用程序不使用 xib 文件或 Storyboard - 仅纯代码。我仍然对您对我正在维护的其他项目的回答感兴趣,并将很快对其进行测试。
    • @RazorSharp 感谢您的帮助,但这对我也不起作用。这只会让您预览应用在 iOS 6 中的外观。外观仍然是 iOS7 风格,所有 UI 都会发生变化。
    • 我可以想象,否决票是由于您不正确:如果您使用较旧的 SDK(6.1 而不是“最新”7.0),您将非常能够获得 iOS 6 的外观和在 iOS 7 设备上感受。 iOS 7 对所有尚未使用 iOS 7.0 SDK 编译的应用程序执行此操作。通过安装较旧的 SDK,您可以选择使用哪个 SDK 在 Xcode 中进行编译。因此,可以在 iOS 7 设备上保留传统外观。请参阅此处:pinkstone.co.uk/how-to-use-ios-6-legacy-look-in-xcode-5 请注意,从 2014 年 2 月 1 日起,Apple 不再接受此类提交。
    【解决方案3】:

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

    this answer开始

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

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

      • 谁对这篇文章投了反对票,请至少给一些评论。这里尝试的方法是我亲身体验过的,结果一切都如其所言。
      【解决方案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复制/粘贴后列出)和

      【讨论】:

        【解决方案6】:

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

        我得到了这个(这个: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 (without upgrading the app for iOS 7)

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

        @RazorSharps 的帖子有很好的步骤: How to use iOS Simulator 7 \ XCode 5 to test pre-iOS 7 UI (without upgrading the app for 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 兼容模式下发生变化的原因。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            这是场景:

            • 您的应用在 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. here下载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 模拟器 ,在模拟器上选择 iOS 7 将在 iOS 7 中运行您的应用程序并保持一切不变。

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

            第 5 步:

            【讨论】:

            • +1 这行得通。我仍然不明白为什么以 iOS 6 SDK 为目标不会让它看起来像 iOS 6。同时他们保持了 iOS 7 之前的兼容模式。
            • 祝你好运 - 我观察到,它使大部分内容保持不变,如 iOS 7 之前的版本。只有特定于操作系统的内容(如警报)适用于 iOS 7。
            • 如果不根据您的需要进行自定义,就无法在 iOS 7 上显示 iOS 6 警报。真的不打扰我。上述解决方案适用于其他所有内容,选择器、表格视图、标签栏(现在是白色的!)状态栏位置等。
            • 这也是一种在 iOS 7 设备上测试 pre-iOS 7 界面的方法吗?还是仅在 iOS 7 模拟器上?谢谢
            • 苹果放这些人工积木很烦人。他们这样做的原因很明显(他们希望人们更新到最新的 SDK),但仍然非常烦人和不必要。
            【解决方案9】:

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

            我在 WWDC 视频中看到了这个。

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

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

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

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

            【讨论】:

            • 虽然这是一个不错的功能,但这并不能回答问题。我不需要预览应用在 iOS 6 中的外观。我希望它看起来像在 iOS 7 之前的样子,并且仍然使用 XCode 5。
            • 是的,我明白了,尽管这总比没有好。我讨厌 iOS7,但越来越喜欢它提供的灵活性。
            【解决方案10】:

            我认为在 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。然后它应该可以工作(至少它对我有用)。

            【讨论】:

              【解决方案11】:

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

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

              【讨论】:

              • +1 我也有同样的看法。不确定谁在疯狂投票 - 尽管发布了正确的观察结果。
              • @Daij-Djan 一种骇人听闻的方式总比没有任何方式要好
              • 不同意,不支持,因此所有结果都有问题
              【解决方案12】:

              与我的 cmets 不同,我实际上可以按照提到的步骤 in the link。 我尝试的并不是什么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-&gt;Base SDKs 下的 iOS 项目的一个选项。

              然而,即使在我在 iOS 7 模拟器下运行应用程序时执行此操作后,我也感觉不到视觉差异 - 全部以默认 iOS 7 样式呈现 - 无边框按钮和栏。

              重置模拟器后没有变化。

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

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

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

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                • 我真的不明白这会如何改变任何事情。
                • 您想在不使用 iOS 7 sdk 的情况下在 iOS 7 中运行 iOS 6 构建...这就是方式...我不明白您为什么要减去我的答案。
                • 不,您应该将部署目标设置为最多 iOS 6.0。如果您将其设置为 iOS 7.0 并且您没有将自动布局应用到您的应用程序 UI,您将得到一个 UI 混乱。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多