macos - solicita - quitar contraseña llavero mac
Compruebe si la aplicación es un elemento de inicio de sesión en OS X Yosemite (3)
En mi aplicación Mac, he estado usando SMCopyAllJobDictionaries()
para verificar si la aplicación se iniciará automáticamente al iniciar sesión. Básicamente, obtengo una matriz de todos los elementos de inicio de sesión y verifico si mi ID de paquete está en la matriz.
Esta llamada a la función funciona hasta Mavericks, pero está en desuso en Yosemite . Según Apple,
Esta rutina está en desuso y se eliminará en una versión futura. No habrá reemplazo proporcionado.
Sin embargo, ¿cómo puedo hacer el mismo trabajo en Yosemite? Tengo que comprobar si mi aplicación está en la lista de elementos de inicio de sesión para mostrar una casilla de verificación correctamente. No pude encontrar documentación relevante de Apple.
A partir de WWDC 2017, los ingenieros de Apple han declarado que esta sigue siendo la API preferida para usar.
Sin embargo, el uso de esta API hará que tu compilación falle. No desactive todas las advertencias de funciones en desuso. En su lugar, para permitir que su aplicación compile, SMCopyAllJobDictionaries
con lo siguiente:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
CFArrayRef cfJobDicts = SMCopyAllJobDictionaries( kSMDomainUserLaunchd );
#pragma clang diagnostic pop
Si este problema es importante para su aplicación y le gustaría que Apple proporcione una solución limpia, presente un radar; Esto ayuda a los ingenieros de Apple a determinar las prioridades de los elementos de trabajo.
Después de algunas investigaciones, parece que no hay una respuesta fácil para esto, punto. Después de probar varias aplicaciones, incluyendo F.lux y BetterSnapTool, he podido desincronizar fácilmente sus interfaces de usuario de las preferencias del sistema. Si habilito "iniciar al iniciar" en cualquiera de estas aplicaciones, luego las elimino del registro de preferencias del sistema en la sección de elementos, luego las relanzo, sus interfaces aún piensan que están configuradas para iniciarse al iniciar. Interactuar con sus casillas de verificación no hace nada, ya que las aplicaciones intentan eliminarse de la lista a la que ya no pertenecen y se requiere un segundo clic para hacer cualquier cosa.
Para mí, esto significa que mantienen su propio estado interno como BOOL y lo guardan entre lanzamientos y que simplemente no hay una manera de hacer que la lista se sincronice con Yosemite. Si alguien sabe lo contrario, les daré la recompensa.
Estoy usando LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL)
para un propósito similar. Vea la respuesta de Nick Moore a ¿Cómo abre su aplicación al iniciar sesión? para un ejemplo.
Tenga en cuenta que esto funciona para los elementos de inicio de sesión, pero puede que no funcione para los trabajos launchd.