Exponer classs de dependencies en Swift Framework

He creado dos frameworks rápidamente, llamémoslos CoreFramework y MyFramework

MyFramework tiene una dependencia con CoreFramework y usa algunas de las classs, estructuras y enums de CoreFramework en sus methods públicos, como por ejemplo:

 public func fetchData() -> CoreStruct 

He configurado un podspec para ambos Frameworks y puedo usar MyFramework como un pod en mi proyecto. En mi proyecto escribiría algo como:

 let result = fetchData() 

Esto comstack y Xcode incluso me da el tipo correcto cuando alt + click la variable, pero si quiero especificar explícitamente el tipo de result como este:

 let result: CoreStruct = fetchData() 

Recibo un error de comstackdor y tengo que importar CoreFramework

¿Qué debo hacer para poder usar explícitamente cosas como CoreStruct en mi proyecto, sin tener que importar el marco subyacente?

En Swift no hay forma de que la import de un module importe automáticamente otra. Esa fue una elección consciente sobre la parte de los diseñadores de idiomas, y Swift es estricto al respecto.

Hay algo llamado un "marco paraguas" que hace lo que desea al permitirle crear una fachada para varios subframeworks, pero Apple específicamente lo desanima de crear uno .

Exceptuando esto, debe asegurarse de que (en su ejemplo) fetchData() y CoreStruct se CoreStruct en el mismo marco, lo que podría hacer mediante:

  • tener MyFramework incluye el código de CoreFramework como un submodule git,
  • tener MyFramework utilizar Cocoapods para build CoreFramework dentro del mismo espacio de trabajo (es decir, publicar CoreFramework como un pod, e includelo en MyFramework sin la opción use_frameworks en el podfile, para que obtenga dos proyectos en un espacio de trabajo comstackdos en un marco),
  • fusionar los proyectos (es decir, simplemente agregar todos los files de origen de MyFramework y CoreFramework al mismo proyecto),

… o cualquier otra cosa que haga que los dos treees fuente se compilen en un marco.

Podrías hacerlo

 import struct CoreFramework.CoreStruct 

para importar solo este tipo en particular, consulte Referencia del lenguaje de progtwigción Swift: Declaraciones de import .