[Из песочницы] Переносим проект с Swift 4.2 на Swift 5.0

Привет, Хабр! Представляю вашему вниманию перевод статьи «Swift 5.0: How to migrate your project and frameworks» автора Antoine Van Der Lee.

Swift 5.0 был выпущен в марте 2019 года и является первым стабильным выпуском ABI Swift. Несмотря на то, что многие ресурсы освещают новые возможности Swift 5.0, они не часто рассказывают вам о том, что вам нужно сделать, чтобы обновить свой проект до Swift 5.0.

В этом посте я рассмотрю шаги, которые вы можете предпринять, чтобы обновить существующий проект до Swift 5.0.

Проверьте, что ваш проект уже перенесен в Swift 4.2.

Не удивлюсь, если эта статья поможет убедить вашего продакт-менеджера спланировать время для перехода.

Автоматический перенос с использованием migrant assisntant


Xcode предлагает использовать «помощника по переносу» для автоматического обновления вашего кода до текущего синтаксиса Swift. Это преобразование будет использовать последнюю версию Swift, доступную с установленной версией Xcode.

Xcode 10.2 является первой версией, включающей Swift 5.0, поэтому необходимо использовать эту версию ПО.

Зачастую данная функция делает тяжелую работу за вас. Поэтому я рекомендую начать перенос кода, перейдя в Edit → Convert → To Current Swift Syntax…

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

jis-kdevmu7hafozgy9mp3h4io0.png

Обновление зависимостей


Cкорее всего, у вас есть некоторые зависимости Swift, которые нужно обновить. Многие крупные проекты с открытым исходным кодом, такие как Alamofire и Moya, уже начали работать c версией Swift 5.0.

Однако, вероятно, что не все ваши зависимости уже обновлены. Хотя я и хотел бы призвать вас выполнить перенос, а потом подать pull request самостоятельно, вам, вероятно, придется немного подождать, пока владельцы проекта не сделают это сами.

Если вы планируете провести полный интенсивный тест своего приложения после этого переноса, возможно, стоит также напрямую обновить ваши зависимости. Ваш тест будет охватывать эти обновления напрямую, что может послужить «двойным выигрышем».

Обновление среды CI


Если вы используете Travis, Jenkins или любую другую CI-платформу, вам также необходимо обновить Xcode.

jqpincyeqqxb3-4bxavqozkzzv0.png

Использование результата в Swift


Конвертер Xcode выполняет только базовые изменения кода. Он не учитывает новый тип «Result», который теперь включен в стандартную библиотеку Swift. Многие фреймворки включили тип «Result» в свой код. Это может означать, что у вас есть довольно много данных с перечисляемым типом (enum), которые больше не нужны. Однако, не спешите заменить их данными из ваших зависимостей: вы зависите от изменений кода во внешней структуре.

Общий тип ошибки

Вполне вероятно, что ваш текущий тип «Result» определил только тип для подходящего кейса.

«Result» в Swift 5.0 также требует от вас определить ожидаемый тип ошибки. Будучи добропорядочным гражданином, вы должны попытаться сделать этот тип ошибки конкретным, исходя из того, что вы ожидаете. Однако, если вы хотите ускорить перенос, вы также можете просто установить тип Swift.Error.

Совет: если вы хотите узнать больше о новом типе Result в Swift 5.0, я бы порекомендовал вам прочитать эту статью.

Учитываем стабильность ABI


На самом деле, стабильность ABI — это отдельная тема. Вы можете прочитать больше об этом в официальном блоге Swift.

Следует учитывать, что размер загружаемого вами приложения будет уменьшаться, поскольку приложениям больше не нужно встраивать стандартную библиотеку Swift!

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

Если вы хотите больше погрузиться в Swift 5.0, вы можете перейти к сообщению в блоге Apple «Migrating to Swift 5.0».

© Habrahabr.ru