Xcode selecciona la versión incorrecta del file de encabezado con el mismo nombre

Una pregunta similar se ha hecho y respondió aquí , sin embargo, la solución provista no resuelve mi problema.

My Project tiene dos objectives: A Cocoa Framework (macOS) y Cocoa Touch Framework (iOS).

Los frameworks comparten una gran cantidad de files fuente y encabezados, pero hay files que son específicos de cada marco (debido a diferencias en la plataforma).

En particular, ambos frameworks tienen una class llamada ViewController .

En iOS, se declara así:

( $(SRC_ROOT) / Platforms / iOS / ViewController/ViewController.h 🙂

 #import <UIKit/UIKit.h> @interface ViewController : UIViewController ... 

En la Mac, así:

( $(SRC_ROOT) / Platforms / macOS / ViewController/ViewController.h 🙂

 #import <Cocoa/Cocoa.h> @interface ViewController : NSViewController ... 

También tengo una tercera class , Manager , que es común a ambas plataforms.

Es solo una subclass de NSObject y, por lo tanto, su file de encabezado solo necesita importar el agnóstico de la plataforma <Foundation/Foundation.h> .

Pero los methods de esta class interactúan con el ViewController anteriormente mencionado, por lo que el file de implementación importa ese encabezado:

( $(SRC_ROOT) /Common/Manager.m 🙂

 #import "Manager.h" #import "ViewController.h" // <-- THIS @implementation Manager ... 

Ahora , cuando desarrollo el objective de iOS, todo está bien.

Pero cuando bash build el objective macOS, la versión de iOS de ViewController.h se importa de alguna manera y obtengo el siguiente error:

Problema léxico o del preprocesador: no se encuentra el file 'UIKit / UIKit.h'

… apuntando a la statement #import en Manager.m.

Alguna mas informacion:

  1. ViewController.h es un encabezado público en ambos frameworks, y se incluye en los encabezados de paraguas para ambos objectives:

     #import <MyFramework/ViewController.h> 
  2. Cada versión del encabezado tiene una membresía objective establecida en el objective apropiado.

  3. Para ambos objectives, las routes de búsqueda de encabezado y las routes de búsqueda de encabezado de usuario están en blanco y las routes de búsqueda de usuario siempre son NO.

  4. Intenté establecer las routes de búsqueda del encabezado en cada uno de los siguientes valores, sin éxito:

    • $(SRC_ROOT)/Platforms/macOS/
    • $(SRC_ROOT)/Platforms/macOS/**
    • ./Platforms/macOS/
    • ./Platforms/macOS/**
  5. Intenté eliminar temporalmente la versión de iOS del encabezado, y la compilation tuvo éxito . Pero después de restaurar el file y limpiar la carpeta de compilation, falla nuevamente.

¿Cómo puedo hacer que Xcode "vea" la versión correcta del encabezado, en el objective Mac?


EDIT: Probé los mismos valores de ruta desde el punto (4) para "Rutas de búsqueda de Framework". Mismo error.


ACTUALIZAR:

Si configuro la configuration de creación Siempre search routes de usuario a (el valor pnetworkingeterminado es NO), se crea mi marco. Incluso puedo crear una aplicación de ejemplo de Mac que se vincule con ella y se ejecute. Sin embargo, recibo la advertencia:

Advertencia: al usar 'ALWAYS_SEARCH_USER_PATHS = YES' mientras se crean los objectives que definen los modules ('DEFINES_MODULE = YES') pueden fallar. Migración a 'ALWAYS_SEARCH_USER_PATHS = NO'.

… pero leí en algún lugar esto causaría problemas en la línea (no puedo encontrar la publicación ahora).


ACTUALIZACIÓN 2:

Si, además, cambio la configuration de creación Define el module en NO (como lo sugiere la advertencia), tanto el marco como la aplicación que lo integran se crean con éxito y las classs del marco están disponibles (es decir, instantáneas) del código de la aplicación.

Sin embargo, me temo que todo este negocio de "no definir un module" causará problemas cuando intente utilizar mi marco desde una aplicación escrita en Swift …?