salud health apple app ios objective-c target ios-app-extension ios8-today-widget

health - ios 11



Detectar si el objetivo de ejecución es la extensión de la aplicación o la aplicación de iOS (2)

La respuesta de Tom es correcta. Otra alternativa es definir la macro en el archivo prefix.pch para su destino de extensión, asumiendo que está usando archivos de prefijo separados para cada destino.

#define TODAY_EXTENSION YES

Personalmente, prefiero este enfoque, ya que puedes hacer clic con el botón de comando en la macro donde sea que se use para ver dónde está definido.

Tengo una aplicación simple que también tiene una extensión (o widget) iOS 8 Today. Una de las cosas que estoy haciendo es compartir las clases de código entre mi aplicación y mi widget, porque obviamente esto me evita tener que tener varias copias del mismo código. Todo funciona bien, aparte de un problema que tengo, una de las API UIApplication sharedApplication está UIApplication sharedApplication un error porque no se puede usar en los Widgets de iOS 8.

Entonces, en lo que estaba pensando, es tener una declaración if simple que compruebe si el objetivo final es la aplicación nativa O si es un widget de iOS 8 y luego agregar el código según corresponda. Funcionaría eso?

Aquí está mi código:

if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) { CGSize ssz = sz; sz = CGSizeMake(ssz.height, ssz.width); }

¿Cómo puedo cambiar este código para que pueda hacer una de las siguientes acciones?

  1. Solo ejecute / compile SI el objetivo final es una aplicación iOS nativa y no un widget.
  2. O compruebe si esa API está disponible en la plataforma de destino y luego úsela si está?

Espero que mi pregunta tenga sentido y gracias por su tiempo, Dan.


Las comprobaciones de tiempo de ejecución están fuera, porque Xcode no te permitirá compilar el código de extensión que usa sharedApplication . Tiene que ser una verificación de tiempo de compilación.

Desafortunadamente, este control no está incorporado, hay que agregarlo. Necesitas hacer algo como:

  1. En la configuración del proyecto para la extensión de hoy, en "Otros indicadores C", agregue su propia macro de compilador personalizado. Para una macro llamada TODAY_EXTENSION , agregue -DTODAY_EXTENSION :
  1. En tu código, comprueba esta macro usando algo como

    #ifndef TODAY_EXTENSION ... app-only code here ... #endif

    Por el contrario, el código que solo debería existir en la extensión se vería como

    #ifdef TODAY_EXTENSION ... extension-only code here ... #endif