Можно ли установить iOS 6 SDK на Xcode 5?

250

Xcode 5 имеет панель настроек, которая позволяет загружать симулятор iPhone 6.1, однако я не могу найти место, где он позволяет загружать iOS 6 SDK, поэтому невозможно установить активный SDK для iOS 6 при разработке с Xcode 5 Есть ли обходной путь, который позволит Xcode 5 установить iOS 6 SDK?

РЕДАКТИРОВАТЬ:

Обходных путей больше не нужно, теперь, когда Xcode 5 обычно доступен и позволяет загружать предыдущие версии SDK.

введите описание изображения здесь

Тони
источник
41
Чтобы воспользоваться многими улучшениями в Xcode 5, при этом все еще имея возможность создавать приложения для современного магазина приложений.
Тони
61
Привет, Мэдди, идея о том, чтобы «принять iOS 7 в любом случае», совершенно не связана с релизом GA. Решение и усилия по переработке всего языка разработки приложения и UX, чтобы соответствовать плоскому дизайну и переработанным компонентам пользовательского интерфейса iOS7, не являются ни малыми, ни могут легко прийти с точки зрения бизнеса и времени. При сборке с использованием SDK 6.1 iOS7 будет использовать язык дизайна пользовательского интерфейса iOS 6 и более ранних версий (для целей обратной поддержки). Таким образом, вполне возможно, что мы хотим разработать в Xcode 5 против 6.1 SDK еще какое-то время.
Marchy
2
хм, может быть, потому что он ожидает, что SDK будет отделен от IDE вместо одной монолитной кучи кода?
phreakhead
1
В настоящее время я работаю с клиентом, который не готов принять изменения пользовательского интерфейса IOS7, но может извлечь выгоду из улучшений миграции основных данных в XCode 5. Так что в этом случае это именно то, чего я тоже хочу.
Droid Chris
Можно подумать, что Xcode, если не включать SDK 6.1, по крайней мере, будет интегрировать его плавно. Но тогда есть эта проблема .
JohnK

Ответы:

203

РЕДАКТИРОВАТЬ: Начиная с 1 февраля 2014 года, Apple больше не будет принимать приложения до iOS7 для отправки в App Store. Таким образом, хотя эта техника все еще работает, она не будет полезна для большинства читателей.


Да, это нормально. Я все еще строю с iOS 4.3 для одного проекта (прошло некоторое время с тех пор, как мы обновились; но они все еще приняли его после выхода iOS 6), и в настоящее время я создаю 10.5 приложений с Xcode 5.

См. Как указать Xcode на старый SDK, чтобы его можно было использовать в качестве «Базового SDK»? для деталей о том, как настроить это. Вы можете использовать мой fix-xcode скрипт чтобы связывать все для вас каждый раз, когда вы обновляетесь.

Единственный прием - получить старые SDK. Если у вас их нет, вам обычно нужно скачать старые версии Xcode (все еще доступные на developer.apple.com ), открыть пакет установщика и поискать нужный вам SDK.

SDK можно найти в пакете установщика по адресу:

Xcode.app/Contents/Developer/Platforms/

Роб Нейпир
источник
Вам нужно удалить iOS 7 SDK при архивации, чтобы обеспечить его сборку с iOS 6 SDK?
Охайон
6
Здравствуй. это близко, но не совсем для меня. кнопки выглядят как iOS 6, но при использовании UINavigationController содержимое контроллера представления по-прежнему перемещается за панель навигации. есть мысли о том, как получить поведение iOS 6 для этого?
Мэтт Безарк
2
Нет; вы увидите это только на устройстве. В симуляторе iOS 7 нет режима совместимости с iOS 6. Если вы хотите посмотреть, как это выглядит в симуляторе, протестируйте на симуляторе iOS 6.
Роб Нейпир
1
Могу ли я отправить приложение, созданное с помощью Xcode 5 и iOS 6 SDK, в App Store?
hujunfeng
1
Пока iPad 1 все еще поддерживается, вы всегда можете предположить, что Apple примет 5.X iOS. Это не может быть улучшено.
Ахвульф
60

Я также запускал ту же проблему, когда я обновил до xcode 5, он удалил старый SDK. Но я взял копию старого SDK с другого компьютера, которую вы можете скачать по следующей ссылке.

http://www.4shared.com/zip/NlPgsxz6/iPhoneOS61sdk.html
(тестовый аккаунт www.4shared.com test@yopmail.com/test)

Есть 2 способа работы с.

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), поэтому перечислите все версии Deployment Target

Не нужно загружать zip, если вы хотите изменить только цель развертывания.

Вот несколько скриншотов. введите описание изображения здесь введите описание изображения здесь

АвтарСинг Сучария
источник
2
как и где ты скачал этот ios6.1 sdk? Я ищу iOS 5 SDK для запуска моего Xcode 5. Можете ли вы загрузить это или указать мне, где я могу загрузить его сам. Спасибо
Сэм Б
На самом деле, у меня также есть старая система. поэтому я взял это из старого XCode. То же самое, что я пробовал для ios sdk 5, но так как не очень нужно, я не пытался получить это от. Кроме того, если этот ответ кажется хорошим, я ценю ваши отзывы с точки зрения + или -. Спасибо.
Автар Сингх Сучария,
1
Эй, Автар, я скачал твой ios6 zip, разархивировал его по указанному пути, полностью закрыл xcode 5, перезапустил его снова, и все же я все еще вижу только 7.0 в качестве развертываемой цели в раскрывающемся списке. Я предполагаю, что есть пропущенные шаги, и это еще не все?
Сэм Б
То же самое работает для меня. Просто вопрос, вы добавили это в само приложение xcode или создали символическую ссылку?
Автар Сингх Сучария
непосредственно к приложению DIR.
Сэм Б
34

Да, я только что решил проблему сегодня.

  1. Найдите файл SDK, такой как iPhoneOS6.1.sdk, в старом каталоге Xcode вашего или вашего друга.
  2. Скопируйте и поместите его в каталог Xcode 5: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs.

введите описание изображения здесь

Затем вы можете выбрать SDK, как показано ниже:

введите описание изображения здесь

Надеюсь, это поможет вам.

Джейсон Ли
источник
2
Я сделал то же самое, но мой графический интерфейс приложения изменился и выглядит как iOS 7 GUI. Я выбрал iPhone Retina (4-дюймовый 64-разрядный) симулятор для запуска приложения. Я пропускаю что-нибудь еще после этого.
питон
20

Найдите и скачайте старый 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
Karim
источник
Мы можем использовать эту опцию для тестирования нашего приложения, но, вероятно, после февраля 2014 года любое приложение, созданное с использованием предыдущей версии iOS 7 SDK, не будет принято в магазине приложений!
Карим
11

Вы можете скачать старый SDK и установить его в

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

папки. Выход из системы + вход в систему только для того, чтобы изменения вступили в силу, и вы должны увидеть более старый SDK в новом XCode

unspokenblabber
источник
Я сделал это (используя ссылку на скачивание в предыдущем ответе), и выбор SDK для iOS 6.1 действительно появляется в xcode 5 в Настройках сборки> Архитектура> Базовый SDK. Однако, когда я собираю и запускаю на симуляторе iOS 7 (или устройстве iOS 7), он все еще использует кнопки iOS 7 UIKit (не версии iOS 6). Если у кого-то есть какие-либо предложения относительно того, почему, я был бы благодарен ....
Билл Паттерсон
Если у вас установлен TimeMachine, вы можете открыть вышеуказанный путь (в терминале: open "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/") и восстановить iOS6.1 SDK оттуда ,
Avance
11

Просто добавьте, что вы можете загрузить старые версии симулятора с помощью самого Xcode 5 - просто перейдите к настройкам, и вы найдете их в разделе «Загрузки»:

введите описание изображения здесь

Smikey
источник
Это должно было произойти с тех пор, как xcode 5 вышел из бета-версии и теперь является общим выпуском. Хорошо знать, спасибо Смики
Тони
5
@Manni Это не то же самое, что компиляция со старым API. Вы строите, используя новый API для iOS 6.
oligofren
Эти параметры не появляются по умолчанию в Xcode 6, даже если вы установили более старую целевую платформу.
ДжайлсДиддлтон
10
  • Загрузите Xcode 4.6.x из Apple Dev Center: https://developer.apple.com/downloads/index.action
  • Создайте папку с именем 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/Developer/SDKs/
  • Вам будет предложено ввести пароль, так как вы находитесь в системной папке

  • Откройте Xcode 5, и вы должны увидеть оба SDK
autremoi
источник
10

Просто для меня самое простое решение:

  1. Найдите более старый SDK, например, «iPhoneOS6.1 sdk» в более старой версии xcode, например. Если вы этого не сделали, вы можете загрузить его с сервера Apple Developer по этому адресу: https://developer.apple.com/downloads/index.action?name=Xcode. Когда вы открываете xcode.dmg, вы можете найти его, открыв Xcode.app (щелкните правой кнопкой мыши и «показать содержимое») и перейдите на страницу Содержание / Разработчик / Платформы / iPhoneOS.platform / Разработчик / SDKs / iPhoneOS6.1 SDK введите описание изображения здесь
  2. Просто скопируйте папку iPhoneOS6.X SDK и вставьте ее в свой xcode.app
    • щелкните правой кнопкой мыши на xcode.app в папке «Программы».
    • Перейдите на страницу Содержание / Разработчик / Платформы / iPhoneOS.platform / Разработчик / SDKs /
    • Просто вставьте сюда.

введите описание изображения здесь

  1. Закройте приложение xcode и снова откройте его.

Чтобы протестировать приложение в iOS 6 на симуляторе: - Просто выберите iOS 6.0 в своем активном режиме. введите описание изображения здесь

Чтобы создать приложение в iOS 6, дизайн вашего приложения будет таким же старым, как на iPhone с iOS 7: - Выберите iOS6.1 в Targets - Base SDK

введите описание изображения здесь

Просто обратите внимание: когда вы меняете базовый SDK в своих Целях, iOS 7.0 больше не будет доступна для сборки на симуляторе!

Даниэль С.
источник
9

Можно сделать это , но не очень нужно

Как это сделать

Джейсон Ли получил ответ. При установке xCode я предпочел сохранить предыдущие установки, а не заменять их. Так что у меня есть это в моей папке установки

введите описание изображения здесь

Так /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKsсодержат разные sdks. (Замените Xcode.app на правильный номер) скопируйте предыдущие SDK в

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

Вот моя папка после того, как я ее скопировал.

введите описание изображения здесь

Теперь перезапустите xCode, и вы можете установить предыдущие версии SDK в качестве базовой SDK.

Почему это не нужно

Ссылаясь на документацию Apple

Чтобы использовать определенный SDK для проекта XCode, сделайте два выбора в настройках сборки вашего проекта.

  1. Выберите цель развертывания .

    Это определяет самую раннюю версию ОС, на которой может работать ваше программное обеспечение.

  2. Выберите базовый SDK

    Ваше программное обеспечение может использовать функции, доступные в версиях ОС вплоть до той, которая соответствует базовому SDK. По умолчанию XCode устанавливает это к самой новой ОС, поддерживаемой XCode.

Правило: Используйте последний как базовый SDK и установите цель развертывания для приложения минимальной версии, которое должно запускаться

Например, вы можете использовать iOS 7 в качестве базовой SDK и установить iOS 6 в качестве цели развертывания. Запустите симулятор iOS 6, чтобы проверить, как он работает в iOS 6. Установите симулятор, если он недоступен со списком симуляторов.

введите описание изображения здесь

Дополнительно Вы можете безоговорочно использовать функции до 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, но при этом использовать новые функции, когда они доступны.

MadNik
источник
4

Другие ответы здесь тоже правильные, но я считаю, что следующие шаги являются самыми простыми:

Просто скачайте Xcode 4.6.3 по ссылке в центре разработки, где написано "Ищете старую версию Xcode?" (в настоящее время указывает здесь ) и смонтировать 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, и все готово.

nioq
источник
3

Мое приложение было без проблем переведено на Xcode 5, потому что оно все еще может собираться с оригинальной целью развертывания iOS, которую вы установили в проекте (5.1 в моем случае). Если новый SDK не вызывает непреодолимой проблемы, то почему бы не собрать его? Наверняка под капотом много улучшений.

Например, я предпочитаю использовать Xcode 5 вместо Xcode 4.6.3. Зачем? Я получу гораздо больше времени работы от батареи, потому что прокрутка пользовательского интерфейса областей текста / кода в Xcode 5 больше не жует весь поток ЦП.

Стивен Лу
источник
Причины нет - Xcode 5 довольно нестабилен в данный момент. Почасовые сбои для меня. Также некоторые странные позиционные проблемы и проблемы с цветом в некоторых представлениях (хотя не много работы, чтобы исправить)
Ник H247
2

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

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

[[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 для отладки.

Ортвин Генц
источник
1

Я скачал XCode 4 и взял iOS 6.1 SDK с него на XCode 5, как описано в других ответах. Затем я также установил iOS 6.1 Simulator (он был доступен в настройках). Я также переключил Base SDK на iOS 6.1 в настройках проекта.

После всех этих манипуляций проект с 6.1 base sdk запускается в режиме совместимости в iOS 7 Simulator.

OneSman7
источник
1

С 1 февраля Apple отклонит приложение, созданное только для iOS6 или ниже. Здесь также официальное сообщение от Apple. Лучше начать сборку для iOS7.

Чтобы уточнить мое утверждение: Если вы собираете iOS6 или ниже, Apple отклонит ваше приложение. Если вы собираете для iOS7 и ниже все в порядке, это означает:

  1. вы должны использовать xcode5
  2. Вы должны развернуть на iOS7 по крайней мере.

Содержание электронной почты Apple довольно ясно для меня

«Убедитесь, что ваши приложения бесперебойно работают с инновационными технологиями в iOS 7. Начиная с 1 февраля новые приложения и обновления приложений, представленные в App Store, должны быть собраны с помощью Xcode 5 и iOS 7 SDK».

Andrea
источник
Да, но iOS 6 SDK хорошо работает и с iOS 7. Некоторым приложениям очень тяжело переключаться.
Анируддх Джоши
Я считаю, что вы не правы. Apple требует (а) Создан на основе новейшего Xcode 5 и (б) оптимизирован для iOS 7. См. Мой комментарий к ответу Роба Напьера для ссылок.
Василий Бурк
Некоторые из нас разрабатывают для корпоративного распространения и должны ориентироваться на старые SDK (и устройства). Корпоративные приложения не проходят процесс Apple Review и / или App Store, и это обсуждение весьма полезно, остается актуальным и будет актуальным в будущем. Я понимаю вашу точку зрения, но она не единственная.
Кевин Омара
Вы совершенно правы !!! Я не думал о распределении предприятия. Но не забывайте, что вы все равно можете развернуть на iOS6 с новым Xcode, просто установив цель развертывания, не заботясь об оптимизации ios7 и процессе проверки.
Андреа
0

В настоящее время у меня установлены 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
Wayne
источник
Обратите внимание, что обновление до 5.1 удалило мой 7.0.x SDK и заменило его на 7.1 SDK. У меня есть старая установка, из Xcode5-DP6которой я смог восстановить 7.0.x, но это хорошее напоминание для резервного копирования каталогов SDK (или полного переименования приложения) перед обновлением или установкой последней версии XCode.
Уэйн