Colección de citas famosas - Slogan de motivación - Situación durante el desarrollo del SDK de iOS

Situación durante el desarrollo del SDK de iOS

El desarrollo de iOS SDK consiste en proporcionar un módulo implementado, encapsulado y directamente utilizable para un determinado escenario, campo o requisito de aplicación.

Consta principalmente de dos partes: una lista de archivos de encabezado utilizados para declarar tipos o constantes, y un archivo binario para una implementación específica.

Por lo tanto, los principales problemas en el desarrollo del SDK se centran en:

1. Si el archivo de encabezado puede ser indexado por el proyecto utilizado

2. Si el archivo binario el archivo se puede indexar Se buscó el proyecto utilizado

Este artículo no escribe los pasos específicos para crear el SDK, solo analiza algunas situaciones al crear el SDK.

Acerca de la configuración del archivo de encabezado en el desarrollo del SDK:

Para todas las clases, estructuras, enumeraciones, constantes, etc. proporcionadas al mundo exterior, los archivos de encabezado que las definen deben estar en el Construcción del proyecto. Debajo de Fases->Encabezados->público. Y estos archivos de encabezado deben incluirse en el archivo de encabezado con el mismo nombre que el proyecto SDK (esto no es necesario, pero estará más estandarizado. Cuando otros usan el SDK, solo necesitan introducir el archivo de encabezado con el mismo nombre como SDK)

Establezca si el archivo de la biblioteca se genera dinámica o estáticamente:

Nombre del proyecto->Nombre del destino->Configuración de compilación->Buscar "Mach" en la búsqueda cuadro-> Cambiar "Tipo Mach-O" a dinámico o estático, se pueden generar archivos de biblioteca dinámicos o estáticos en consecuencia.

Primero explique los nombres de los proyectos que aparecen en las siguientes imágenes:

SDKDemo: el archivo de la biblioteca SDK producido y proporcionado al mundo exterior (el mismo nombre que el nombre del proyecto SDK)

SDKApp: un proyecto de aplicación que hace referencia al archivo de la biblioteca SDK (este artículo se refiere a SDKDemo)

SDKStatic: al crear un nuevo proyecto, seleccione iOS->Framework & Library->Cocoa Touch Biblioteca estática. Se utiliza para generar archivos .a. Proyecto

SDKFramework: ? Es un archivo de biblioteca Framework (puede ser dinámico o estático), que se utiliza para simular archivos .framework que dependen del SDK. >

Hay varias situaciones a continuación. Analicemos las precauciones para el desarrollo de SDK:

1. Genere archivos de biblioteca de SDK dinámicos.

Al crear un proyecto, se genera una biblioteca dinámica compilando de acuerdo con la configuración predeterminada.

Al introducir una biblioteca dinámica en el proyecto de la aplicación, debe agregar la biblioteca dinámica importada en

Proyecto de la aplicación: Nombre del proyecto->Nombre del destino->General->Binarios integrados. De lo contrario, se informará el siguiente tipo de error durante el tiempo de ejecución:

Después de compilar la biblioteca dinámica integrada, habrá un directorio de Frameworks adicional en el archivo de aplicación generado (puede hacer clic con el botón derecho en el archivo .App para ver el contenido del paquete), que se agrega en Biblioteca dinámica integrada

2. Paquete como biblioteca estática

Proyecto SDK: Nombre del proyecto->Nombre de destino->Configuración de compilación. ->Busque "Mach" en el cuadro de búsqueda->Modificar "Mach- O Type" es una biblioteca estática

Es muy sencillo introducir una biblioteca estática en un proyecto de aplicación. Simplemente introdúzcala directamente. No se requiere configuración adicional:

Consejos:

Fusione la máquina real y El formato de comando para la versión del simulador es:

lipo -create?Path of the ¿Versión del simulador?Ruta de la versión real de la máquina-ruta de almacenamiento de la versión fusionada de salida

1. Al fusionar El orden de los dos parámetros de la versión del simulador y la versión real de la máquina recibidos por lipo -create no importa. La versión fusionada es completamente consistente al ver la información de la arquitectura a través de comandos.

La información de la arquitectura del simulador se muestra en la parte frontal y la información de la arquitectura real de la máquina en la parte posterior.

2. Ya sea que la versión fusionada reemplace el archivo de destino en la versión de máquina real de Framework o en la versión de simulador de Framework, después de que el Framework reemplazado se introduzca en el proyecto de la aplicación, se usará en el máquina real y el simulador se puede ejecutar en

Primero cree el proyecto SDKStatic y genere un archivo .a.

Este proyecto simplemente hereda UIButton y anula el método initWithFrame. El título y el color de fondo se generan de forma predeterminada para cada objeto MyButton:

El archivo .a generado es el siguiente, puedes ver que contiene el archivo MyButton.o:

Introducido en el proyecto SDK un archivo. Veamos el archivo de biblioteca SDK generado en dos situaciones:

1. El archivo de biblioteca SDK se convierte en una biblioteca dinámica (consulte el principio para conocer el método de configuración)

El contenido de el archivo .a está integrado en el archivo de la biblioteca dinámica del SDK, al introducirlo en el proyecto de la aplicación, solo necesita introducir la biblioteca dinámica del SDK

2. El archivo de la biblioteca del SDK se convierte en una biblioteca estática (consulte el principio para conocer el método de configuración)

Información en el paquete:

El contenido del archivo .a también está integrado en el archivo de biblioteca estática del SDK, que es más fácil de entender . Al introducirlo en el proyecto de la aplicación, solo necesita introducir la biblioteca estática del SDK

Para resumir:

Al crear la biblioteca del SDK, si hay archivos .a dependientes, el final SDK generado El archivo de biblioteca fusionará el contenido del archivo .a, independientemente de si el archivo de biblioteca SDK es dinámico o estático.

El siguiente SDKFramework es un archivo de biblioteca de Framework (puede ser dinámico o estático)

El contenido agregado por el proyecto SDKFramework es el mismo que el del proyecto SDKStatic. MyButton también está personalizado y el título y el color de fondo se generan de forma predeterminada (copie el archivo al proyecto):

El proyecto SDKDemo personaliza MyView y el objeto MyView generado de forma predeterminada agrega un botón MyButton y un fondo. color:

1. Si el archivo .framework es una biblioteca dinámica

a. El SDK está empaquetado como una biblioteca estática, de la siguiente manera:

La estática. El paquete SDK y el archivo dinámico SDKFramework.framework son independientes entre sí. Al introducir un paquete SDK estático, también debe importar SDKFramework.framework; de lo contrario, no se compilará porque el paquete estático tiene símbolos importados a la biblioteca dinámica.

b. El SDK está empaquetado como una biblioteca dinámica, de la siguiente manera:

Los dos son independientes entre sí. El paquete SDK dinámico registrará la ruta de acceso .framework dinámica dependiente. Cuando la aplicación se esté ejecutando, dyld cargará el archivo de dependencia .framework correspondiente en función de esta información. Si no se puede encontrar la aplicación, se bloqueará al iniciar...

2. Si el archivo .framework es una biblioteca estática

Primero, eche un vistazo al SDK. empaquetado como una biblioteca dinámica:

Después de la práctica, las bibliotecas estáticas dependientes se integrarán en el paquete SDK dinámico. Al introducirlo en la App, sólo es necesario importar el paquete SDK. Importamos SDKDemo a SDKApp y puede ver el siguiente efecto cuando se ejecuta:

b. Veamos el SDK empaquetado como una biblioteca estática:

Según la información de la captura de pantalla. arriba, importe el paquete SDK a la aplicación, también debe importar el .framework dependiente. De lo contrario, habrá un error al compilar que indica que no se puede encontrar el símbolo como se muestra en la siguiente figura:

Agregue el .framework dependiente importado, compile y ejecute nuevamente. ¡DE ACUERDO! ! !

Resumen:

1. El .framework dependiente es una biblioteca dinámica

El archivo de biblioteca SDK producido es dinámico o estático.

y el archivo .framework dependiente en sí son independientes entre sí, y la integración de símbolos no ocurrirá

2. El .framework dependiente es una biblioteca estática

Si el archivo de biblioteca SDK producido es Dinámico, el contenido de la biblioteca estática .framework dependiente se integrará en el archivo de la biblioteca SDK

Si el archivo de la biblioteca SDK producido es estático, son independientes entre sí

Aquí nuevamente Discusión de varias situaciones de puntuación:

1. ¿Use_frameworks no se usa en Podfile? La biblioteca pods genera archivos .a

si el SDK se convierte en una biblioteca estática:

? La biblioteca estática del SDK no integrará símbolos de las bibliotecas de terceros en Pods Cuando finalmente se importe el proyecto de la aplicación, la biblioteca estática del SDK y los archivos de la biblioteca de terceros en Pods deben importarse juntos. p>

b. Si el SDK se convierte en una biblioteca dinámica:

? Los símbolos de la biblioteca Pods se fusionarán e integrarán en la biblioteca SDK. Al importar el proyecto, solo necesita importar. el paquete SDK.

2. ¿Usar use_frameworks en Podfile? La biblioteca pods genera archivos .framework. El archivo Pods_projectname.framework es una biblioteca estática y la biblioteca de terceros administrada genera una biblioteca dinámica de marco

si el SDK se convierte en una biblioteca dinámica:

El SDK. incluirá Al introducir el rpath de la biblioteca de terceros y el paquete SDK en la aplicación, también se debe introducir la biblioteca de terceros; de lo contrario, dyld no podrá cargar la biblioteca especificada y provocará que la aplicación se bloquee cuando se inicie

b. Si el SDK se convierte en una biblioteca estática:

Los símbolos definidos en las bibliotecas en Pods se ignorarán en el SDK estático (es decir, son independientes entre sí). Si el SDK estático hace referencia a símbolos definidos en la biblioteca de pods dinámicos, simplemente importe la biblioteca dinámica en los pods al proyecto de la aplicación y agréguela a los archivos binarios integrados. Lo mismo se puede compilar y ejecutar.

De hecho, no importa cómo compilar o cuál es la situación en el proyecto SDK. ¿Es importante comprender la naturaleza del archivo de la biblioteca y cómo funciona? ¿En qué etapa funciona? Luego, aprenda a verificar la información del error durante la compilación y el tiempo de ejecución, y use comandos como otool, nm, lipo, ar, file, etc. para verificar cierta información sobre el archivo de la biblioteca y, finalmente, rastree y localice el problema.

Perdóname por no publicar muchas fotos al final, porque el proceso es similar al anterior. Mis manos también están cansadas de escribir. Si todavía tienes alguna pregunta, puedes comentar a continuación y haré todo lo posible para responder lo antes posible.