Недавно обновив свои проекты до Swift 4, вот краткое руководство в надежде помочь кому-то сэкономить время.
Предварительные условия
Быстрый проект 3, компиляция и компоновка без проблем.
Как это работает
Сначала мы обновим проект до Swift 4 без обновления модулей, как только это сработает, мы также обновим модули, если это возможно.
Шаг 1. Обновите подфайл.
Добавьте следующий фрагмент в свой Podfile и запустите pod install
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 3.2.
Шаг 2. Преобразуйте проект.
Нажмите Изменить - ›Преобразовать -› Преобразовать в текущий синтаксис Swift.
Появится всплывающее окно со списком целей, включая модули.
Снимите выделение со всего, кроме цели проекта, модульных тестов и тестов пользовательского интерфейса, и нажмите "Преобразовать".
Подождите, пока проект построит, сгенерирует предварительный просмотр и применит перемены.
Исправьте все проблемы и предупреждения, связанные с новыми требованиями Swift 4. Если у вас есть сомнения, я предлагаю вам прочитать Руководство по миграции (или StackOverflow 😎).
Шаг 3. Обновите модули
Это самая сложная часть, вам нужно проверить, какие модули уже преобразованы в Swift 4, а какие все еще используют старый Swift 3.
Перед тем как начать, сделайте git-коммит, чтобы вы могли легко вернуться назад, если что-то не сработает. 😳
Сначала удалите фрагмент кода, добавленный на шаге 1 в Podfile, а затем запустите pod update.
Если вам повезет, все ваши модули уже доступны в Swift 4, и проект должен быть скомпилирован и готов к работе.
Если при сборке проекта некоторые поды не компилируются, перейдите на страницу подов на github и проверьте, преобразован ли он в swift 4.
Если он уже был преобразован, щелкните свой проект подов, выберите цель, которая не может быть скомпилирована. , перейдите в настройки сборки и убедитесь, что для Swift Language Version установлено значение Swift 4.
Делайте это до тех пор, пока проект не будет собран, и в конце у вас может быть несколько модулей, скомпилированных для Swift 4, а другие - для Swift 3.2.
Чтобы избежать необходимости изменять настройки сборки каждый раз при запуске модуля , вы можете добавить этот фрагмент в свой подфайл:
post_install do |installer| installer.pods_project.targets.each do |target| if ['Kingfisher', 'RxSwift', 'RxCocoa'].include? target.name target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '3.2' end end end end
Где вы можете указать, для каких модулей Swift Version будет установлена на 3.2 (в этом примере Kingfisher, RxSwift и RxCocoa.
Теперь все готово, но у вас могут быть другие проблемы в зависимости от того, какие модули вы используете, и многих других переменных.
Надеюсь, это поможет ✌️