Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

610
Views
Swift Package Manager (SPM) y conflicto de dependencia de Cocoapod

Visión de conjunto

Tengo dos dependencias, una disponible como paquete Swift y la otra solo disponible como Cocoapod. El problema es que cada uno tiene una dependencia de un tercer paquete, lo que da como resultado un comportamiento indefinido cuando existen varias versiones.

En un nivel básico, aquí hay un gráfico de mis dependencias.

 APP imports: B (SPM) imports: C (SPM) imports: D (SPM) <- E (Pod) imports: D (Pod) <-

Me gustaría eliminar la versión D (Pod) y apuntar a la versión D (SPM) , ya sea a través de un script de Podfile o un script de compilación.


Información más específica:

Tengo un paquete Swift de NetworkingService que importa Firebase y mi aplicación principal importa NetworkingService. Mi Podfile importa GoogleMLKit/PoseDetection . Firebase y PoseDetection comparten dependencias que dan como resultado un comportamiento indefinido (bloqueo del tiempo de ejecución) cuando hay un duplicado presente.

Nota: Este error debería poder reproducirse eliminando el paquete NetworkingService intermediario e importando Firebase a la aplicación principal como un paquete Swift.

Podfile

 platform :ios, '15.0' target 'MyApp' do use_frameworks! pod 'GoogleMLKit/PoseDetection', '2.5.0' end

En paquete.swift

 .package( name: "Firebase", url: "https://github.com/firebase/firebase-ios-sdk.git", .upToNextMajor(from: "8.10.0") ),

Duplican algunas dependencias, incluidas GoogleUtilities y FBLPromises . El inicio de la aplicación después de que la pod install falla con una excepción de tiempo de ejecución:

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FBLPromise HTTPBody]: unrecognized selector sent to instance 0x6000017685d0'

La búsqueda me llevó a este problema de GitHub donde un colaborador menciona:

Las advertencias duplicadas son indicativas de un comportamiento no determinista. Cuando hay múltiples copias de una biblioteca, se puede elegir o no la correcta.

Luego intenté refactorizar todas las dependencias de Cocoapod con una versión modificada de este script que encontré vinculado en otra publicación de StackOverflow. El intento fue hacer que PoseDetection apuntara explícitamente a símbolos de GoogleUtilitiesCopy y FBLPromisesCopy . Pero parece que incluso la existencia de estas copias, a pesar de señalar la dependencia correspondiente, creó un comportamiento indefinido.


Solución parcial

Si ejecuto pod install seguido de File > Packages > Update to latest package versions . La aplicación se iniciará sin un bloqueo de tiempo de ejecución inmediato. Sin embargo, encuentro otros bloqueos de tiempo de ejecución más adelante dentro de la aplicación.***


Solución ideal

Me gustaría eliminar las dependencias de pod duplicadas y apuntar a las versiones de SPM a través de Podfile o un script de fase de compilación, pero no estoy seguro de por dónde empezar.

Firebase se puede importar como un pod, pero no quiero hacerlo porque tengo una infraestructura SPM existente que depende de Firebase. Preferiría no convertir todos estos paquetes en pods.

over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!