xcode - Cocoapods-Flurry & TestFlight-Símbolos indefinidos para la arquitectura
linker-errors (3)
Estoy actualizando mi proyecto para usar Cocoapods y cuando intento crear mi proyecto para un dispositivo iOS o para un simulador, obtengo:
Undefined symbols for architecture armv7:
"_OBJC_CLASS_$_TestFlight", referenced from:
objc-class-ref in PhotoPreviewViewController.o
"_OBJC_CLASS_$_Flurry", referenced from:
objc-class-ref in MyAppDelegate.o
objc-class-ref in InitialSetupViewController.o
objc-class-ref in InitialDownloadViewController.o
objc-class-ref in HistoryViewController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
(con la arquitectura diferente por supuesto)
Debajo de "Vincular binario con bibliotecas", libPods.a
es negro, así que no creo que haya ningún problema allí. También está haciendo autocompletado para ambos, así que no estoy seguro de por qué no los encuentra en el momento de la compilación.
¿Alguna sugerencia?
Cocoapods, por alguna razón, no incluye libTestFlight.a
en el destino TestFlight. Por lo tanto, para solucionar este problema, cada vez que ejecute la pod install
, debe:
- Abra el destino
Pods-TestFlightSDK
en el proyectoPods.xcodeproj
- Abrir la pestaña
Build Phases
- Agregue (a través de "Agregar otro ...")
libTestFlight.a
paralibTestFlight.a
menú desplegableLink Binary With Libraries
libTestFlight.a
se puede encontrar en su [$SRCROOT]/Pods/TestFlightsSDK
.
¡Haz lo mismo con Flurry y listo!
Actualización del 1 de mayo de 2014
Parece que "falta la integración de la biblioteca" es un síntoma del uso del indicador --no-integrate
(por ejemplo, pod install --no-integrate
).
Y para hacer la vida más fácil, he escrito un script para agregar las bibliotecas automáticamente después de ejecutar el pod (update|install) --no-integrate
Ajuste según sea necesario y agregue esto a la parte inferior de su Podfile
:
# Use post_install to automatically include required libraries
post_install do |installer_representation|
installer_representation.project.targets.each do |target|
if target.name == ''Pods-TestFlightSDK''
libFile = installer_representation.project.new_file(''TestFlightSDK/libTestFlight.a'')
end
if target.name == ''Pods-Brightcove-Player-SDK''
libFile = installer_representation.project.new_file(''Brightcove-Player-SDK/Library/libBCOVPlayerSDK.a'')
end
unless libFile.nil?
puts " - Adding %s to %s Frameworks Build Phases" % [libFile, target.name]
target.frameworks_build_phase.add_file_reference(libFile)
end
end
end
He encontrado que pueden haber varias razones de este problema:
- libPod.a no se incluye en "enlace binario con bibliotecas" (intente eliminar la referencia y agregar nuevamente)
- El compilador no puede encontrar la biblioteca. Comportamiento extraño, intente escribir la ruta a las bibliotecas usando $ {PODS_ROOT} en la "ruta de búsqueda de la biblioteca". ($ (PODS_ROOT) / TestFlightSDK por ejemplo)
- El compilador no puede encontrar el encabezado. intente escribir la ruta a los encabezados utilizando $ {PODS_ROOT} en "Ruta de búsqueda de encabezados".
Espero que esto sea de ayuda.
Lo siguiente me funcionó:
En la Configuración de compilación, no invalide "Otros indicadores de vinculador". Si está en negrita, selecciónelo y presione la tecla de retroceso, debería volver a su estado normal. Si no está arreglado, elimine todas las banderas, elimine y vuelva a instalar Pods y eso debería solucionarlo.