ios xcode frameworks xcode7 carthage

¿Cuál es la diferencia entre los binarios incrustados y los marcos vinculados?



xcode frameworks (4)

  1. Vinculación: debemos vincular un marco si utilizamos cualquier API definida en él.

  2. Incrustar: este proceso asegurará que el marco agregado se incrustará dentro del paquete de la aplicación y, potencialmente, ayudará a compartir el código entre la aplicación y cualquier paquete de extensión. Incorporamos solo marcos de trabajo de terceros y no los proporcionados por iOS, ya que están disponibles en el dispositivo. Si estamos incrustando, eso significa que también tendremos que vincularlos para que Xcode pueda compilar y crear la compilación. Cuando la aplicación se ejecuta en el dispositivo, el marco incrustado se cargará en la memoria cuando sea necesario.

Cuando se utiliza un marco externo, Xcode ahora tiene una sección de binarios incrustados y de marcos vinculados .

Cuando descargue un marco externo y Finder-> arrástrelo a Xcode, colocará el marco en la sección Marcos vinculados y bibliotecas .

Cuando crea una biblioteca con Carthage, recomienda arrastrarla a la sección Binarios incrustados .

Ambos parecen estar funcionando en términos de vinculación, ya que la API está disponible de cualquier manera, más aún cuando se agrega un marco en la sección Binarios incrustados , también se agrega automáticamente en la sección de Marcos vinculados y Bibliotecas .

Entonces, ¿quién tiene razón? Cartago o el resto de internet? y ¿por qué hay 2 opciones para incluir recursos externos en proyectos de Xcode?


A mi entender, el binario incrustado solo incluye un marco dinámico que está disponible en iOS 8 y superior, de lo contrario, solo puede vincular el marco que es estático.


Si incrusta el binario, se incluirá en su producto. Si solo vincula una biblioteca o marco sin incrustarlo, no será parte de su producto.

Sin embargo, en iOS8 todos los marcos de terceros deben estar "incrustados". Incluso un marco que se comparte entre varios programas debe "integrarse" en cada uno de esos programas. En el caso en que se instaló en el dispositivo en una ubicación compartida, cualquier otro proceso de instalación que use el mismo código "incrustado" de la ubicación compartida puede reutilizar esa instalación existente. Esto es específico para iOS8, no ha sido posible antes de iOS8 y fuera del mundo de iOS, esta respuesta no sería precisa.


Linking más sobre Linker que funciona en tiempo de compilación o tiempo de carga / ejecución. Linker copia una Library en un binario de destino. Dado que Framework es autónomo, el Linker , en este caso, es responsable de buscar y vincular el Dynamic Framework dentro de la ruta del cargador del sistema o de buscar y vincular dentro de un paquete .

Embedding es un proceso de copiar el binario en el binario de destino. Como resultado, se ubicará en el interior.

Lee más here