es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de compilación al usar use_frameworks! en react-native

Estoy desarrollando una aplicación utilizando React-native 0.59.1. Pero tengo un problema, no puedo enlazar una biblioteca estática. En el archivo “Podfile” estoy instalando tanto los frameworks como la biblioteca utilizando Cocoapods.
Xcode lanzará un error si la biblioteca no está enlazada cuando el “Podfile” contiene la palabra clave “use_framework!”, pero tendrá éxito si elimino esta palabra clave.
¿Puedes ayudarme a solucionarlo?

platform:ios, '10.0'

target 'Test_RN_0_59_1' do
  #Comenta la siguiente línea si no deseas utilizar frameworks dinámicos
  use_frameworks!

  rn_path = '../node_modules/react-native'

  pod 'yoga', path: "#{rn_path}/ReactCommon/yoga/yoga.podspec"
  pod 'DoubleConversion', :podspec => "#{rn_path}/third-party-podspecs/DoubleConversion.podspec"
  pod 'Folly', :podspec => "#{rn_path}/third-party-podspecs/Folly.podspec"
  pod 'glog', :podspec => "#{rn_path}/third-party-podspecs/GLog.podspec"
  pod 'React', path: rn_path, subspecs: [
    'Core',
    'CxxBridge',
    'RCTAnimation',
    'RCTActionSheet',
    'RCTImage',
    'RCTLinkingIOS',
    'RCTNetwork',
    'RCTSettings',
    'RCTText',
    'RCTVibration',
    'RCTWebSocket',
    'RCTPushNotification',
    'RCTCameraRoll',
    'RCTSettings',
    'RCTBlob',
    'RCTGeolocation',
    'DevSupport'
  ]

  pod 'rn-juicy-score', :path => '../node_modules/rn-juicy-score'
end

Capture

Tags:  ,

Answer

  1. Avatar for davy.ai

    Cuando se utiliza use_frameworks! en el archivo Podfile, Xcode espera que se enlace un marco dinámico. Sin embargo, al intentar enlazar una biblioteca estática, Xcode arroja un error.

    Para solucionar este problema, es necesario modificar el Podfile añadiendo un script post-install que copie la biblioteca estática al directorio de marcos de la aplicación. Puede hacer esto añadiendo el siguiente código a su Podfile, debajo de las declaraciones de las dependencias:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        if target.name == 'YourStaticLibrary'
          target.build_configurations.each do |config|
            config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
          end
          target.build_configurations.each do |config|
            config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
          end
          target.build_configurations.each do |config|
            config.build_settings['MACH_O_TYPE'] = 'staticlib'
          end
          build_dir = config.build_settings['CONFIGURATION_BUILD_DIR']
          FileUtils.cp_r("#{build_dir}/YourStaticLibrary.a", './ios')
        end
      end
    end
    

    Reemplace YourStaticLibrary con el nombre de su biblioteca estática.

    Este script post-install copiará la biblioteca estática al directorio ios de su proyecto, que es donde Xcode busca los marcos de terceros.

    Después de añadir este script, ejecute pod install nuevamente para actualizar su proyecto con los cambios realizados en el Podfile.

    Con esta modificación, Xcode debería poder encontrar y enlazar su biblioteca estática con éxito.

Comments are closed.