Autoryzuj programistę niebędącego administratorem w Xcode / Mac OS

109

Używam standardowego konta użytkownika do codziennych zadań w systemie Mac OS. Od czasu aktualizacji do Snow Leopard jestem proszony o wykonanie następujących czynności, gdy program jest uruchamiany z poziomu Xcode:

„Wpisz nazwę i hasło użytkownika w grupie„ Narzędzia dla programistów ”, aby umożliwić dostęp narzędziom programistycznym do wprowadzania zmian”

Chociaż znam nazwę użytkownika / hasło administratora, jest to denerwujące (choć wymagane tylko raz na logowanie).

Dostęp do narzędzi programistycznych prosi o uprawnienia do „system.privilege.taskport.debug” z aplikacji gdb-i386-apple-darwin.

Jaki jest najlepszy sposób obejścia tego?

Andrew Cain
źródło

Odpowiedzi:

134

Musisz dodać swoją nazwę użytkownika OS X do _developergrupy. Zobacz posty w tym wątku, aby uzyskać więcej informacji. Poniższe polecenie powinno załatwić sprawę:

sudo dscl . append /Groups/_developer GroupMembership <username>
Ned Deily
źródło
1
To rozwiązanie działało u mnie przez około 10 minut, a potem z jakiegoś powodu ponownie zaczęło pytać o moją nazwę użytkownika / hasło. Próbowałem ponownie wpisać go w Terminalu, ale już nie odpowiada.
jowie
To działa dla mnie i do tej pory nie mam problemu. Notowane tylko w celach informacyjnych.
eonil
9
To rozwiązanie nie zadziałało, dopóki nie dodałem -u <name-of-account-with-root-access>do opcji. Tak więc moje pełne polecenie brzmiałodscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
dsjoerg
1
Powinieneś rozważyć użycie „merge” zamiast „append”, jeśli dodasz ten wiersz do skryptu ciągłej integracji. Scalanie nie doda go, jeśli już istnieje. Aby uzyskać więcej informacji, zobacz „man dscl”.
Russ Van Bert
1
To zadziałało, aby dodać mnie do grupy, ale dopiero po tym, jak użyłem sugestii @Kheldar, aby najpierw dodać su do konta root.
b01
24

Wreszcie udało mi się go pozbyć za pomocą DevToolsSecurity -enableterminala. Dzięki @joar_at_work !

FYI : Jestem na Xcode 4.3 i nacisnąłem przycisk wyłączania , gdy został uruchomiony po raz pierwszy, nie pytaj dlaczego, po prostu załóż, że mój pies mnie do tego zmusił :)

chunkyguy
źródło
2
+1 za wzmiankę o DevToolsSecurity. Nie miałem pojęcia, że ​​takie narzędzie istnieje. Miałem odwrotny problem, chciałem zrobić to ponownie wyłączyć i dzięki temu narzędziu w końcu udało się :) Wystarczy wymienić -enablez -disablei że działa zgodnie z oczekiwaniami!
Mecki
1
Wydaje się, że to polecenie nie ma żadnego efektu. Xcode 4.3 nadal wymaga uwierzytelnienia od kogoś z grupy _developer, niezależnie od tego, czy użyto opcji -enable czy -disable.
wcochran
Dla wyjaśnienia, ten krok jest, przynajmniej w niektórych przypadkach, oprócz dodania użytkownika do grupy _developer za pomocądscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
Marmoy
Wydaje się, że nie działa na macOS „El Capitan” z XCode 7.3. Rozwiązanie @ Kheldar zadziałało dla mnie.
Laryx Decidua
9
$ dseditgroup -o edit -u <adminusername> -t user -a <developerusername> _developer
cdespinosa
źródło
5
Moim skromnym zdaniem ta odpowiedź naprawdę przydałaby się, gdybyśmy dokładniej wyjaśnili, czym się ona zajmuje. Nie chodzi o to, że nie lubię pisać sudo rm -rf / w moim systemie, ale rozumiesz. : D
Kheldar
8

Należy dodać się do grupy narzędzi deweloperskich. Ogólna składnia dodawania użytkownika do grupy w OS X jest następująca:

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

Uważam, że nazwa grupy DevTools to _developer.

phoebus
źródło
3

Rozwiązanie Ned Deily działa doskonale, pod warunkiem, że użytkownik ma na to pozwolenie sudo.

Jeśli nie, możesz zalogować się na sukonto administratora, a następnie użyć jego dscl . append /Groups/_developer GroupMembership $user, gdzie $ user to nazwa użytkownika.

Jednak błędnie pomyślałem, że tak nie jest, ponieważ błędnie wpisałem nazwę użytkownika w poleceniu i po cichu zawodzi.

Dlatego po wpisaniu tego polecenia należy je zweryfikować. Spowoduje to sprawdzenie, czy $ user jest w $ group, gdzie zmienne reprezentują odpowiednio nazwę użytkownika i nazwę grupy.

dsmemberutil checkmembership -U $user -G $group

To polecenie wydrukuje wiadomość user is not a member of the grouplub user is a member of the group.

Kheldar
źródło
2
Dzięki! To zadziałało dla mnie! Polecenia, które działały dla OS X Mavericks to dscl . append /Groups/_developer GroupMembership username idsmemberutil checkmembership -U "username goes here" -G "group goes here"
MoralCode
2

Odpowiedź sugerowana przez @Stacy Simpson:

Borykamy się z problemem opisanym w tych wątkach i żadna z rozwiązań nie wydaje się działać:

Ponieważ jestem nowy w SO, nie mogę pisać w żadnym wątku. (Pierwsza z nich jest właściwie zamknięta i nie zgadzam się z rozumowaniem lokalizacji ...)

W każdym razie stworzyliśmy obejście przy użyciu AppleScript, które mogą być interesujące dla użytkowników. Poniższy skrypt powinien zostać wykonany asynchronicznie przed uruchomieniem testu automatycznego:

osascript <script name> <password> &

Oto skrypt:

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

Prawdopodobnie niezbyt bezpieczne, ale jest to najlepsze obejście, jakie wymyśliliśmy, aby umożliwić uruchamianie testów bez konieczności interwencji użytkownika.

Mam nadzieję, że zdobędę wystarczającą liczbę punktów, aby opublikować odpowiedź; lub ktoś może wyłączyć ochronę tego pytania. Pozdrowienia.

Martin Turjak
źródło
2

Oto lepsze rozwiązanie z
Mac OS X, które chce użyć pęku kluczy systemowych podczas kompilacji projektu

  1. Otwórz dostęp do pęku kluczy.
  2. W lewym górnym rogu odblokuj pęku kluczy (jeśli jest zablokowany).
  3. Wybierz pęku kluczy System w lewym górnym rogu.
  4. Znajdź swój certyfikat dystrybucyjny i kliknij trójkąt ujawnienia.
  5. Kliknij dwukrotnie „Klucz prywatny” pod certyfikatem dystrybucyjnym.
  6. W wyskakującym okienku przejdź do zakładki Kontrola dostępu.
  7. Wybierz opcję „Zezwalaj wszystkim aplikacjom na dostęp do tego elementu”.
  8. Zapisz zmiany.
  9. Zamknij wszystkie okna.
  10. Uruchom aplikację.
Raj
źródło
1

Jestem na Snow Leopardzie i ten nie do końca mi pasował. Ale następująca procedura zadziałała:

  1. Najpierw dodano inne konto z uprawnieniami administratora, zaznaczając „Zezwól użytkownikowi na administrowanie tym komputerem” w sekcji Konta, na przykład konto z testem nazwy użytkownika
  2. Zalogowano się na konto testowe
  3. Uruchomiłem Xcode, skompilowałem i uruchomiłem mój projekt iPhone'a. Wszystko ok, nie zostały wyrzucone żadne błędy związane z uprawnieniami
  4. Wylogowano się z konta testowego
  5. Zalogowano się na inne konto z uprawnieniami administratora
  6. Usunięto uprawnienia administratora z konta testowego , usuwając zaznaczenie z pola „Zezwól użytkownikowi na administrowanie tym komputerem” w sekcji Konta
  7. Zalogowano się ponownie na konto testowe
  8. Usunięto katalog projektu iPhone'a i ponownie wyewidencjonowano z repozytorium (w moim przypadku svn)
  9. Uruchomił Xcode, skompilował i uruchomił projekt. Nie dostałem żadnych błędów, a aplikacja działała dobrze w symulatorze iPhone'a.
Naveen Kansara
źródło
0

Po biegu:

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

zgodnie z powyższą odpowiedzią nadal możesz zostać poproszony o wprowadzenie własnego hasła:

Potrzebujemy autoryzacji od administratora, aby uruchomić debugger. Będzie to miało miejsce tylko raz na sesję logowania.

Co to naprawdę oznacza, to każdy członek grupy _developer, więc tylko twój użytkownik / hasło niebędące administratorem będzie tutaj działał, ale aby się go całkowicie pozbyć (bez monitów po ponownym uruchomieniu), musisz również uruchomić:

sudo DevToolsSecurity -enable

(uruchomienie go z sudo jako użytkownik admin / jako root sprawi, że będzie można to zrobić zdalnie bez pytania o hasło gui)

timofei7
źródło