Autorisieren Sie einen Entwickler ohne Administratorrechte in Xcode / Mac OS

109

Ich verwende ein Standardbenutzerkonto für meine täglichen Aufgaben unter Mac OS. Seit dem Upgrade auf Snow Leopard werde ich gebeten, Folgendes zu tun, wenn ein Programm in Xcode ausgeführt wird:

"Geben Sie den Namen und das Kennwort eines Benutzers in die Gruppe 'Developer Tools' ein, damit Developer Tools Access Änderungen vornehmen kann."

Obwohl ich den Benutzernamen / das Passwort des Administrators kenne, ist dies ärgerlich (obwohl nur einmal pro Login erforderlich).

Der Zugriff auf die Entwicklertools fordert Rechte für "system.privilege.taskport.debug" von der Anwendung gdb-i386-apple-darwin an.

Was ist der beste Weg, um dies zu umgehen?

Andrew Cain
quelle

Antworten:

134

Sie müssen der _developerGruppe Ihren OS X-Benutzernamen hinzufügen . Weitere Informationen finden Sie in den Beiträgen in diesem Thread . Der folgende Befehl sollte den Trick ausführen:

sudo dscl . append /Groups/_developer GroupMembership <username>
Ned Deily
quelle
1
Diese Lösung funktionierte ungefähr 10 Minuten lang für mich und fragte dann aus irgendeinem Grund erneut nach meinem Benutzernamen / Passwort. Ich habe erneut versucht, es in Terminal einzugeben, aber es reagiert nicht mehr.
Jowie
Das funktioniert bei mir und ich habe bis jetzt kein Problem. Nur als Referenz notiert.
Eonil
9
Diese Lösung hat bei mir nicht funktioniert, bis ich -u <name-of-account-with-root-access>die Optionen erweitert habe. Also war mein volles Kommandodscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
dsjoerg
1
Sie sollten in Betracht ziehen, "Zusammenführen" anstelle von "Anhängen" zu verwenden, wenn Sie diese Zeile einem Skript für die kontinuierliche Integration hinzufügen. Beim Zusammenführen wird es nicht hinzugefügt, wenn es bereits vorhanden ist. Siehe 'man dscl' für weitere Details.
Russ Van Bert
1
Dies funktionierte, um mich zur Gruppe hinzuzufügen, aber erst, nachdem ich den Vorschlag von @Kheldar verwendet hatte, um zuerst in ein Root-Konto zu gelangen.
b01
24

Endlich konnte ich es mit DevToolsSecurity -enableTerminal loswerden . Danke an @joar_at_work !

Zu Ihrer Information : Ich bin auf Xcode 4.3 und habe beim ersten Start die Deaktivierungstaste gedrückt. Fragen Sie nicht warum, nehmen Sie einfach an, mein Hund hat mich dazu gebracht :)

Chunkyguy
quelle
2
+1 für die Erwähnung von DevToolsSecurity. Ich hatte keine Ahnung, dass es ein solches Tool gibt. Ich hatte das gegenteilige Problem, ich wollte es wieder deaktivieren und dank dieses Tools konnte ich es endlich :) Einfach ersetzt -enabledurch -disableund das funktioniert wie erwartet!
Mecki
1
Dieser Befehl scheint überhaupt keine Wirkung zu haben. Xcode 4.3 erfordert weiterhin eine Authentifizierung von jemandem in der _developer-Gruppe, unabhängig davon, ob -enable oder -disable verwendet wird.
Wcochran
Um dies zu verdeutlichen, ist dieser Schritt zumindest in einigen Fällen zusätzlich zum Hinzufügen des Benutzers zur _Entwicklergruppe mitdscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
Marmoy
Scheint unter macOS "El Capitan" mit XCode 7.3 nicht zu funktionieren. @ Kheldars Lösung hat bei mir funktioniert.
Laryx Decidua
9
$ dseditgroup -o edit -u <adminusername> -t user -a <developerusername> _developer
cdespinosa
quelle
5
Meiner bescheidenen Meinung nach könnte diese Antwort wirklich von einer etwas genaueren Erklärung dessen profitieren, was sie tut. Es ist nicht so, dass ich nicht gerne sudo rm -rf / auf meinem System tippe, aber Sie verstehen, worum es geht. : D
Kheldar
8

Sie sollten sich der Gruppe Entwicklertools hinzufügen. Die allgemeine Syntax zum Hinzufügen eines Benutzers zu einer Gruppe in OS X lautet wie folgt:

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

Ich glaube, der Name für die DevTools-Gruppe ist _developer.

Phoebus
quelle
3

Die Lösung von Ned Deily funktioniert einwandfrei, vorausgesetzt, Ihr Benutzer darf sudo .

Wenn dies nicht der suFall ist, können Sie ein Administratorkonto einrichten und dann sein Konto verwenden dscl . append /Groups/_developer GroupMembership $user, wobei $ user der Benutzername ist.

Ich dachte jedoch fälschlicherweise, dass dies nicht der Fall ist, weil ich den Namen des Benutzers im Befehl falsch eingegeben habe und es stillschweigend fehlschlägt.

Nachdem Sie diesen Befehl eingegeben haben, sollten Sie ihn daher überprüfen. Dadurch wird überprüft, ob sich $ user in der Gruppe $ befindet, wobei die Variablen jeweils den Benutzernamen und den Gruppennamen darstellen.

dsmemberutil checkmembership -U $user -G $group

Dieser Befehl druckt entweder die Nachricht user is not a member of the groupoder user is a member of the group.

Kheldar
quelle
2
Vielen Dank! Das hat bei mir funktioniert! Die Befehle, die für OS X Mavericks dscl . append /Groups/_developer GroupMembership username dsmemberutil checkmembership -U "username goes here" -G "group goes here"
funktionierten,
2

Antwort von @Stacy Simpson vorgeschlagen:

Wir haben Probleme mit dem in diesen Threads beschriebenen Problem, und keine der Lösungen scheint zu funktionieren:

Da ich neu bei SO bin, kann ich in keinem Thread posten. (Der erste ist tatsächlich geschlossen und ich bin mit den Lokalisierungsgründen nicht einverstanden ...)

Wie auch immer, wir haben mit AppleScript eine Problemumgehung erstellt, an der die Leute interessiert sein könnten. Das folgende Skript sollte vor dem Starten Ihres automatisierten Tests asynchron ausgeführt werden:

osascript <script name> <password> &

Hier ist das Skript:

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

Wahrscheinlich nicht sehr sicher, aber es ist die beste Lösung, die wir uns ausgedacht haben, um Tests ohne Benutzereingriff ausführen zu können.

Hoffentlich kann ich genug Punkte bekommen, um die Antwort zu posten. oder jemand kann diese Frage aufheben. Grüße.

Martin Turjak
quelle
2

Hier ist eine bessere Lösung von
Mac OS X, die beim Kompilieren des Projekts einen Systemschlüsselbund verwenden möchte

  1. Öffnen Sie den Schlüsselbundzugriff.
  2. Entsperren Sie in der oberen linken Ecke den Schlüsselbund (falls er gesperrt ist).
  3. Wählen Sie den Systemschlüsselbund in der oberen linken Ecke.
  4. Suchen Sie Ihr Vertriebszertifikat und klicken Sie auf das Offenlegungsdreieck.
  5. Doppelklicken Sie unter Ihrem Vertriebszertifikat auf "Privater Schlüssel".
  6. Wechseln Sie im Popup zur Registerkarte Zugriffssteuerung.
  7. Wählen Sie "Allen Anwendungen erlauben, auf dieses Element zuzugreifen".
  8. Speichern Sie die Änderungen.
  9. Schließen Sie alle Fenster.
  10. Führen Sie die Anwendung aus.
Raj
quelle
1

Ich bin auf Snow Leopard und dieser hat bei mir nicht ganz funktioniert. Aber das folgende Verfahren hat funktioniert:

  1. Fügen Sie zunächst ein weiteres Konto mit Administratorrechten hinzu, indem Sie unter "Konten" die Option "Benutzer darf diesen Computer verwalten" aktivieren, z. B. ein Konto mit Benutzername- Test
  2. Gespeichert in den Test - Account
  3. Xcode gestartet, mein iPhone-Projekt kompiliert und ausgeführt. Alles in Ordnung, es wurden keine Fehler im Zusammenhang mit Berechtigungen ausgegeben
  4. Abgemeldet des Testkonto
  5. Mit einem anderen Konto mit Administratorrechten angemeldet
  6. Nahm die Admin - Privilegien weg von dem Testkonto durch das Häkchen aus dem Entfernen „ Den Benutzer darf diesen Computer zu verwalten“ unter Accounts
  7. Gespeichert zurück in das Testkonto
  8. Das iPhone-Projektverzeichnis gelöscht und erneut aus dem Repository ausgecheckt (in meinem Fall svn)
  9. Xcode gestartet, kompiliert und das Projekt ausgeführt. Ich habe keine Fehler erhalten und die App lief gut im iPhone Simulator.
Naveen Kansara
quelle
0

Nachdem Sie ausgeführt haben:

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

Gemäß der obigen Antwort werden Sie möglicherweise weiterhin aufgefordert, Ihr eigenes Passwort einzugeben:

Wir benötigen die Berechtigung eines Administrators, um den Debugger auszuführen. Dies geschieht nur einmal pro Anmeldesitzung.

Was es wirklich bedeutet, ist jeder _developer- Gruppenmitgliedsbenutzer, so dass hier nur Ihr Nicht-Administrator-Benutzer / Passwort funktioniert. Um es jedoch vollständig zu entfernen (keine Eingabeaufforderungen nach einem Neustart), müssen Sie auch Folgendes ausführen:

sudo DevToolsSecurity -enable

(Wenn Sie es mit sudo als Administrator / als Root ausführen, wird es so ausgeführt, dass Sie es ohne GUI-Passwortabfrage aus der Ferne ausführen können.)

timofei7
quelle