Varias formas de agregar Framework "dinámico" a proyectos Xcode
Cómo agregar una biblioteca dinámica (Dynamic Library) al proyecto Xcode.
En primer lugar, sabemos que para ".una biblioteca estática" y "marco estático", simplemente arrastre y suelte los archivos relevantes en el proyecto y marque la opción Copiar si es necesario, sin ninguna configuración adicional;
En cuanto a agregar un "marco dinámico", es un poco más problemático. Existen principalmente las siguientes formas.
PD: La "adición de biblioteca dinámica" de la que estamos hablando aquí se refiere a la biblioteca dinámica de terceros, no a la biblioteca dinámica que viene con el sistema, como UIKit.framework, Foundation.framework o libc. Para sus dependencias, agregar. Es muy simple, simplemente haga clic en el signo más en General -gt Marcos y bibliotecas vinculados para buscar y agregar.
Seleccione el destino correspondiente a la aplicación en el proyecto Xcode, luego haga clic en el signo más debajo de General -gt; Binarios integrados, como se muestra en la Figura 1, seleccione Agregar otro... en la ventana emergente y finalmente seleccione lo que desee en Finder. Agregue el "marco dinámico" y marque Copiar si es necesario. Cabe señalar que no puede arrastrar archivos .framework directamente a Embedded Binaries en Finder; de lo contrario, se informará un error.
Para obtener más detalles sobre cómo agregar manualmente bibliotecas dinámicas y soluciones a los problemas encontrados, consulte el tutorial oficial de Apple: "Incrustar marcos en una aplicación"
Pero ! Este método parece muy conveniente, pero de hecho tiene un problema: como mencionamos en nuestro episodio anterior, los archivos binarios generalmente dinámicos contendrán muchas arquitecturas de procesador, como: i386, x86_64, armv7, armv7s, arm64, etc., y luego Xcode. se compilará Al vincular, los archivos binarios dinámicos se copian directamente al paquete .ipa y la arquitectura no utilizada no se filtrará como vincular bibliotecas estáticas, y Apple no permite que se carguen paquetes que contengan arquitecturas de simulador como i386, x86_64, etc. a la aplicación en el backend de Store Connect, se informará un error. Por lo tanto, cuando creamos el paquete de lanzamiento oficial, a menudo necesitamos eliminar manualmente estas arquitecturas no válidas mediante el comando lipo o escribiendo scripts. (A menos que su proyecto de desarrollo solo esté depurado en una máquina real y no esté diseñado para ejecutarse en el simulador, y la biblioteca dinámica agregada no incluya i386 o x86_64)
Para bibliotecas de terceros integradas a través de Carthage , Después de agregar dependencias en el archivo Cartfile y luego ejecutar el comando de actualización de carthage, nos ayudará a generar "marcos dinámicos" uno por uno, como AFNetworking.framework, SDWebImage.framework, etc., y luego arrastrarlos a General -gt en el proyecto; marcos y bibliotecas vinculados, y luego configurar los scripts y comandos de copia relevantes. Para obtener más información, consulte el tutorial de inicio rápido de Carthage.
Una operación clave aquí es agregar un script de ejecución (Nueva fase de script de ejecución) a las fases de compilación del proyecto Xcode y ejecutar los siguientes comandos en el script:
Como se muestra en la figura 2 muestra:
La función de este comando probablemente sea ayudarnos a eliminar i386 y x86_64 automáticamente al empaquetar y copiar la biblioteca dinámica.
De manera similar, al integrar bibliotecas dinámicas a través de CocoaPods, se agregará automáticamente un script de Shell al proyecto para que podamos hacer esto, como [CP] Embed Pods Frameworks en la Figura 3,
p>
Puede comprobar el contenido del script Pods-xxx-frameworks.sh usted mismo. Hay una función strip_invalid_archs() en él, que se utiliza para eliminar arquitecturas de procesador inútiles durante el empaquetado, como. como se muestra en la Figura 4:
Por lo tanto, podemos integrar el marco dinámico desarrollado por nosotros mismos o proporcionado por otros en el proyecto a través de CocoaPods: cree una biblioteca git privada de Pods (creo que ya tiene Ya estoy muy familiarizado), agregue el archivo .frameworks dinámico relevante en la biblioteca git y luego escriba aproximadamente el archivo Podspec como se muestra en la Figura 5, y finalmente instale el pod en su proyecto.
Finalmente, pensamos en una pregunta: parece no haber diferencia en el uso entre "marco estático" y "marco dinámico", y agregar un "marco dinámico" a un El proyecto es más engorroso, entonces, ¿bajo qué circunstancias se utilizarán bibliotecas dinámicas en el desarrollo de iOS/macOS?