2011-09-29 12 views
5

Parece que no encuentro ninguna documentación al respecto, así que espero que alguien pueda confirmar el comportamiento que estoy viendo con el código de muestra SMJobBless de Apple.SMJobBless - documentación sobre cuándo solicita la contraseña de administrador

Tenía la impresión de que solo pediría una contraseña de administrador si detectaba que una nueva versión de la herramienta de ayuda necesitaba instalarse.

Sin embargo, esta impresión es aparentemente incorrecta.

El comportamiento que veo en 10.6 es que si abro la aplicación por primera vez, se le pedirá la contraseña. Si lanzo casi de inmediato, no lo hará. Sin embargo, si espero el tiempo suficiente, volverá a solicitar la contraseña. Durante todo esto, la herramienta de ayuda no cambia.

¿Alguien puede indicar documentación que define esto como el comportamiento correcto?

Respuesta

12

Si alguien está interesado, esto (probablemente) resultó ser un error y uno ha sido archivado. rdar: // 10280469

La forma en que el sistema funciona actualmente es que va a pedir una contraseña de administrador cada vez independientemente de si la función SMJobBless necesita o no instalar la herramienta de ayuda. El error es (probablemente) que no se debe realizar una solicitud de contraseña de administrador si no se necesita instalar la herramienta auxiliar (por ejemplo, ya está instalada y tiene la misma versión que la del paquete de la aplicación).

Por lo tanto, lo que esto significa es que la determinación de si la herramienta de ayuda necesita instalarse o no antes de llamar a SMJobBless y SMJobBless solo debe invocarse si ya se sabe que la herramienta de ayuda debe ser instalado

En mi caso, solo necesito comprobar si la herramienta está instalada (SMJobCopyDictionary maneja esto) y, si la herramienta está instalada, si su versión es o no más antigua que la versión de la herramienta en mi paquete de aplicaciones.

Algunos códigos (incompletos) para verificar si la herramienta está instalada y cuáles son las versiones están debajo.

Existe otra alternativa para hacer una verificación de versión de la herramienta de ayuda, que es para que la herramienta de ayuda reciba una solicitud para su versión y para que le envíe una respuesta de versión. Personalmente, me gusta el método a continuación, pero quería mencionar esta alternativa, ya que puede ser el mejor camino en algunas situaciones.

NSDictionary* installedHelperJobData; 

installedHelperJobData = (NSDictionary*)SMJobCopyDictionary(kSMDomainSystemLaunchd, (CFStringRef)@"com.apple.bsd.SMJobBlessHelper"); 

NSString*  installedPath   = [[installedHelperJobData objectForKey:@"ProgramArguments"] objectAtIndex:0]; 
NSURL*   installedPathURL  = [NSURL fileURLWithPath:installedPath]; 

NSDictionary* installedInfoPlist  = (NSDictionary*)CFBundleCopyInfoDictionaryForURL((CFURLRef)installedPathURL); 
NSString*  installedBundleVersion = [installedInfoPlist objectForKey:@"CFBundleVersion"]; 
NSInteger  installedVersion  = [installedBundleVersion integerValue]; 

NSLog(@"installedVersion: %ld", (long)installedVersion); 

NSBundle*  appBundle  = [NSBundle mainBundle]; 
NSURL*   appBundleURL = [appBundle bundleURL]; 

NSURL*   currentHelperToolURL = [appBundleURL URLByAppendingPathComponent:@"Contents/Library/LaunchServices/com.apple.bsd.SMJobBlessHelper"]; 
NSDictionary* currentInfoPlist  = (NSDictionary*)CFBundleCopyInfoDictionaryForURL((CFURLRef)currentHelperToolURL); 
NSString*  currentBundleVersion = [currentInfoPlist objectForKey:@"CFBundleVersion"]; 
NSInteger  currentVersion   = [currentBundleVersion integerValue]; 

NSLog(@"currentVersion: %ld", (long)currentVersion); 
+0

Gracias - el SM * doco es un poco difícil de atravesar, fue muy útil. –

+1

También vea este hilo de correo (de la misma pregunta del mismo autor) que además de lo anterior contiene una aplicación de ejemplo que incluye los controles anteriores más un cheque de firma de código para la herramienta auxiliar instalada (para evitar que confíe en un ayudante reemplazado con el mismo nombre/versión): http://www.cocoabuilder.com/archive/cocoa/309298-question-about-smjobbless.html –

Cuestiones relacionadas