Debo admitir que con el lanzamiento de iOS 8 estoy un poco confundido acerca de los marcos dinámicos y estáticos en iOS.
Estoy buscando una forma de distribuir una biblioteca que creé y necesito ser compatible con iOS 7 y superior. (Nota: Este será un marco propietario. No puedo usar las mazorcas de cacao y tampoco puedo distribuir la fuente). Esto es lo que ya sé:
- iOS 8 introdujo "marcos integrados" para iOS, pero, según tengo entendido, no funcionan para iOS 7, solo para iOS 8 y superior.
- Tengo la opción de distribuir mi biblioteca como una biblioteca estática (archivo .a) y también distribuir los encabezados. Sé que esta es una forma común de lidiar con la situación, pero me gustaría encontrar algo más simple que eso (y también agrupar algunos recursos, si es posible).
- También descubrí que iOS 7 no admite bibliotecas dinámicas .framework (solo estáticas) porque no admite enlaces dinámicos. Pero iOS 8 lo hace, al igual que los enlaces estáticos.
Y aquí están mis preguntas con respecto a esta información:
- Vi que puedo crear un objetivo .framework y hacerlo estático, cambiando el tipo Mach-O a "biblioteca estática. ¿Sería suficiente para admitir iOS 7 sin ningún problema, y también para distribuir mi biblioteca como una .framework bundle? Si es así, ¿por qué los "frameworks integrados" en iOS 8 son tan importantes, como sugieren muchos recursos en Internet? ¿Me estoy perdiendo algo?
- ¿Es necesario codificar el .framework como lo hago con cualquier otra aplicación que hago?
- ¿Qué sucede si necesito incluir otros recursos (como datos básicos o imágenes) con mi archivo .framework? ¿Necesitaré crear un archivo .bundle separado para eso?
Respuestas:
Antes de iOS8, Xcode solo permitía la opción de crear bibliotecas estáticas para iOS. El problema común con eso era que teníamos que enviar el binario y los encabezados por separado.
Más tarde, algunos desarrolladores tuvieron la idea de crear "marcos estáticos". [el .framework es solo una carpeta con enlaces simbólicos a la biblioteca y los encabezados]. Un ejemplo es https://github.com/jverkoey/iOS-Framework
Esta opción funcionará para iOS 7 u 8 o antes. Porque son solo bibliotecas estáticas con la conveniencia de agrupar los archivos de encabezados.
En cuanto a sus preguntas sobre los recursos, necesitaríamos agruparlos en '.bundle'. Para enviarlos, no estoy seguro de poder incluirlos en la carpeta .framework. En el pasado solía enviar mis bibliotecas como un marco estático y un paquete ...
Sin embargo, la opción anterior no funcionará para usted si usa Swift. Xcode no admite la creación de bibliotecas estáticas que incluyan código rápido.
Debe ir con marcos dinámicos si hay un uso rápido. En teoría, los marcos dinámicos funcionan en iOS7. Pero creo que iTunes Connect rechazará si la aplicación está dirigida a iOS7 y usa marcos dinámicos :-).
Espero que esto ayude
fuente
Con Xcode 9 en adelante, también puede crear marcos estáticos para Swift. Esto es posible debido a la compatibilidad de fuentes ABI. Todo lo que necesita hacer es cambiar la
Mach-O type
configuración de compilación inferior del objetivo del marco. Esta técnica también es aplicable a Hybrid Frameworks (frameworks con código Swift y Objective-C).fuente
static
odynamic
en el nombre generalmente puntos en unLinking
[Sobre] TipoLos marcos pueden ser
static
odynamic
[Verificar estáticos o dinámicos]Puede cambiar el formato de la biblioteca que tendrá un impacto en un
Linker
cambiandoFramework target -> Build Settings -> Mach-O Type
[Acerca de] aStatic Library
oDynamic Library
. Por defecto, Xcode tieneDynamic Library
valor.Depende de esta configuración se generarán diferentes tipos de binarios
Después de configurar correctamente un consumidor [Enlace vs Insertar]
Static Linker
ld : en el momento de la compilación incluirá todo el código delstatic library
en el archivo objeto ejecutable.Dynamic Linker
dyld : en tiempo de carga / ejecución intentará encontrar el marco integrado usando@rpath
[Acerca de] y vincularlo[Vocabulario]
fuente
Swift no funciona en bibliotecas estáticas. Si tiene que usar un marco dinámico, debe establecer min iOS en 8.0 porque AppStore rechaza ios 7 con marco dinámico
fuente
No tengo todas las respuestas, pero intentaré responder algunas de sus preguntas aquí.
Recibirá una advertencia por usar estos marcos en iOS 7, sin embargo, eso es todo, una advertencia. Vea esta respuesta .
Puede incluir otros recursos como CoreData, sin embargo, deberá crearlos en el código manualmente. Aquí hay un tutorial que muestra cómo crear un modelo de datos centrales.
Debe codificar bibliotecas dinámicas de firma para iOS.
Debe asegurarse de que su marco sea compatible con arquitecturas de simulador y de dispositivo si planea distribuirlo.
fuente