Как использовать iOS Simulator 7\XCode 5 для тестирования пользовательского интерфейса pre-iOS 7 (без обновления приложения для iOS 7)

Компиляция моего приложения на XCode 4.6.3 и его запуск на iOS 7 отлично работают.

Компиляция моего приложения на XCode 5 и запуск его на iOS 7 приводит к большому беспорядку пользовательского интерфейса, с которым я не хочу сейчас обращаться. (сборщики iOS 7, табы, таблицы и т.д.)

Цель:

Я хочу иметь возможность использовать XCode 5 и тестировать свое приложение на симуляторе iOS 7, но все равно использовать iOS 6 и более низкий интерфейс и чувствовать себя.

Причина:

Я не хочу перепроектировать мое приложение для iOS 7, но я хочу убедиться, что он отлично работает на iOS 7, используя симулятор XCode 5 iOS 7.

Есть ли быстрый переход на XCode 5, чтобы заставить все оставаться неизменным?

Делает что-то вроде с использованием базового SDK iOS 6 в XCode 5 приемлемым или немного слишком взломанным?С >

Edit:

Использование iOS 6 SDK не помогает. Вы все равно получите вид iOS 7 в своем приложении, просто более глючный.

Ответ 1

Это сценарий:

  • Ваше приложение отлично работает на iOS 6 и ниже
  • Вы хотите протестировать свое приложение на iOS 7
  • Если у вас есть iOS 7 на вашем устройстве, вам понадобится XCode 5, чтобы проверить его на нем.
  • Если вы хотите протестировать его на симуляторе iOS 7, вам нужно установить XCode 5 для него.
  • Компиляция вашего рабочего приложения на XCode 5 прорвет все ад и заставит вас перепроектировать ваше приложение, по крайней мере, для iOS 7
  • Предлагаемые здесь решения помогут вам увидеть, как ваше приложение будет выглядеть на iOS 7, но не будет поддерживать iOS 6 и более низкий вид на iOS 7.

Лучшее решение, которое я нашел до сих пор:

  • Обновите текущий XCode до XCode 5
  • Загрузите XCode 4.6.3 из здесь
  • Установите его в другом месте и измените имя приложения на XCode4, чтобы различать два.
  • Найдите значок приложения XCode 5, щелкните его правой кнопкой мыши и выберите "Показать содержимое пакета"
  • Найдите папку MacOS и переместите файл xcode за пределы его папка. Эти последние два шага должны помешать вам случайно открыть проект с XCode 5. Альтернативой является изменение стандартного приложения "Открыть с" но по какой-то причине это не сработало для меня плюс я хотел быть уверенным после того, как у меня было одно открытие проекта с XCode 5 и StoryBoard изменен, чтобы быть совместимым только с XCode 5. *
  • Откройте XCode 4.6.3 и запустите проект. В вашем меню симулятора вы теперь см. iOS 7. Даже если в верхней строке XCode вы увидите AppName- > iPhone 6.1 Симулятор, выбрав iOS 7 на симуляторе, запустит ваше приложение в iOS 7 и сохранит все то же самое.

После вышесказанного вы получите две версии iOS-симулятора. Версия 6 и версия 7, содержащая симулятор iOS 7.

Шаг 5:

enter image description here

Ответ 2

COPY 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) и

enter image description hereenter image description here

Ответ 3

Вы не можете сделать это на симуляторе iOS 7. Вы можете сделать это в симуляторе iOS 6 (работающем под Xcode 5) и на устройстве (работа с iOS 7 до тех пор, пока вы создаете с помощью iOS 6 SDK). Но в iOS 7 Simulator нет режима совместимости с iOS 6.

Обратите внимание, что режим совместимости с iOS 6 не является идеальной репликацией iOS 6. По-прежнему существуют различные поведенческие различия, с которыми вам, вероятно, придется протестировать и справиться. Но основные компоненты пользовательского интерфейса - это то, что вы ожидаете.

Ответ 4

РЕДАКТИРОВАТЬ. Обратите внимание, что невозможно заставить приложение использовать интерфейс iOS 6 на устройстве iOS 7 с использованием Xcode 5 (если вы не создаете собственную графику). Это также не хороший подход к дизайну. Пользователи iOS 7 ожидают определенный стиль пользовательского интерфейса, поэтому они обновлены; поэтому дайте им их, не заставляйте их вернуться в более старый интерфейс.

Если вам действительно нужен интерфейс pre-iOS-7, вы можете загрузить копию Xcode 4 и построить с ней. Однако с 1 февраля 2014 года Apple перестанет принимать приложения, созданные с чем-то раньше Xcode 5.0 (я думаю, что я видел что-то об этом в iOS 7 dev docs, но не могу найти ссылку снова).


Сохранение пользовательского интерфейса iOS 6 в вашем приложении, но создание для iOS 7 довольно просто. Убедитесь, что вы установили цель развертывания как iOS 6.1 или ранее. Однако базовый SDK можно установить как iOS 7. Теперь просто следуйте инструкциям ниже для каждого из файлов интерфейса:

  • Откройте файл раскадровки или файл XIB
  • Откройте панель "Утилиты" справа.
  • Нажмите вкладку "Инспектор файлов". Теперь вы должны увидеть что-то вроде этого:

    Xcode 5 Utilities Panel and File Inspector

  • Далее перейдите в раздел "Создание документа интерфейса" и измените параметр Builds For на iOS 6.0 и более поздние версии или любую другую версию, которая вам нужна.

    Xcode 5 Utilities Panel Interface Build Document Section

  • Затем измените параметр View As на iOS 6.1 или ранее:

    Xcode 5 Interface Build Document Section - View As Setting

  • Xcode предложит вам подтвердить, что вы хотите преобразовать в более старый интерфейс.

Обязательно запустите проект в симуляторе iOS 6. В противном случае, iOS 7 Simulator переопределит его собственный стиль iOS 7 UI. Чтобы загрузить iOS 6 Simulator, перейдите в панель меню Xcode. Выберите Xcode, Preferences. Затем перейдите на вкладку "Загрузки". Наконец, нажмите Симулятор (ы), который вам нужно скачать:

enter image description here

Затем запустите приложение на симуляторе iOS 6: enter image description here

К сожалению, даже отключение iOS 7 UI в Xcode не отменяет его на устройстве/симуляторе. Если вы не создаете пользовательские элементы пользовательского интерфейса, , вы не сможете поддерживать свой iOS 6 UI на iOS 7. Но, как я показал вам, , вы можете продолжать редактировать его в iOS 6 и строить для iOS 6.

Ответ 5

Связывание 6.1 SDK с Xcode 5, как описано в других ответах, - это один шаг. Однако это все еще не решает проблему, возникающую при работе с новыми элементами интерфейса iOS 7, контроллеры представлений сделаны полноразмерными и т.д.

Как описано в этом ответе, также требуется переключить интерфейс в прежний режим на iOS 7:

// 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 он работает.

Ответ 6

В отличие от моих комментариев, я мог бы выполнить следующие шаги, указанные в ссылке. То, что я пробовал, не было чем-то вроде взлома:

  • Откройте пакет приложений XCode 4.6 (у меня он все еще установлен)
  • Перейдите в папку Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs.
  • Скопируйте папку iPhoneOS6.1.sdk.
  • Откройте пакет приложений XCode 5.
  • Перейдите в ту же папку Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs.
  • Paste.

Затем я мог видеть iOS 6.1 как вариант, чтобы основать проект iOS под Build Settings->Base SDKs.

Однако даже после этого, когда я запускал приложение под iOS 7-симулятором, я не ощущал никакой визуальной разницы - все было отображено в стиле iOS 7 по умолчанию - без полей и баров.

Без перезагрузки симулятора изменений не происходит.

Никаких изменений после изменения версии раскадровки.

Таким образом, это снова подтверждает мое утверждение, что это невозможно.

Если кто-нибудь попробовал это, я хочу знать.

Ответ 7

Я думаю, что единственный способ показать элементы управления iOS 6 на XCode 5 (и iOS7 Simulator) - установить базовый SDK вашей цели на iOS 6.1 (6.0).

Скопируйте старый sdk на XCode 5, как описано Nirav, и перезапустите XCode, чтобы сделать его видимым в разделе выбора Base SDK.

Я предполагаю, что это не сработало для Нирава, потому что он изменил настройки проекта, и в его случае они были отключены от настроек цели. Поэтому убедитесь, что Base SDK для вашей цели - iOS 6.0. Затем он должен работать (по крайней мере, для меня).

Ответ 8

Это даст вам представление о том, как приложение будет выглядеть в iOS 6 с помощью Xcode 5.

Я видел это на видео WWDC.

406 - управление автоопределением xcode 5 (около 32 минут)

Использование функции предварительного просмотра в раскадровке.

enter image description here

Это позволит вам выбрать между тем, как он будет выглядеть на iOS 7 и iOS 6.

enter image description here

Видео показывает прохладную (почти скрытую) функцию xcode, которая позволяет одновременно просматривать оба изображения iOS6 и iOS7, разделяя Xcode на 3 отдельных вида

Ответ 9

Я хотел бы добавить, что, хотя вы, возможно, не сможете это сделать в симуляторе, вы можете запускать свои приложения в режиме совместимости на самом устройстве с iOS 7.

Ответ 10

Ничего себе, это настоящий беспорядок. Спасибо, Apple [*]

Я получил это (это: XCode 5, строя приложение iOS 6), работающее для меня, но у меня было несколько XIB, которые были испорчены, и для его работы потребовалось сочетание нескольких из вышеперечисленных шагов.

1) Настройка XCode 5 с базой iOS 6 sdk

@Sha имеет хорошие шаги для этого: Как использовать iOS Simulator 7\XCode 5 для тестирования пользовательского интерфейса pre-iOS 7 (без обновления приложения для iOS 7)

2) Пройдите через каждый XIB и установите его для режима XCode 4.6

Сообщение @RazorSharps имеет хорошие шаги: Как использовать iOS Simulator 7\XCode 5 для тестирования пользовательского интерфейса pre-iOS 7 (без обновления приложения для iOS 7)

Я не уверен, что это было на 100% необходимо, но я сделал это, и он работает. (Возможно, я вернусь позже и попробую без этого, когда я еще не буду дышать).

3) Найдите любые контроллеры навигации в XIB (или коде), которые могут быть установлены на "Прозрачный", установите их в Opaque

Это был трюк для меня. У меня был корневой XIB, который определил панель навигации как Black Translucent, но все XIB, которые загрузились, переопределили свой внешний вид.
В "реальном iOS 6" настройка контроллеров будет переопределять это (то есть, навигационная панель будет казаться непрозрачной), но в режиме совместимости iOS 6 на iOS 7 она не будет (то есть будет иметь внешний вид iOS 6, но быть прозрачным и беспорядочным макетом представления).

    • @appledevtools: Мы ценим вашу напряженную работу, это трудно понять. Но вот предложение: при обновлении существующего проекта до XCode 5 IB xib следует оставить в режиме XCode 4.6. Пусть редактоp > Validate Settings code предлагает обновить настройки с разумным предупреждением о последствиях. Не делайте этого автоматически и тихо:-) Также, пожалуйста, найдите и исправьте, почему стиль навигации был изменен в режиме совместимости с iOS 6.

Ответ 11

Хорошей новостью является то, что теперь мы можем установить базовый sdk на iOS 6.1 с XCode 5 (в моем случае это версия 5.0.1 (5A2053)), а также протестировать и отладить наше приложение, разработанное до iOS7, на iOS 7-симуляторе сейчас.

Для тех, кто не знает, как установить базовый sdk для iOS 6.1 для XCode, эта ссылка может быть руководством.

Кажется, что все работает нормально, тот же дизайн и внешний вид pre-iOS7, за исключением некоторых элементов управления, таких как ActionSheet и поведение в стиле iOS 7.

Кстати, я обновил свой mac os до maverick вчера, не уверен, что это фактор влияния.

Ответ 12

Этот работал для меня, но объяснение здесь нуждается в очистке и детализации. Если хотите, дайте мне знать, и я расскажу подробнее.

Из следует этот ответ

  • В дополнение к копированию папки iPhoneOS6.1.sdk вам также необходимо загрузить симулятор iOS 6.1 (правильный способ или скопировать его из старой установки Xcode).
  • Затем сделайте дубликат симулятора iOS 7 и замените его plist с помощью симулятора 6.1.
  • Перезапустить Xcode
  • Затем вы увидите два варианта симулятора iOS 7 для каждого параметра устройства. Один из них будет обычным симулятором iOS 7. Другой будет запускать ваши 6.1 SDK сборки на 7 симуляторе
  • ПРЕДУПРЕЖДЕНИЕ Возможно, вы не сможете удалить фиктивный симулятор из выпадающего списка Xcode (я еще не пробовал. Он застрял после того, как я удалил папку фиктивного симулятора)

Ответ 13

Задайте цель развертывания для iOS 7.0 из информации о развертывании. Для этого нажмите на название проекта и на первом экране вы увидите информацию о развертывании... Измените цель развертывания на 7.0. После этого выйдите из симулятора, снова создайте и запустите приложение.