Xcode: marco embedded "Ningún module"

Actualmente tengo 3 frameworks integrados en mi proyecto:

  • PersistenceLayer (solo Swift)
  • TransportLayer (solo Swift)
  • Socket (Objc)

Tanto PersistenceLayer como Socket no hacen reference a nada fuera de ellos mismos. Sin embargo, TransportLayer importa PersistenceLayer y Socket . Curiosamente, puedo usar objects PersistenceLayer después de importar:

 import PersistenceLayer struct User : Model { ... } 

Model se define en PersistenceLayer y Xcode me permite utilizarlo por lo normal. Sin embargo, cuando trato de build TransportLayer , obtengo el error: No such Modul 'Persistencelayer' . Entonces, Xcode reconoce que el module está ahí, pero de alguna manera lo "pierde" cuando construye.

Lo que es enloquecedor es que solía funcionar. En algún momento, algo cambió y no puedo entender qué. Es importante tener en count que trabajo en un proyecto con varios desarrolladores y me he merged en los cambios. Sin embargo, cambiar a un commit antes de la combinación no funcionó. También he intentado:

  • Agregar $(SRCROOT) (recursivo) a Rutas de búsqueda de Framework
  • Eliminando todo fuera del directory ModuleCache
  • Proyecto limpio
  • Carpeta de compilation limpia

Sospecho que algo cambió en la configuration de mi proyecto pero no puedo entender qué y he comprobado que los git diffs no ayudaron (no había nada que realmente cambiara el proyecto aparte de las adiciones de files normales.

Además, TransportLayer importa y utiliza con éxito Socket . Puedo build el TransportLayer si elimino references a PersistenceLayer pero conservo todas las references a Socket .

¿Alguien sabe por qué esto podría estar ocurriendo o cómo solucionarlo?

Actualizar

Ok, así que eliminé los files "ofensivos" del objective para asegurarse de que Socket funcionaba (es) y luego volví a agregar los files al destino (literalmente restableciendo git). Ahora se construye … porque eso tiene sentido. Pero intenté cambiar el esquema del iOS Device a un simulador y ya no se comstack, pero recibo diferentes errores:

  • en module.modulemap: Header PersistenceLayer-Swift.h 'no encontrado`
  • Además: Could not build Objective-C module 'Persistence Layer'

Esto parece que estoy persiguiendo errores aleatorios …

Descubrí la respuesta: abra Fases de compilation en el destino TransportLayer y agregue manualmente PersistenceLayer y Socket a las dependencies de destino . Esto garantiza que todo lo que dependa de TransportLayer se buildá antes de que sea.

Tuve la sensación de que la razón original por la que iOS Device esquema del iOS Device funcionaba era porque había eliminado los files ofensivos, permitiendo que todo se construyera correctamente, incluida PersistenceLayer que se almacenaba en la memory caching. Después de volver a agregar las importaciones al proyecto, siguió funcionando porque PersistenceLayer ya no necesitaba ser construido. Otros esquemas no funcionaron porque PersistenceLayer no se creó para esas architectures. Confirmé esto limpiando nuevamente y las comstackciones fallaron. Después de search algo, encontré Target Dependencies y agregué mis dos dependencies allí. Todo ahora se construye correctamente en todos los esquemas y todas las architectures.

Probablemente, mi proyecto había estado funcionando bien hasta ahora porque estaba trabajando con Frameworks en caching que se habían creado antes de que realmente los use: (Construí PersistenceLayer antes de comenzar a trabajar en TransportLayer ). Probablemente limpié el proyecto en algún momento recientemente, lo que eliminó los frameworks almacenados en caching y causó los problemas.