Autorizza uno sviluppatore non amministratore in Xcode / Mac OS


109

Uso un account utente standard per le mie attività quotidiane su Mac OS. Dall'aggiornamento a Snow Leopard mi viene chiesto di fare quanto segue quando un programma viene eseguito da Xcode:

"Digita il nome e la password di un utente nel gruppo" Strumenti per sviluppatori "per consentire a Accesso agli strumenti per sviluppatori di apportare modifiche"

Anche se conosco il nome utente / password dell'amministratore, questo è fastidioso (sebbene richiesto solo una volta per accesso).

L'accesso agli strumenti per sviluppatori richiede i diritti su "system.privilege.taskport.debug" dall'applicazione gdb-i386-apple-darwin.

Qual è il modo migliore per aggirare questo?

Risposte:


134

Devi aggiungere il tuo nome utente OS X al _developergruppo. Vedi i post in questo thread per maggiori informazioni. Il seguente comando dovrebbe fare il trucco:

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

1
Questa soluzione ha funzionato per me per circa 10 minuti, quindi per qualche motivo ha iniziato a chiedere di nuovo il mio nome utente / password. Ho provato a digitarlo di nuovo in Terminale, ma non risponde più.
jowie

Questo funziona per me e non ho problemi fino ad ora. Notato solo per riferimento.
eonil

9
Questa soluzione non ha funzionato per me fino a quando non ho aggiunto -u <name-of-account-with-root-access>alle opzioni. Quindi il mio comando completo eradscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
dsjoerg

1
Se aggiungi questa riga a uno script di integrazione continua, dovresti considerare l'utilizzo di "merge" invece di "append". Unisci non lo aggiungerà se esiste già. Vedere "man dscl" per maggiori dettagli.
Russ Van Bert

1
Questo ha funzionato per aggiungermi al gruppo, ma solo dopo aver usato il suggerimento di @Kheldar per su prima in un account di root.
b01

24

Alla fine, sono stato in grado di sbarazzarmene usando DevToolsSecurity -enablesu Terminal. Grazie a @joar_at_work !

FYI : Sono su Xcode 4.3 e ho premuto il pulsante di disabilitazione quando è stato lanciato per la prima volta, non chiedere perché, presumo solo che il mio cane me l'abbia fatto fare :)


2
+1 per aver menzionato DevToolsSecurity. Non avevo idea che esistesse uno strumento del genere. Ho avuto il problema opposto, volevo disabilitarlo di nuovo e grazie a questo strumento finalmente sono stato in grado di :) Sostituito -enablecon -disablee funziona come previsto!
Mecki

1
Questo comando sembra non avere alcun effetto. Xcode 4.3 richiede ancora l'autenticazione da parte di qualcuno nel gruppo _developer indipendentemente dal fatto che venga utilizzato -enable o -disable.
wcochran

Giusto per chiarire, questo passaggio è, almeno in alcuni casi, oltre ad aggiungere l'utente al gruppo _developer condscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
Marmoy

Non sembra funzionare su macOS "El Capitan" con XCode 7.3. La soluzione di @ Kheldar ha funzionato per me.
Laryx Decidua

9
$ dseditgroup -o edit -u <adminusername> -t user -a <developerusername> _developer

5
A mio modesto parere, questa risposta potrebbe davvero trarre vantaggio da un po 'più di spiegazioni su ciò che fa. Non è che non mi piaccia digitare sudo rm -rf / sul mio sistema, ma ottieni il mio punto. : D
Kheldar

8

Dovresti aggiungerti al gruppo Strumenti per sviluppatori. La sintassi generale per l'aggiunta di un utente a un gruppo in OS X è la seguente:

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

Credo che il nome del gruppo DevTools sia _developer.


3

La soluzione di Ned Deily funziona perfettamente, a condizione che all'utente sia consentito sudo.

In caso contrario, puoi accedere sua un account amministratore, quindi utilizzare il suo dscl . append /Groups/_developer GroupMembership $user, dove $ user è il nome utente.

Tuttavia, ho erroneamente pensato che non fosse così perché ho digitato erroneamente il nome dell'utente nel comando e non riesce silenziosamente.

Pertanto, dopo aver inserito questo comando, dovresti verificarlo. Questo controllerà se $ user è in $ group, dove le variabili rappresentano rispettivamente il nome utente e il nome del gruppo.

dsmemberutil checkmembership -U $user -G $group

Questo comando stamperà il messaggio user is not a member of the groupo user is a member of the group.


2
Grazie! Questo ha funzionato per me! I comandi che hanno funzionato per OS X Mavericks erano dscl . append /Groups/_developer GroupMembership username edsmemberutil checkmembership -U "username goes here" -G "group goes here"
MoralCode

2

Risposta suggerita da @Stacy Simpson:

Stiamo lottando con il problema descritto in questi thread e nessuna delle risoluzioni sembra funzionare:

Dato che sono nuovo in SO, non posso postare in nessuno dei thread. (Il primo è effettivamente chiuso e non sono d'accordo con il ragionamento sulla localizzazione ...)

Ad ogni modo, abbiamo creato una soluzione utilizzando AppleScript a cui le persone potrebbero essere interessate. Lo script seguente dovrebbe essere eseguito in modo asincrono prima di avviare il test automatizzato:

osascript <script name> <password> &

Ecco lo script:

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

Probabilmente non è molto sicuro, ma è la soluzione migliore che abbiamo escogitato per consentire l'esecuzione dei test senza richiedere l'intervento dell'utente.

Se tutto va bene, posso ottenere abbastanza punti per pubblicare la risposta; oppure qualcuno può rimuovere la protezione da questa domanda. Saluti.


2

Ecco una soluzione migliore da
Mac OS X che vuole utilizzare il portachiavi di sistema durante la compilazione del progetto

  1. Apri Accesso Portachiavi.
  2. Nell'angolo in alto a sinistra, sblocca il portachiavi (se è bloccato).
  3. Scegli il portachiavi di sistema nell'angolo in alto a sinistra.
  4. Trova il tuo certificato di distribuzione e fai clic sul triangolo di apertura.
  5. Fare doppio clic su "Chiave privata" sotto il certificato di distribuzione.
  6. Nel popup, vai alla scheda Controllo accessi.
  7. Seleziona "Consenti a tutte le applicazioni di accedere a questo elemento".
  8. Salva le modifiche.
  9. Chiudi tutte le finestre.
  10. Esegui l'applicazione.


1

Sono su Snow Leopard e questo non ha funzionato per me. Ma la seguente procedura ha funzionato:

  1. Per prima cosa ho aggiunto un altro account con privilegi di amministratore selezionando "Consenti all'utente di amministrare questo computer" in Account, ad esempio un account con test del nome utente
  2. Accesso all'account di prova
  3. Avviato Xcode, compilato ed eseguito il mio progetto iPhone. Tutto ok, non sono stati lanciati errori relativi alle autorizzazioni
  4. Disconnesso dall'account di prova
  5. Accesso effettuato con un altro account con privilegi di amministratore
  6. Ha tolto i privilegi di amministratore dall'account di prova rimuovendo il segno di spunta da "Consenti all'utente di amministrare questo computer" in Account
  7. Ricollegato all'account di prova
  8. Eliminata la directory del progetto iPhone e nuovamente estratta dal repository (nel mio caso svn)
  9. Avviato Xcode, compilato ed eseguito il progetto. Non ho ricevuto alcun errore e l'app ha funzionato bene nel simulatore iPhone.

0

Dopo aver eseguito:

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

in base alla risposta sopra, potresti comunque ricevere la richiesta di inserire la tua password:

Abbiamo bisogno dell'autorizzazione di un utente amministratore per eseguire il debugger. Ciò avverrà solo una volta per sessione di accesso.

Ciò che significa veramente è qualsiasi utente membro del gruppo _developer quindi solo il tuo utente / password non amministratore funzionerà qui, ma per eliminarlo completamente (nessuna richiesta dopo un riavvio) dovrai anche eseguire:

sudo DevToolsSecurity -enable

(eseguendolo con sudo come utente amministratore / come root lo farà in modo da poterlo fare da remoto senza una richiesta di password gui)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.