Formato de archivo Mach-O (Mach Object - .o
)
En el mundo iOS, cada archivo fuente se convierte en archivos de objeto: archivo ABI [Acerca de] Mach-O [Acerca de] que se empaquetará en un paquete ejecutable final (por ejemplo, aplicación, marco ...), archivo (por ejemplo, biblioteca ...) y su comportamiento está determinado por Mach-O type
[Acerca de]
Package
es un directorio que se comporta como un archivo - opaque file
. Está creado para que la experiencia del usuario complique la realización de algunos cambios en la estructura interna que pueden causar un comportamiento impredecible del programa. El paquete se usa en Document Package
o con a Bundle
. Puedes usar Show Package Contents
en un Finder
Bundle
es un directorio con una estructura específica para organizar un binario (código ejecutable) y recursos para ese código (por ejemplo, imágenes, plumillas ...). El paquete contiene el archivo Info.plist
[Acerca de] . Bundle fue creado para la experiencia del desarrollador . También se puede empaquetar. Hay varios tipos de paquetes:
application bundle
- Application target
framework bundle
y versioned bundle
como subtipoFramework Target
loadable bundle
(aka plug-in bundle
) - Bundle target
(Paquete de prueba de IU, Paquete de prueba de unidad)
- otros ( paquete
dSYM
[Acerca de] )
Application
- .ipa
, .app
[Acerca de] - packaged
application bundle
- programa ejecutable.
Tests
- packaged
loadable bundle
que se usa para probar un binario. La arquitectura de complemento nos permite agregar una nueva funcionalidad (casos de prueba) como un módulo separado en el binario existente
Bibliotecas y marcos
Martin Fowler en InversionOfControl
Una biblioteca es esencialmente un conjunto de funciones a las que puede llamar, en estos días generalmente organizadas en clases. Cada llamada hace algo de trabajo y devuelve el control al cliente.
Un Framework incorpora un diseño abstracto, con más comportamiento incorporado. Para usarlo, debe insertar su comportamiento en varios lugares del marco, ya sea subclasificando o conectando sus propias clases. El código del marco luego llama a su código en estos puntos. El control principal del programa se invierte, se aleja de usted al marco. (Inversión de control)
Bibliotecas y marcos en iOS
Library
es una colección de archivos de objetos Mach-O [verificar estáticos o dinámicos] compilados para una o más arquitecturas.
Static library
- .a
(también conocido como biblioteca de archivos estáticos, biblioteca compartida vinculada estática [doc] ) - Cuando lo agrega a su aplicación, el enlazador estático durante el tiempo de compilación fusionará los archivos de objetos de la biblioteca y los empaquetará junto con los archivos de objetos de la aplicación en un solo ejecutable expediente. La desventaja es un gran archivo de salida
Desde Xcode 9.0, se admite la biblioteca estática Swift.
Dynamic library
- .dylib
(también conocido como biblioteca dinámica compartida, objeto compartido, biblioteca vinculada dinámicamente [doc] ) se vincula dinámicamente con el ejecutable de la aplicación en carga o tiempo de ejecución , pero no se copia en él. En la práctica, el paquete de la aplicación contendrá la carpeta Frameworks con el .dylib
archivo. Todas las bibliotecas del sistema iOS y macOS son dynamic
. La desventaja es un tiempo de inicio lento ya que todas las bibliotecas dinámicas deben copiarse y vincularse.
[Enlace estático vs dinámico]
Text-based stub library
- .tbd
[Acerca de] , es un trozo de texto dynamic library
que se encuentra en un dispositivo de destino. Como resultado, no debe empaquetar una biblioteca dinámica en su paquete. Tiene un efecto de tamaño.
Framework
aka binary framework
- .framework
es un not packaged framework bundle
(para permitir a los desarrolladores ver fácilmente los encabezados y recursos) que contiene una static or dynamic
biblioteca compilada , archivos de encabezado y recursos.
Static framework
contener un static library
paquete con sus recursos.
Dynamic framework
contiene el dynamic library
y los recursos. Además de eso, el marco dinámico puede incluir diferentes versiones de la misma biblioteca dinámica en un solo paquete ( versioned bundle
)
[Marco estático vs dinámico]
Embedded framework
es un dynamic framework
que vive en la caja de arena de la aplicación. Este tipo se creó en primer lugar para la extensión para compartir código y recursos comunes. Está disponible cuando el objetivo de implementación es iOS 8+.
Umbrella framework
[Objetivo agregado] es un marco que contiene otros marcos. No es oficialmente compatible con iOS y es por eso que no se recomienda a los desarrolladores crearlos [Documento oficial] . En realidad, es un conjunto de sub-marcos (o marcos anidados). Cuando crea un marco que tiene una dependencia, un consumidor (como una aplicación) es responsable de agregar esta dependencia junto con su marco al proyecto. Como desarrollador, es natural tratar de encontrar una manera de transferir este deber del consumidor al suyo. Como resultado, cree que eseUmbrella framework
es el rescate, pero generalmente conduce a problemas serios con la administración de versiones y la complejidad de crearlo y respaldarlo.
Fake Framework
- es el resultado de operaciones específicas bajo a static library
para crear un paquete con .framework
extensión que se comportará como a dynamic framework
. Esta técnica se usó cuando Xcode no admitía la creación de un marco ya que no tenía una plantilla de marco. Uno de realización de un marco falso . Con Xcode 6, Apple ha agregado soporte para el marco de iOS.
Modular Framework
[Acerca de] -@import
es un marco que contiene un.modulemap
archivo dentro. El módulo puede contener submódulos. La principal ventaja es que ahorras tiempo de construcción conModular Framework
.
Universal Library or Framework
(también conocido como Fat) [lipo] [Objetivo agregado] contiene múltiples arquitecturas. Por ejemplo, su versión de lanzamiento debe admitir un arco que puede regular a través de Build Active Architecture Only
[ONLY_ACTIVE_ARCH]
Dependency
[Acerca de] Puede usar código de terceros como parte de su objetivo. Le permite reutilizar un código de muchas fuentes como: otro proyecto, proyecto en el mismo espacio de trabajo, otro destino, biblioteca, marco, etc.
Cómo construir y usar una biblioteca estática:
Cómo construir y usar un marco dinámico [cambiar a estático]
[Sistema de compilación Xcode]
[Componentes de Xcode]
[Enlace dinámico]