Aclaraciones de marcos estáticos vs dinámicos de iOS


Tengo que 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 manera de distribuir una biblioteca que creé, y necesito soportar iOS 7 y superiores. (Nota: Este será un framework propietario. No puedo usar vainas de cacao, y tampoco puedo distribuir la fuente). Esto es lo que ya sé:

  • iOS 8 introdujo "marcos incrustados" 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 (.un archivo) y también distribuir las cabeceras. 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 con él, si es posible).
  • También he encontrado que iOS 7 no es compatible con dynamic .bibliotecas de framework (solo estáticas) porque no admite enlaces dinámicos. Pero iOS 8 lo hace, así como estática vincular.

Y aquí están mis preguntas con respecto a esta información:

  • Vi que puedo crear un .framework target, y hacerlo estático, cambiando el tipo Mach-O a "static library. Sería suficiente con el fin de apoyar iOS 7 sin ningún problema, y también para distribuir mi biblioteca como un .marco bundle? Si es así, ¿por qué los "marcos incrustados" en iOS 8 son tan importantes, como sugieren muchos recursos en Internet? Me estoy perdiendo algo?
  • Es necesario para codiseñar el .framework al igual que hago con cualquier otra aplicación que hago?
  • ¿Qué pasa si necesito incluir otros recursos (como Datos Centrales o Imágenes) con mi .marco archivo? Voy a tener que hacer un separado .¿archivo bundle para eso?
Author: ROMANIA_engineer, 2015-01-12

4 answers

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 las cabeceras por separado.

Más tarde, algunos desarrolladores tuvieron la idea de crear 'frameworks estáticos'. [el .framework es solo una carpeta con enlaces simbólicos a la lib y los encabezados]. Un ejemplo de ello es https://github.com/jverkoey/iOS-Framework

Esta opción funcionará para iOS 7 u 8 o antes de eso. Porque son sólo bibliotecas estáticas con la conveniencia de agrupar los archivos de encabezados.

En cuanto a sus preguntas sobre los recursos, tendríamos que agruparlos en '.bundle.. Para el envío de ellos no estoy seguro de si podemos encerrarlos en el .carpeta del marco.. En el pasado solía enviar mis libs como un marco y paquete estático...

Sin embargo, la opción anterior no funcionará para usted si utiliza Swift. Xcode no admite la creación de bibliotecas estáticas que incluyan código swift.

Debes irte 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 se dirige a iOS7 y utiliza marcos dinámicos :-).

Espero que esto ayude

 62
Author: Subbu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-02 16:32:09

Con Xcode 9 en adelante también puede crear frameworks estáticos para Swift. Esto es posible gracias a la compatibilidad con el código fuente ABI. Todo lo que necesita hacer es simplemente cambiar la Mach-O type en la configuración de compilación del destino del marco. Esta técnica también es aplicable a Frameworks híbridos(frameworks con código Swift y Objective-C).

 10
Author: Avijeet Dutta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-02 15:54:50

Swift no funciona en la librería estática. Si tiene que usar dynamic framework, debe establecer min iOS en 8.0 porque AppStore reject ios 7 con dynamic framework

 6
Author: AliasCocoa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-23 21:02:21

No tengo todas las respuestas, pero trataré de responder algunas de sus preguntas aquí.

  • Recibirá una advertencia por usar estos marcos en iOS 7, sin embargo, eso es todo, una advertencia. Ver esta respuesta .

  • Puede incluir otros recursos como CoreData, sin embargo, tendrá que crearlos en código manualmente. Aquí hay un tutorial que muestra cómo crear un modelo de datos básicos.

  • Usted tiene que firmar código bibliotecas dinámicas para iOS.

  • Debe asegurarse de que su marco sea compatible con las arquitecturas de simulador y dispositivo si planea distribuirlo.

 4
Author: Beau Nouvelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:06