Переносим проект с 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 assistant


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

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

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

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



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


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

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

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

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


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



Использование результата в 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».
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 3

    +3
    Честно говоря, я ожидал погружения в пучину, думал, что увижу бездну, которая вглядывается в меня… Но тут перевод и закончился…
      +1
      Переходим с питона 2.7 на питон 3.6!!! Опять чуть заикой не стал.
        0
        HOWTO как громко звучит, а по сути: нажмите в меню такую-то кнопочку…
        Где хотя бы сказано, запустите сначала pod update, для обновления зависимостей? Мб где-то написано что в новом Podfile нужно указать какие-нибудь специальные параметры или что-то в этом духе?

        Вот вам мое HOWTO как заработать миллион денег: откладывайте с зарплаты по 1000 руб каждый месяц, через 1000 месяцев Вы станете миллионером!

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое