La transferencia de aplicaciones a Mac finalmente es posible gracias a Catalyst , el problema es que numerosos pods no admiten AppKit. El más común sería Crashlytics / Firebase.
In [...]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics(CLSInternalReport.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, file '[...]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics' for architecture x86_64
Dado que es un tema reciente, no pude encontrar un documento sobre cómo eliminar un pod de mi compilación para macOS, pero lo mantengo para iOS y iPadO S.
Es posible usar en código:
#if !targetEnvironment(macCatalyst)
// Code to exclude for your macOS app
#endif
Pero esa parte del problema, la otra parte, es vincular el pod solo para iOS ...
¿Cuál sería el mejor / más fácil curso de acción cuando la biblioteca no es vital para macOS pero aún se desea en iOS?
if target.name.start_with?("Pods")
para atrapar todos los objetivos de Pod.if [[ ${IS_MACCATALYST} != "YES" ]]; then "${PODS_ROOT}/Fabric/run" fi
Abra su archivo Pods- $ projectname.release.xcconfig en el directorio Pods de su proyecto y ubique la línea OTHER_LDFLAGS. Agregue
[sdk=iphone*]
inmediatamente después del nombre de la variable (como ejemplo, el mío ahora se ve así):Eso establece condicionalmente las opciones de enlace solo al crear variantes de iPhone, evitando que el pod se vincule en OSX. Por supuesto, como mencionas, esto debe combinarse
#if !targetEnvironment(macCatalyst)
y#endif
rodear el código que llama al pod o obtendrás errores de enlazador.Esto me permitió superar el mismo problema. (Y en caso de que se pregunte qué otras cosas interesantes además de las variables condicionales puede agregar a sus archivos .xcconfig, aquí hay una referencia que encontré: https://pewpewthespells.com/blog/xcconfig_guide.html )
fuente
pod install
. Recomendaría leer la respuesta de Fernando Moya de Rivas para la mejor alternativaCon cocoapods 1.8.4, tuve que adaptar la excelente respuesta de @ AncAinu de la siguiente manera:
fuente
[]
Tengo una solución actualizada que funciona para mí con los siguientes pods de Google:
fuente
ld: in /Users/<name>/source/<app>/Pods/Fabric/iOS/Fabric.framework/Fabric(Fabric.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, for architecture x86_64
uso exactamente lo que tienes arriba menos elGoogleMobileAds
yGoogle-Mobile-Ads-SDK
. ¿Por qué estoy recibiendo esto?Para el mejor enfoque de manejo de framweorks no compatibles para Catalyst, deberían leer la solución de Fernando Moya de Ri .
Básicamente dijo sólo tiene que definir una matriz de todas las librerías que no desea instalar en Mac OS X, como esto:
['Fabric', 'Crashlytics', 'Firebase/Core', ...]
.Entonces, su archivo pod puede verse simple como este:
fuente