2011-08-09 16 views
6

Digamos que necesito darle al usuario la posibilidad de elegir mediante un panel de preferencias si usar la aplicación como "estándar" (con el icono y menú de dock)) o como una aplicación de agente (solo con el menú de la barra de estado).Modificar Info.plist para establecer "Application is agent (UIElement)" en el tiempo de ejecución

Creo que necesito modificar programáticamente el "Info.plist" de la aplicación durante la ejecución, cambiando el parámetro "Application is agent" a YES/NO.

¿Es esta la manera correcta?

P.S. Puedes encontrar este comportamiento en "Gorrión".

Respuesta

13

No debe modificar el archivo Info.plist de su aplicación (ni nada en el paquete de su aplicación) en tiempo de ejecución. Esta es una mala práctica y también romperá tu aplicación si está firmada con código. Esto es más importante hoy en día ya que todas las aplicaciones en la tienda de aplicaciones deben tener código firmado.

Una mejor opción es utilizar la función de Servicios de aplicación TransformProcessType() para mover su aplicación de un fondo a una aplicación de primer plano.

En primer lugar, establecer la clave LSUIElement en la Info.plist a YES y luego comprobar un valor predeterminado de usuario en el lanzamiento para determinar si su aplicación debe estar funcionando como un agente o no su aplicación:

#import <ApplicationServices/ApplicationServices.h> 

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)notification 
{ 
    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"LaunchAsAgentApp"]) 
    { 
     ProcessSerialNumber psn = { 0, kCurrentProcess }; 
     TransformProcessType(&psn, kProcessTransformToForegroundApplication); 
     SetFrontProcess(&psn); 
    } 
} 

@end 

Asegúrese de que usted don' olvide agregar el marco de servicios de aplicaciones a su proyecto.

+0

Además, cambiar 'Info.plist' también fallará con privilegios insuficientes y en volúmenes de solo lectura (como imágenes de disco). – gcbrueckmann

+1

Gracias Rob Keniger.its funciona bien para mí – sp309

Cuestiones relacionadas