Как поддерживать intel и arm в собственном проекте react

#ios #xcode #react-native #cocoapods

Вопрос:

Я работаю в команде, разрабатывающей собственное приложение для реагирования. В моей команде у некоторых разработчиков есть компьютеры Intel mac, а другие используют кремниевый вариант. Приложение находится только на начальной стадии, но из-за этих двух архитектур я ожидаю некоторых неудобств при обслуживании общей кодовой базы.

Я создал собственное приложение для реакции на голые кости на силиконовом Mac с npx react-native init Silicon помощью . С помощью этого я в настоящее время получаю версию react 17.0.1 и версию react-native 0.64.2. После некоторых сбоев я могу создать и запустить приложение-скелет на симуляторе.

Я изменил Podfile так, чтобы я прокомментировал Flipper и добавил цикл post_install для удаления IPHONEOS_DEPLOYMENT_TARGET из модулей, это, похоже, изначально устраняет большинство предупреждений и ошибок.

Подфайл:

 require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

platform :ios, '10.0'

target 'Silicon' do
  config = use_native_modules!

  use_react_native!(
    :path => config[:reactNativePath],
    # to enable hermes on iOS, change `false` to `true` and then install pods
    :hermes_enabled => false
  )

  target 'SiliconTests' do
    inherit! :complete
    # Pods for testing
  end

  # Enables Flipper.
  #
  # Note that if you have use_frameworks! enabled, Flipper will not work and
  # you should disable the next line.
  # use_flipper!()

  post_install do |installer|
    react_native_post_install(installer)
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      end
    end
  end
end
 

Затем я запустил pod install в ios папку-и после этого смог создать и запустить приложение на симуляторе.

После этого я отправил код в git и вытащил его на intel mac. Запустился npm install и pod install внутри папки ios.

Глядя на разницу, я заметил, что установка модуля изменила EXCLUDED_ARCHS[sdk=iphonesimulator*] значение "arm64 " -на, чтобы иметь возможность использовать intel. Похоже, это происходит из node_modules/react-native/scripts/react_native_pods.rb -за того, что exclude_architectures функция изменяет исключенные арки на основе архитектуры, которую она обнаруживает.

Итак, мне интересно, есть ли способ (этап сборки?) Создать «универсальную» настройку EXCLUDED_ARCHS , которая будет работать для обеих архитектур? В настоящее время всякий раз, когда кто-то запускается pod install , EXCLUDED_ARCHS конфигурации сборки обновляются в соответствии с их архитектурой. Будут ли возможны отдельные конфигурации сборки, и как их можно «привязать» к правильной архитектуре, чтобы a pod install не записывал их?

Или это действительно проблема , если вы получите правильное значение для своей машины после pod install , а не только увидите изменение значения в системе управления версиями?