Как правильно обновить версию swift в проекте Xcode / Cocoapods? - PullRequest
1 голос
/ 14 апреля 2019

У меня есть проект Xcode с cocoapods (RealmSwift), который был написан в Swift 4.2.

С тех пор я обновил Xcode до 10.2, и теперь мне предлагается преобразовать мой код (и код RealmSwift) в Swift 5, и генерируется множество предупреждений для Realm Swift (т. Е. Модификатор public является избыточным для метод экземпляра объявлен в публичном расширении).

Как правильно обновить код Cocoapods? Нужно ли указывать / обновлять до более новой версии RealmSwift (и откуда мне знать, что она совместима с Swift 5?), Или есть рекомендуемый способ подавления предупреждений, если я не хочу обновляться до Swift 5?

Будем благодарны за любые ссылки на некоторую документацию о наилучшем способе обработки обновлений xcode / swift / cocoapods.

1 Ответ

5 голосов
/ 14 апреля 2019

При обновлении версии XCode вы должны быть просто уверены, что не окажетесь в ситуации, когда вы больше не можете работать.

Вместо обновления XCode вы можете просто установить две версии XCode на одном и том же Mac и использовать обе версии, опробовав новую версию.

На данный момент вы можете вернуться к своему предыдущему Xcode , загрузив предыдущую версию здесь https://developer.apple.com/download/more,, распаковать архив, который вы скачаете, и скопировать файл приложения в папку «Приложения» в macOS.

То, что я бы предложил в качестве решения, прежде чем начать все обновление, поскольку вы не знаете, как все новые обновления модуля будут работать с вашей реализацией кода, это удалить Xcode 10.2 и вернуться к установке 10.1 или 10.0 (можно скачайте их по предыдущей ссылке).

В дальнейшем, когда ваш проект работает нормально и стабильно и вы хотите попробовать обновить все (Xcode, Swift и POD), вы должны прежде всего проверить, собирается ли ваш проект с вашим текущую версию Swift (версию Swift для вашего проекта в настоящий момент вы можете найти в Target> Build Settings> Swift Language Version).

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

Когда ваши проекты собираются без ошибок и вы хотите перейти на новую версию Swift

  • Изучите последнюю версию ваших POD и какую версию Swift они поддерживают (зайдите на страницы проекта github или в cocoapods)
  • Попробуйте обновить только свой проект без обновления ваших POD , если это сработает, вы собираетесь обновить и ваши POD позже, чтобы убедиться, что ваши PODы остаются с текущей версией Swift, которая работает для вас ( скажем, сейчас Swift 3.2 например ) вы добавляете этот фрагмент в свой Podfile:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          config.build_settings['SWIFT_VERSION'] = '3.2'
        end
      end
    end
    
  • Чтобы преобразовать только ваш проект в более новую версию Swift , перейдите к Edit -> Convert -> Convert to current swift syntax Появится всплывающее окно со списком целей, включая модули. Отмените выбор всего, кроме цели проекта, юнит-тестов и тестов пользовательского интерфейса, и нажмите конвертировать. Подождите, пока проект создаст и сгенерирует предварительный просмотр и примените изменения. Исправьте все проблемы и предупреждения, созданные в соответствии с требованиями новой версии Swift.

  • Чтобы обновить все POD, которые поддерживают новую версию Swift вы обновили свой проект, сделайте это, используя правильную версию POD для каждого POD, который поддерживает более новую версию Swift, и для тот, который еще не поддерживает более новую версию Swift, вы можете заменить фрагмент кода в Podfile этим

    post_install do |installer|
        installer.pods_project.targets.each do |target|
            if ['UnsupportedPod1', 'RxSwift', 'RxCocoa'].include? target.name
                target.build_configurations.each do |config|
                    config.build_settings['SWIFT_VERSION'] = '3.2'
                end
            end
        end
    end
    
...