Tenemos un problema con la actualización de una herramienta de ayuda con SMJobBless que nos ha estado confundiendo durante días.No se puede acceder al elemento de llavero después de actualizar SMJobBless
Estamos desarrollando una aplicación para la cual en algún momento tenemos que realizar tareas administrativas (carga/descarga de un kext). También estamos utilizando el llavero para almacenar información de la cuenta para nuestra aplicación.
Para las tareas administrativas, utilizamos una herramienta de ayuda que se instala utilizando SMJobBless con el que nos comunicamos utilizando puertos DO sobre Mach (con NSConnection).
En la herramienta de ayuda:
// use our bundle id as our service name
NSString* name = [[NSBundle mainBundle] bundleIdentifier];
launch_data_t checkinRequest = launch_data_new_string(LAUNCH_KEY_CHECKIN);
launch_data_t checkinResponse = launch_msg(checkinRequest);
launch_data_t machServicesDict = launch_data_dict_lookup(checkinResponse, LAUNCH_JOBKEY_MACHSERVICES);
launch_data_t machPort = launch_data_dict_lookup(machServicesDict, [name UTF8String]);
mach_port_t mp = launch_data_get_machport(machPort);
launch_data_free(checkinResponse);
launch_data_free(checkinRequest);
NSMachPort *receivePort = [[NSMachPort alloc] initWithMachPort:mp];
NSConnection *server = [NSConnection connectionWithReceivePort:receivePort sendPort:nil];
En la aplicación:
NSConnection *conn = [NSConnection connectionWithRegisteredName:HELPER_BUNDLE_IDENTIFIER host:nil];
id proxyServerObject = [conn rootProxy];
if(conn && proxyServerObject) {
return [proxyServerObject someMethod];
}
return NO;
FIRMAMOS tanto la aplicación como la herramienta de ayuda mediante un certificado codesign de Thawte. Hasta ahora, todo funciona como un encanto. La herramienta de ayuda está instalada y podemos comunicarnos con ella utilizando DO; nuestro kext se carga y descarga con éxito.
El problema comienza cuando tratamos de actualizar nuestra herramienta de ayuda. Usamos el diccionario de información de la herramienta instalada y la herramienta incluida en nuestro paquete de aplicaciones para verificar si se requiere una actualización de la herramienta y llamar a SMJobBless nuevamente para realizar la actualización.
Después de la llamada SMJobBless, las siguientes líneas aparecen en la consola:
6/19/12 10:31:24.000 AM kernel: CODE SIGNING: cs_invalid_page(0x104e17000): p=74362[OURAPP] clearing CS_VALID
6/19/12 10:31:24.000 AM kernel: CODE SIGNING: cs_invalid_page(0x10d0de000): p=74364[OURAPPHELPER] clearing CS_VALID
Después de esto, la aplicación no puede leer la contraseña de la aplicación de nuestro artículo llavero, la función vuelve SecKeychainItemCopyContent
errSecAuthFailed (-25293)
. Sin embargo, no se informa ningún error si verificamos manualmente la firma del código de nuestra herramienta de ayuda instalada o paquete de aplicaciones usando codesign -vvvv PATH_TO_TOOL_OR_BUNDLE
. La herramienta y la aplicación están firmadas fuera del entorno de Xcode y los contenidos no se modifican después del proceso de firma.
Hemos encontrado one other post que describe una situación similar, pero esa pregunta aún no ha sido respondida. Un problema relacionado podría ser SMJobBless returning error 4098.
Estamos probando en OSX 10.7.4.
¿Alguien se enfrentó a problemas similares o hay algo obvio de que estamos haciendo mal?
Actualmente me encuentro con este error al intentar actualizar la herramienta de ayuda en Yosemite (10.10).Parece que funciona bien en El Capitán (10.11). ¿Tal vez Apple solucionó el error? –