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 в качестве основы.