Red de conocimiento informático - Problemas con los teléfonos móviles - Algunas formas de agregar marcos "dinámicos" a su proyecto Xcode.

Algunas formas de agregar marcos "dinámicos" a su proyecto Xcode.

Cómo agregar bibliotecas dinámicas a proyectos Xcode.

En primer lugar, sabemos que para ".una biblioteca estática" y "marco estático", puede simplemente arrastrar y soltar los archivos relevantes en el proyecto y marcar la opción "Copiar si es necesario" sin ningún Otras configuraciones;

Agregar un "marco dinámico" es más problemático, hay varias formas de hacerlo.

PD: Cuando decimos "agregar bibliotecas dinámicas", nos referimos a bibliotecas dinámicas de terceros, no a las bibliotecas propias del sistema, como UIKit.framework, Foundation.framework o libc++, etc. Agregar dependencias sobre ellos es fácil. General -> Bibliotecas y marcos vinculados y haga clic en el signo más para agregarlos.

En el proyecto Xcode, seleccione el destino correspondiente a la aplicación, luego haga clic en el signo más en General -> Binarios integrados, como se muestra en la Figura 1, y seleccione Agregar otro en la ventana emergente. . Seleccione Agregar otro... en la ventana emergente y finalmente seleccione el "Marco dinámico" que desea agregar en el Finder y marque "Copiar" si es necesario. Tenga en cuenta que no puede arrastrar y soltar archivos .framework directamente en archivos binarios incrustados en el Finder; de lo contrario, se informará un error.

Para obtener más detalles sobre cómo agregar bibliotecas dinámicas manualmente y solucionar problemas, consulte el tutorial oficial de Apple: Incrustar marcos en aplicaciones

¡Todavía! Esto parece conveniente, pero tiene un inconveniente: como mencionamos en el episodio anterior, los binarios dinámicos a menudo contienen múltiples arquitecturas de procesador, como i386, x86_64, armv7, armv7s, arm64, etc. Cuando Xcode compila y vincula archivos binarios dinámicos, se copian directamente en el paquete .ipa sin filtrar arquitecturas no utilizadas, como cuando se vinculan bibliotecas estáticas. Cuando Xcode compila y vincula archivos binarios dinámicos, los copiará directamente en el paquete .ipa. Las arquitecturas no utilizadas no se filtrarán como vincular bibliotecas estáticas, y Apple no permite arquitecturas de simulador con i386, x86_64, etc. el backend de App Store Connect. Por lo tanto, normalmente necesitamos eliminar manualmente estas arquitecturas no válidas del paquete de lanzamiento mediante el comando o script lipo (a menos que depures tu proyecto de desarrollo en una máquina real en lugar de ejecutarlo en el simulador y agregues bibliotecas dinámicas que no incluyan i386, x86_64 )

Para bibliotecas de terceros integradas a través de Carthage, agregar dependencias en el archivo Cartfile y luego ejecutar el comando de actualización de Carthage generará un "marco dinámico" para nosotros, como AFNetworking.framework, SDWebImage.framework , etc. Luego, arrástrelos y suéltelos en el proyecto en General -> Bibliotecas y marcos vinculados y configure los scripts y comandos de copia relevantes. Comienza el tutorial: Cartago.

La clave a hacer aquí es agregar un script de ejecución (nueva fase de script de ejecución) en la fase de compilación del proyecto Xcode y ejecutar el siguiente comando desde ese script:

As Como se muestra en la figura 2:

Presumiblemente, el propósito de este comando es eliminar automáticamente la biblioteca i3rd de nuestro paquete al empaquetarlo y copiarlo.

De manera similar, al integrar bibliotecas dinámicas a través de CocoaPods, se agregará automáticamente un script de Shell al proyecto para completar el trabajo, como se muestra en la Figura 3: [CP] Embed Pods Frameworks

Puedes comprobar el comando tú mismo.

Pods-xxx-frameworks.sh, la función strip_invalid_archs() puede eliminar arquitecturas de procesador inútiles durante el empaquetado, como se muestra en la Figura 4:

Por lo tanto, podemos integrar la suya propia o Los marcos dinámicos de otras personas en CocoaPods a través de CocoaPods: cree un repositorio git privado para Pods (creo que ya está familiarizado con él) y agregue los archivos dinámicos .frameworks relevantes al repositorio git. Agregue los archivos dinámicos .frameworks relevantes al repositorio de git, luego escriba el archivo Podspec como se muestra en la Figura 5 e instale su pod en su proyecto.

Finalmente, pensemos en ello: no parece haber mucha diferencia entre "marco estático" y "marco dinámico", y agregar un "marco dinámico" al proyecto Es un poco más complicado. El "marco dinámico" es más engorroso, entonces, ¿cuáles son las situaciones en las que se utilizan bibliotecas dinámicas en el desarrollo de iOS/macOS?