objective-c xcode static-libraries cocoapods

objective c - Construyendo una biblioteca estática distribuible que usa cocoápodos.



objective-c xcode (2)

Aquí se explica cómo resolver problemas de espacio de nombres, como se describe en su Nota : Biblioteca estática de iOS + CocoaPods y el error de símbolos duplicados

Estoy creando una biblioteca estática para distribuirla a otros desarrolladores de iOS y tengo algunos problemas para configurar el enlazador para permitir que la biblioteca estática se use en otra aplicación. He usado esta guía para crear un paquete MyStaticLibrary.framework que contiene la propia biblioteca y otros recursos, como imágenes. Esto se construye con éxito y utiliza cocoapods para obtener las dependencias necesarias (AFNetworking, etc.). Hasta ahora tan bueno.

Pero al importar MyStaticLibrary.framework en un nuevo proyecto de Xcode para probar la creación de una aplicación con la biblioteca, recibo muchos errores de vinculador (símbolos no definidos para la arquitectura i386, _OBJC_CLASS _ $ _ CLASSNAME) que indican que estoy haciendo algo muy mal aquí.

Entonces, mi pregunta es, ¿cómo puedo crear MyStaticLibrary.framework con las dependencias provenientes de cocoapods, de modo que pueda proporcionar a un tercero solo mi archivo de marco y permitirles acceder a todas las funciones especificadas en los encabezados públicos?


Las bibliotecas que incluya que utilicen CocoaPods no se compilarán en su marco de forma predeterminada, están destinadas a ser dependencias externas que no forman parte de su producto real. Sin embargo, de acuerdo con sus Preguntas frecuentes, admiten un modo en el que puedes descargar pods y no tenerlos vinculados a tu proyecto. De sus preguntas frecuentes:

Tenga en cuenta que CocoaPods no requiere el uso de un espacio de trabajo. Si prefiere utilizar subproyectos, puede hacerlo ejecutando pod install --no-integra, lo que le dejará la integración en su proyecto según su conveniencia.

Para incluir dependencias externas en su binario compilado:

  • Para el código: en lugar de usar cocoapods, revise los repositorios que desea incluir y copie los archivos de origen en su proyecto, esto asegurará que se compilen con el resto de su código

  • Para las bibliotecas estáticas (es decir, archivos .a ), en la fase de compilación de Link Binary With Libraries su marco, asegúrese de incluir todas las que desea compilar. También debe asegurarse de que los archivos de encabezado asociados estén incluidos en la fase de compilación Copy Headers , con la visibilidad adecuada.

Nota Al agrupar bibliotecas de terceros de esta manera, corre el riesgo de entrar en conflicto con los proyectos que están integrando su marco. Por ejemplo, digamos que está utilizando una SOSomeView llamada SOSomeView , y elige compilarla con su marco. Ahora, si la aplicación con la que se está integrando también incluye SOSomeView , obtendrá un error en tiempo de compilación al declarar la clase dos veces. Para solucionar este problema, debe volver a nombrar las dependencias externas que desee codificar en su marco (es decir, cambiar el nombre de la clase a XXSOSomeView ).

No sé cómo resolver ese problema si está compilando bibliotecas estáticas con su marco.