Устаревание совместимости с XCode? - PullRequest
0 голосов
/ 27 апреля 2018

Я провел несколько тестов с XCode 5.1, 6.4, 7.0 и различными версиями macOS и заметил, что он не совместим с ожидаемой версией, и это поведение нигде не задокументировано AFAIK.

XCode 5.1 совместим до OS X 10.11
XCode 6.4 совместим с MacOS 10.12
XCode 7.0 совместим до MacOS 10.13

Кажется, что Apple намеренно отключает XCode на более новых macOS для принудительного обновления, но я не вижу причины. Это не видно в списке XCode либо. Это означает, что у меня не будет фиксированного набора инструментов разработки, если я обновлю свою ОС, хотя я все еще могу запускать очень старые версии Visual Studio, например, на более новых версиях Windows.

Почему это так, и есть ли документация такого поведения?

1 Ответ

0 голосов
/ 27 апреля 2018

Apple и Microsoft придерживаются разных взглядов на совместимость с прямой и обратной совместимостью. Как правило, каждая основная версия среды Xcode Apple в последние годы была способна работать только на той ОС, с которой она была выпущена, и на одной или двух версиях macOS, которые следуют (например, как вы указали, Xcode 7). будет работать 10.13).

Вообще говоря, если вы собираетесь разрабатывать новые функции и функции для приложения macOS (или iOS), Apple рекомендует вам использовать последнюю версию SDK, а затем воспользоваться механизмом Xcode Deployment Target, а также некоторыми из инструменты для ОС и языка, такие как #available, которые помогут вам написать код, который будет работать как на новых, так и на более старых версиях ОС, с использованием одной и той же базы кода.

Вы можете соглашаться или не соглашаться с этой философией, но именно так Apple рассматривает их экосистему.

На практике, если вы продолжаете разрабатывать (или поддерживать) с использованием более старых SDK, полезно поддерживать среды сборки и тестирования, которые являются родными для более старых версий SDK. Это можно сделать на выделенном оборудовании или с помощью инструментов виртуализации. Однако во многих случаях можно перенести код на более новые версии инструментов, используя настройки Deployment Target, что позволяет вам поддерживать единую базу кода, которая сохраняет совместимость со старыми iOS / macOS, но также предоставляет вам новейшие инструменты и функции в новых версиях.

В нашем случае мы стараемся продвигаться вперед вместе с SDK платформы как можно быстрее. Для нашей работы с iOS это, как правило, означает обновление выпуска SDK с помощью новой iOS каждый год и, таким образом, обновление нашей цепочки компиляторов. Для нашего продукта macOS мы сохранили обратную совместимость со значительно более старыми версиями (поскольку принятие новых macOS, как правило, медленнее, чем новая iOS), что означает, что в настоящее время у нас есть среды разработки и тестирования для Xcode 7.x и Xcode 9.x , Из-за определенных изменений в таймфрейме Xcode 7-Xcode 8 (связанных с QuickTime) мы не можем использовать только Deployment Target для поддержания нашей самой старой совместимости без старого Xcode. В ближайшем будущем мы примем решение отказаться от поддержки старых версий MacOS и перейдем к использованию нашего Xcode 9-only в качестве основы.

...