Modificación de la aplicación iOS en el momento de compilation

Tengo la pantalla de inicio de mi aplicación como el siguiente prototipo: introduzca la descripción de la imagen aquí Teniendo en count esta pantalla de inicio, tengo que desarrollar la aplicación de tal manera que cada característica entre estas cuatro se pueda conectar al momento de compilation. Por ejemplo,

Si establezco una macro como

#define FEATURE_1 0 

entonces, la pantalla de inicio tendrá solo 3 fichas para las tres características restantes. Además, los files que están relacionados con feature-1 no deberían comstackrse en la .ipa resultante.

Cuando desarrollé estos cuatro modules, mantuve todas las classs independientes entre sí. Pero el problema es que tengo un solo storyboard que contiene toda la interfaz de usuario. Ahora, tengo que separar la interfaz de usuario y los resources de tal manera que si alguna de las funciones está desactivada, no se comstackrán files relacionados con esa característica.

Lo que he intentado : Leí en alguna parte que hacer que cada function como una biblioteca estática hiciera mi trabajo, sin embargo, no pude entender cómo includeía / excluiría una biblioteca estática en el momento de compilation. Además, no resuelve mi problema de separar las vistas en el guión gráfico.

Específicamente, las preguntas que tengo son:

1) ¿Cómo puedo copyr files específicos a mi proyecto y omitir files específicos dependiendo de la macro como se definió anteriormente? Si es posible, dirígeme a una buena manera de hacerlo.

2) ¿Cómo puedo separar las vistas en storyboard? ¿Se pueden definir varios storyboards e include los necesarios en el momento de compilation? Guía por favor

Respuesta para 1: no puede usar solo macros.

Cree varios destinos para sus diferentes configuraciones, defina las macros que necesita en cada destino y active la checkbox include files para include solo los files necesarios durante la compilation.

Aunque podría usar el sistema de compilation, en su caso, parece más fácil envolver el código afectado en

 #if FEATURE_1 ... #endif 

Para ocultar las vistas, puede usar el código en línea de

 #if !FEATURE_1 feature1View.hidden = YES; #endif 

dependiendo de qué es exactamente lo que estás tratando de lograr.

Respuesta para 2. Use UICollectionView o use 4 vistas en su XIB y use este método

 -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self){ // NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"--name of xibs--" owner:nil options:nil]; // self = [nibArray objectAtIndex:0]; } return self; } 

en nibArray, las vistas se almacenarán

Lo que terminé haciendo:

Considere que tengo dos características: 1 y 2.

Entonces mis requisitos estarían haciendo tres types de comstackciones :

  1. Una compilation con solo la característica 1.
  2. Una compilation con solo la característica 2.
  3. Una compilation que tiene ambas características 1 y 2.

Entonces, dividí los files de proyecto en grupos Xcode como:

  1. CommonModule : este grupo consta de files que son necesarios para ambas funciones.
  2. ModuleOne : este grupo consta de files que necesita la function uno.
  3. ModuleTwo : este grupo consta de files que son necesarios para la function dos.

La estructura de carpetas que seguí para cada module es:

mi estructura de carpetas

Es mejor mantener la estructura de carpetas del proyecto en el disco similar a la estructura grupal de ese proyecto. Reduce la confusión y agrega todos los files en una carpeta particular a un grupo particular .

Ahora definí tres objectives correspondientes a los tres types de construcciones que enumeré anteriormente.

  1. TargetOne : los files en los grupos CommonModule y ModuleOne pertenecen a este objective.
  2. TargetTwo : los files en CommonModule y ModuleTwo grupos pertenecen a este objective.
  3. TargetAll : los files en CommonModule , ModuleOne y ModuleTwo grupos pertenecen a este objective.

Ahora en CommonModule, tengo un file BuildConfig.h que tiene macros como:

 #define IncludeModuleOne 1 #define IncludeModuleTwo 1 

Entonces, al build, select el objective apropiado y alterne los interruptores anteriores de manera adecuada para get la compilation correcta.

Ahora, en InitialViewController.m , comprobé los valores del interruptor y, según los valores, mostré / oculté las opciones del menu para esa característica en particular.

De esta manera, para resumir, incluyo solo los files requeridos en la compilation con el uso de múltiples objectives + macros de configuration juntos

Pronto compartiré un enlace a mi Proyecto de muestra en GitHub. Espero que ayude a alguien que tenga requisitos similares. Gracias !