Autorizar a un desarrollador no administrador en Xcode / Mac OS

109

Utilizo una cuenta de usuario estándar para mis tareas diarias en Mac OS. Desde que actualicé a Snow Leopard, se me pide que haga lo siguiente cuando se ejecuta un programa desde Xcode:

"Escriba el nombre y la contraseña de un usuario en el grupo 'Herramientas para desarrolladores' para permitir que el acceso a las herramientas para desarrolladores pueda realizar cambios"

Aunque conozco el nombre de usuario / contraseña de administrador, esto es molesto (aunque solo se requiere una vez por inicio de sesión).

El acceso a las herramientas del desarrollador solicita derechos sobre "system.privilege.taskport.debug" desde la aplicación gdb-i386-apple-darwin.

¿Cuál es la mejor forma de evitar esto?

Andrew Cain
fuente

Respuestas:

134

Debe agregar su nombre de usuario de OS X al _developergrupo. Vea las publicaciones en este hilo para obtener más información. El siguiente comando debería hacer el truco:

sudo dscl . append /Groups/_developer GroupMembership <username>
Ned Deily
fuente
1
Esta solución me funcionó durante unos 10 minutos, y luego, por alguna razón, comenzó a pedir mi nombre de usuario / contraseña nuevamente. Intenté escribirlo en la Terminal nuevamente, pero ya no responde.
jowie
Esto funciona para mí y no tengo ningún problema hasta ahora. Anotado solo como referencia.
eonil
9
Esta solución no funcionó para mí hasta que agregué -u <name-of-account-with-root-access>a las opciones. Así que mi mando completo fuedscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
dsjoerg
1
Debería considerar usar 'fusionar' en lugar de 'agregar' si agrega esta línea a un script de integración continua. Merge no lo agregará si ya existe. Consulte 'man dscl' para obtener más detalles.
Russ Van Bert
1
Esto funcionó para agregarme al grupo, pero solo después de que usé la sugerencia de @Kheldar para ingresar primero a una cuenta raíz.
b01
24

Finalmente, pude deshacerme de él usando DevToolsSecurity -enableTerminal. ¡Gracias a @joar_at_work !

FYI : Estoy en Xcode 4.3 y presioné el botón de desactivación cuando se lanzó por primera vez, no preguntes por qué, solo asume que mi perro me obligó a hacerlo :)

chunkyguy
fuente
2
+1 por mencionar DevToolsSecurity. No tenía idea de que existiera tal herramienta. Tuve el problema opuesto, quería deshabilitarlo nuevamente y gracias a esta herramienta finalmente pude :) ¡Simplemente reemplazado -enablecon -disabley funciona como se esperaba!
Mecki
1
Este comando parece no tener ningún efecto. Xcode 4.3 todavía requiere la autenticación de alguien del grupo _developer independientemente de si se usa -enable o -disable.
wcochran
Solo para aclarar, este paso es, al menos en algunos casos, además de agregar al usuario al grupo _developer condscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
Marmoy
No parece funcionar en macOS "El Capitan" con XCode 7.3. La solución de @ Kheldar funcionó para mí.
Laryx Decidua
9
$ dseditgroup -o edit -u <adminusername> -t user -a <developerusername> _developer
cdespinosa
fuente
5
En mi humilde opinión, esta respuesta realmente podría beneficiarse de una explicación un poco más de lo que hace. No es que no me guste escribir sudo rm -rf / en mi sistema, pero entiendes mi punto. : D
Kheldar
8

Debe agregarse al grupo Herramientas para desarrolladores. La sintaxis general para agregar un usuario a un grupo en OS X es la siguiente:

sudo dscl . append /Groups/<group> GroupMembership <username>

Creo que el nombre del grupo DevTools es _developer.

Febo
fuente
3

La solución de Ned Deily funciona perfectamente bien, siempre que su usuario esté autorizado sudo.

Si no es así, puede suabrir una cuenta de administrador y luego usar la suya dscl . append /Groups/_developer GroupMembership $user, donde $ user es el nombre de usuario.

Sin embargo, pensé erróneamente que no porque escribí incorrectamente el nombre del usuario en el comando y falla silenciosamente.

Por lo tanto, después de ingresar este comando, debe verificarlo. Esto comprobará si $ user está en $ group, donde las variables representan respectivamente el nombre de usuario y el nombre del grupo.

dsmemberutil checkmembership -U $user -G $group

Este comando imprimirá el mensaje user is not a member of the groupo user is a member of the group.

Kheldar
fuente
2
¡Gracias! ¡Esto funcionó para mí! Los comandos que funcionaron para OS X Mavericks fueron dscl . append /Groups/_developer GroupMembership username ydsmemberutil checkmembership -U "username goes here" -G "group goes here"
MoralCode
2

Respuesta sugerida por @Stacy Simpson:

Estamos luchando con el problema descrito en estos hilos y ninguna de las resoluciones parece funcionar:

Como soy nuevo en SO, no puedo publicar en ninguno de los hilos. (El primero está cerrado y no estoy de acuerdo con el razonamiento de la localización ...)

De todos modos, creamos una solución alternativa utilizando AppleScript que puede interesar a la gente. El siguiente script debe ejecutarse de forma asincrónica antes de iniciar su prueba automatizada:

osascript <script name> <password> &

Aquí está el guión:

on run argv
    # Delay for 10 seconds as this script runs asynchronously to the automation process and is kicked off first.
    delay 10

    # Inspect all running processes
    tell application "System Events"
        set ProcessList to name of every process
        # Determine if authentication is being requested
        if "SecurityAgent" is in ProcessList then
            # Bring this dialogue to the front
            tell application "SecurityAgent" to activate
            # Enter provided password
            keystroke item 1 of argv
            keystroke return
        end if
    end tell
end run

Probablemente no sea muy seguro, pero es la mejor solución que hemos encontrado para permitir que las pruebas se ejecuten sin requerir la intervención del usuario.

Con suerte, puedo obtener suficientes puntos para publicar la respuesta; o alguien puede desproteger esta pregunta. Saludos.

Martin Turjak
fuente
2

Aquí hay una mejor solución de
Mac OS X que quiere usar el llavero del sistema al compilar el proyecto

  1. Abra el acceso al llavero.
  2. En la esquina superior izquierda, desbloquee el llavero (si está bloqueado).
  3. Elija el llavero del sistema en la esquina superior izquierda.
  4. Busque su certificado de distribución y haga clic en el triángulo desplegable.
  5. Haga doble clic en 'Clave privada' debajo de su certificado de distribución.
  6. En la ventana emergente, vaya a la pestaña Control de acceso.
  7. Seleccione 'Permitir que todas las aplicaciones accedan a este elemento'.
  8. Guarde los cambios.
  9. Cierra todas las ventanas.
  10. Ejecute la aplicación.
Raj
fuente
1

Estoy en Snow Leopard y este no me funcionó del todo. Pero el siguiente procedimiento funcionó:

  1. Primero agregué otra cuenta con privilegios de administrador marcando "Permitir que el usuario administre esta computadora" en Cuentas, por ejemplo, una cuenta con prueba de nombre de usuario
  2. Conectado a la cuenta de prueba
  3. Lancé Xcode, compilé y ejecuté mi proyecto de iPhone. Todo bien, no se lanzaron errores relacionados con los permisos
  4. Desconectado de la cuenta de prueba
  5. Iniciar sesión con la otra cuenta que tiene privilegios de administrador
  6. Eliminó los privilegios de administrador de la cuenta de prueba quitando la marca de "Permitir al usuario administrar esta computadora" en Cuentas
  7. Regresó a la cuenta de prueba
  8. Eliminé el directorio del proyecto de iPhone y nuevamente se desprotegió del repositorio (en mi caso, svn)
  9. Lanzó Xcode, compiló y ejecutó el proyecto. No obtuve ningún error y la aplicación funcionó bien en el simulador de iPhone.
Naveen Kansara
fuente
0

Después de correr:

sudo dscl . append /Groups/_developer GroupMembership <username>

por la respuesta anterior, es posible que todavía te pida que introduzca en su propia contraseña:

Necesitamos la autorización de un usuario administrador para ejecutar el depurador. Esto solo sucederá una vez por sesión de inicio de sesión.

Lo que realmente significa es cualquier usuario _developer groupmember, por lo que solo su usuario / contraseña que no sea administrador funcionará aquí, pero para deshacerse de él por completo (sin mensajes después de un reinicio) también deberá ejecutar:

sudo DevToolsSecurity -enable

(ejecutarlo con sudo como usuario administrador / como root hará que pueda hacerlo de forma remota sin una solicitud de contraseña de interfaz gráfica de usuario)

timofei7
fuente