fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Css-fhxb3m display-webkit-box; display-webkit-flex; display-ms-flexbox; display: flex-webkit-flex-direction: row-ms-flex-direction: row; flex-direction: row-webkit-align-items: center-webkit-box-align: center-ms-flex-align: center; align-items: center;. css-vlnsew width: 2.5rem; height: 2.5rem; margin-right: 0.5rem; overflow: hidden; border-radius: 9999px; Swifty Tech by Marco Eidinger

Почему ваша версия Xcode все еще имеет значение с помощью Module Stability

В этой статье блога вы узнаете о Module Stability в Swift и распространенном заблуждении о его совместимости со старыми версиями Xcode:

Вы узнаете, как справиться со следующей ошибкой при попытке использовать бинарный фреймворк ( .xcframework ).

Вы слышали о Module Stability в Swift и обещании совместимости с разными версиями компилятора. Вы думаете, что производитель бинарного фреймворка допустил ошибку, и готовы связаться с ним.

Остановка. Ошибка здесь в том, что вы не можете использовать бинарный фреймворк в приложении, которое использует более старый компилятор (Swift 5.6.1 == Xcode 13.4), чем тот, который использовался для генерации бинарного фреймворка (Swift 5.7 == Xcode 14).

Поставщик бинарного фреймворка должен был задокументировать это:

  • Какую минимальную версию ОС поддерживает библиотека?
  • Какую минимальную версию Xcode поддерживает библиотека?

Давайте сделаем шаг назад и проверим, что именно обещает Module Stability.

Отличными источниками о Module Stability являются

    статья Донни Уола на сессии Swift.org WWDC 2019
  • Стабильность модулей позволяет использовать модули Swift, созданные с разными версиями компилятора, вместе в одном приложении.
  • Поддержка эволюции библиотеки позволяет разработчикам бинарных фреймворков вносить аддитивные изменения в API своего фреймворка, сохраняя бинарную совместимость с предыдущими версиями.

Бинарные фреймворки, построенные с помощью Module Stability, имеют Swift Module Interfaces – текстовое определение API своего фреймворка в составе генерируемых файлов .swiftinterface и .swiftmodule.

А поскольку они ведут себя как исходный код, будущие версии компилятора Swift смогут импортировать интерфейсы модулей, созданные в старых версиях.

Интерфейсы модулей не имеют обратной совместимости, они совместимы только вперед.

Интерфейсы модулей, созданные в данной версии компилятора Swift, гарантированно будут импортированы любым будущим компилятором Swift, поддерживающим верси ю-swift-, в которой они были скомпилированы.

Это происходит потому, что код @inlinable в файле .swiftinterface может использовать новый синтаксис, неизвестный старым компиляторам. [Источник].

Я также нашел интересное объяснение в этом замечательном ответе на форуме разработчиков Apple, которое объясняет относительные понятия обратной и прямой совместимости.

  • Новый компилятор обратно совместим с текстовым интерфейсом двоичного файла, скомпилированного старым компилятором.
  • Текстовый интерфейс старого двоичного файла совместим с новыми компиляторами Swift.
  • Старый компилятор совместим в прямом направлении с текстовым интерфейсом двоичного файла, скомпилированного более новым компилятором.
  • Текстовый интерфейс бинарного файла, созданного более новым компилятором, обратно совместим со старыми компиляторами Swift.

Кстати: если вы хотите узнать, какая версия Swift используется в той или иной версии Xcode, вы можете использовать следующий сайт в качестве справочника:

Вы нашли эту статью полезной?

Поддержите Марко Айдингера, став спонсором. Любая сумма будет оценена по достоинству!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *