Después de actualizar Xcode a 12.5 e iOS a 14.5, no puedo ejecutar la aplicación de iOS en un dispositivo real ni en el simulador.
Después de ejecutar npm run ios , recibo este mensaje:
The following build commands failed: CompileC .../Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Flipper-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/guilherme/Documents/Dood/ios/Pods/Flipper-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compilerSi trato de ejecutar la aplicación en un dispositivo real usando Xcode, este es el error que obtengo (relacionado con Flipper-Folly):
.../ios/Pods/Headers/Private/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: 'atomic_notify_one<unsigned long>' is unavailable¿Ideas? ¡Gracias!
ACTUALIZAR:
React native se ha actualizado a 0.64.1. Ahora puede simplemente cambiar su dependencia de reacción nativa a esta versión dentro de su archivo package.json, luego ejecute npm install
simplemente comente la línea de flipper en un pod y en Xcode también si no lo está usando, espero que esto se solucione en futuras actualizaciones.
# Note that if you have use_frameworks! enabled, Flipper will not work and # you should disable the next line. # use_flipper!({ 'Flipper' => '0.79.1'}) # post_install do |installer| # react_native_post_install(installer) # endIN Xcode comenta todas las variables de importación y flipper
Solución sin perder la funcionalidad Flipper:
Defina las dependencias actualizadas para Flipper en el Podfile
def add_flipper_pods!(versions = {}) versions['Flipper'] ||= '~> 0.87.0' 👈 versions['DoubleConversion'] ||= '1.1.7' versions['Flipper-Folly'] ||= '~> 2.5.3' 👈 versions['Flipper-Glog'] ||= '0.3.6' versions['Flipper-PeerTalk'] ||= '~> 0.0.4' versions['Flipper-RSocket'] ||= '~> 1.3.1' 👈 # Enables Flipper. # # Note that if you have use_frameworks! enabled, Flipper will not work and # you should disable these next few lines. use_flipper!({'Flipper' => '0.87.0' 👈, 'Flipper-Folly' => '2.5.3' 👈, 'Flipper-RSocket' => '1.3.1' 👈}) post_install do |installer| flipper_post_install(installer) end cd ios && pod install y debería estar listo para comenzar
Sube la versión a 0.64.1 en el package.json
yarn install && pod install --repo-update && react-native run-ios
https://github.com/facebook/react-native/releases/tag/v0.64.1
Se ha lanzado React native 0.64.1 y resolverá esto. Simplemente actualice el número de versión en package.json.
"react-native": "0.64.1",
No es necesario modificar el Podfile si hace esto
Actualice para reaccionar nativo 0.64.1 (o superior)
si pasó de 0.63.x a 0.64.x, asegúrese de que en su Podfile haya actualizado use_flipper! post instalación de la sección:
Antes:
post_install do |installer| flipper_post_install(installer) endDespués:
post_install do |installer| react_native_post_install(installer) endejecute ' npx react-native-clean-project ' desde la raíz del proyecto y luego desde dentro de la carpeta ' ./ios ' ejecute ' pod install --repo-update ' y luego ejecute 'pod update'
use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })eso funciona, ;)
Sé que esto ya está respondido, pero para aquellos que encuentren este hilo en el futuro, hay un enlace oficial que aborda este problema:
Guía de resolución de problemas de Xcode 12.5 (RN 0.61/0.62/0.63/0.64)
Hay un problema de RN abierto aquí: https://github.com/facebook/react-native/issues/31179
Para mí, comentar Flipper en Podfile , pod install y rebuild funcionó como una solución temporal.
# Enables Flipper. # # Note that if you have use_frameworks! enabled, Flipper will not work and # you should disable these next few lines. # use_flipper! # post_install do |installer| # flipper_post_install(installer) # endHay una solución que encontré aquí .
Agregue esto a su post_install en su Podfile:
post_install do |installer| flipper_post_install(installer) ## Fix for Flipper-Folly on iOS 14.5 find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h", "atomic_notify_one(state)", "folly::atomic_notify_one(state)") find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h", "atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)") end También deberá agregar la función def para esta función buscar y find_and_replace (puede colocar esta función en cualquier lugar del archivo pod):
def find_and_replace(dir, findstr, replacestr) Dir[dir].each do |name| text = File.read(name) replace = text.gsub(findstr,replacestr) if text != replace puts "Fix: " + name File.open(name, "w") { |file| file.puts replace } STDOUT.flush end end Dir[dir + '*/'].each(&method(:find_and_replace)) end Ejecute pod install nuevamente y debería funcionar. Si obtiene un error relacionado con los permisos al acceder al archivo DistributedMutex-inl.h, elimine su carpeta /pods y vuelva a ejecutar pod install
Debería ver el texto impreso que dice Fix: Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h, etc. Si no lo ve, vuelva a verificar la ruta en la llamada find_and_replace.