Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

614
Visualizações
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
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda