Ошибка при архивировании реагирует на собственное приложение в Xcode - несколько команд выдают libyoga.a

Я получаю сообщение об ошибке, когда пытаюсь заархивировать свое собственное родное приложение, используя конфигурацию выпуска в Xcode - Target 'yoga' (libyoga.a)

error: Multiple commands produce '/Users/mat/Library/Developer/Xcode/DerivedData/ListadoV1-ghytgthpajfllcakinpdoknnalbr/Build/Intermediates.noindex/ArchiveIntermediates/ListadoV1/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/libyoga.a':
1) Target 'yoga' has a command with output '/Users/mat/Library/Developer/Xcode/DerivedData/ListadoV1-ghytgthpajfllcakinpdoknnalbr/Build/Intermediates.noindex/ArchiveIntermediates/ListadoV1/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/libyoga.a'
2) Target 'yoga' has a command with output '/Users/mat/Library/Developer/Xcode/DerivedData/ListadoV1-ghytgthpajfllcakinpdoknnalbr/Build/Intermediates.noindex/ArchiveIntermediates/ListadoV1/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/libyoga.a'

Как решить эту проблему в новой системе сборки?

Ответ 1

[Обновление 20190926: Если вы реагируете на нативную версию 0. 60+, которая является нативной для Cocoapods, такого рода вещи никогда не должны происходить, и обходной путь, который я разместил ниже, не должен быть необходимым]


Если я могу сделать некоторые предположения, вы используете реагирующую нативу (на которую ссылается libyoga), вы используете новую систему сборки из XCode 10+ (не унаследованную систему) и у вас есть встроенные CocoaPods (вероятно, использующие Firebase или аналогичные).

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

У вас есть три варианта в порядке возрастания усилий и правильности.

Во-первых, вы можете двигаться в этот момент без особых усилий, просто игнорируя/скрывая проблему, переключая свою сборку на Legacy Build System [1]:

1. In Xcode, go to File->Project/Workspace settings.
2. Change the build system to Legacy Build system.

Во-вторых, вы можете приступить к работе с новой системой сборки XCode без особых усилий, если добавите обходной фрагмент [2] в свой Podfile, пока проблема не будет устранена в восходящем потоке в реагирующем или Cocoapods. Я делаю это сейчас, и мой проект успешно архивирует:

 post_install do |installer|
    installer.pods_project.targets.each do |target|

      # The following is needed to ensure the "archive" step works in XCode.
      # It removes React & Yoga from the Pods project, as it is already included in the main project.
      # Without this, you'd see errors when you archive like:
      # "Multiple commands produce ... libReact.a"
      # "Multiple commands produce ... libyoga.a"

      targets_to_ignore = %w(React yoga)

      if targets_to_ignore.include? target.name
        target.remove_from_project
      end

    end
  end

(тогда, как указывает @jules-randolph, вы должны запустить pod install в папке iOS, чтобы начать использовать сделанные вами подфайлы)

В-третьих, вы можете выполнить всю работу, чтобы полностью преобразовать ваш проект в Pods, удалив любые оставшиеся ссылки на реагирующие нативные фреймворки в вашем проекте (в отличие от рабочего пространства, настроенного Pods). [3]. Я еще этого не сделал, но это правильно, и проблема с добычей закрыта.

Ссылки, и обратите внимание на родительский вопрос в целом полезно

[1] https://github.com/facebook/react-native/issues/20492#issuecomment-422958184

[2] https://github.com/facebook/react-native/issues/20492#issuecomment-409599358

[3] https://github.com/facebook/react-native/issues/20492#issuecomment-464343895