Авторизовать разработчика без прав администратора в Xcode / Mac OS

109

Я использую стандартную учетную запись пользователя для своих повседневных задач в Mac OS. После обновления до Snow Leopard меня просят сделать следующее, когда программа запускается из Xcode:

«Введите имя и пароль пользователя в группе« Инструменты разработчика », чтобы разрешить доступ к инструментам разработчика для внесения изменений»

Хотя я знаю имя пользователя и пароль администратора, это меня раздражает (хотя требуется только один раз для входа в систему).

При доступе к инструментам разработчика запрашиваются права на «system.privilege.taskport.debug» из приложения gdb-i386-apple-darwin.

Как лучше всего обойти это?

Эндрю Каин
источник

Ответы:

134

Вам необходимо добавить свое имя пользователя OS X в _developerгруппу. Смотрите сообщения в этой теме для получения дополнительной информации. Следующая команда должна помочь:

sudo dscl . append /Groups/_developer GroupMembership <username>
Нед Дейли
источник
1
Это решение работало у меня около 10 минут, а затем по какой-то причине оно снова начало запрашивать мое имя пользователя / пароль. Я снова попытался ввести его в Терминал, но он больше не отвечает.
jowie
Это работает для меня, и до сих пор у меня нет проблем. Отмечено только для справки.
eonil
9
Это решение не работало для меня, пока я не добавил -u <name-of-account-with-root-access>параметры. Итак, моя полная команда былаdscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
dsjoerg
1
Вам следует рассмотреть возможность использования «слияния» вместо «добавления», если вы добавляете эту строку в сценарий непрерывной интеграции. Слияние не добавит его, если он уже существует. См. "Man dscl" для более подробной информации.
Расс Ван Берт
1
Это сработало, чтобы добавить меня в группу, но только после того, как я использовал предложение @Kheldar для сначала su в учетной записи root.
b01
24

Наконец, я смог избавиться от него с помощью DevToolsSecurity -enableтерминала. Спасибо @joar_at_work !

К вашему сведению : я использую Xcode 4.3 и нажал кнопку отключения при его первом запуске, не спрашивайте почему, просто предположите, что моя собака заставила меня сделать это :)

chunkyguy
источник
2
+1 за упоминание DevToolsSecurity. Я понятия не имел, что такой инструмент существует. У меня была противоположная проблема, я хотел снова отключить его, и благодаря этому инструменту я наконец смог :) Просто заменил -enableна, -disableи он работает, как ожидалось!
Mecki
1
Кажется, что эта команда вообще не действует. Xcode 4.3 по-прежнему требует аутентификации от кого-то из группы _developer, независимо от того, используется ли -enable или -disable.
wcochran
Чтобы уточнить, этот шаг, по крайней мере в некоторых случаях, дополняет добавление пользователя в группу _developer с помощьюdscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
Marmoy
Похоже, не работает на macOS "El Capitan" с XCode 7.3. Решение @Kheldar сработало для меня.
Laryx Decidua
9
$ dseditgroup -o edit -u <adminusername> -t user -a <developerusername> _developer
cdespinosa
источник
5
По моему скромному мнению, этот ответ действительно мог бы выиграть, если бы немного подробнее объяснили, что он делает. Не то чтобы мне не нравилось набирать sudo rm -rf / в моей системе, но вы меня поняли. : D
Хелдар
8

Вам следует добавить себя в группу инструментов разработчика. Общий синтаксис для добавления пользователя в группу в OS X следующий:

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

Я считаю, что группа DevTools называется _developer.

Феб
источник
3

Решение Неда Дейли работает отлично, если вашему пользователю это разрешено sudo.

Если это не так, вы можете suвойти в учетную запись администратора, а затем использовать его dscl . append /Groups/_developer GroupMembership $user, где $ user - имя пользователя.

Однако я ошибочно подумал, что это не так, потому что я неправильно ввел имя пользователя в команде, и она молча терпит неудачу.

Следовательно, после ввода этой команды вы должны проверить ее. Это проверит, находится ли $ user в группе $ group, где переменные представляют соответственно имя пользователя и имя группы.

dsmemberutil checkmembership -U $user -G $group

Эта команда либо напечатает сообщение, user is not a member of the groupлибо user is a member of the group.

Kheldar
источник
2
Спасибо! Это сработало для меня! Команды, которые работали для OS X Mavericks, были dscl . append /Groups/_developer GroupMembership username иdsmemberutil checkmembership -U "username goes here" -G "group goes here"
MoralCode
2

Ответ предложен @Stacy Simpson:

Мы боремся с проблемой, описанной в этих потоках, и ни одно из решений, похоже, не работает:

Поскольку я новичок в SO, я не могу публиковать сообщения ни в одной из веток. (Первый фактически закрыт, и я не согласен с соображениями локализации ...)

В любом случае, мы создали обходной путь с использованием AppleScript, который может заинтересовать людей. Приведенный ниже сценарий должен выполняться асинхронно до запуска вашего автоматического теста:

osascript <script name> <password> &

Вот сценарий:

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

Возможно, это не очень безопасно, но это лучший обходной путь, который мы придумали, позволяющий запускать тесты без вмешательства пользователя.

Надеюсь, я смогу набрать достаточно очков, чтобы опубликовать ответ; или кто-то может снять защиту с этого вопроса. С уважением.

оборота Мартин Турьяк
источник
2

Вот лучшее решение от
Mac OS X, которое хочет использовать системную связку ключей при компиляции проекта.

  1. Откройте доступ к связке ключей.
  2. В верхнем левом углу разблокируйте связку ключей (если она заблокирована).
  3. Выберите системный брелок в верхнем левом углу.
  4. Найдите свой сертификат распространения и щелкните треугольник раскрытия.
  5. Дважды щелкните «Закрытый ключ» под своим сертификатом распространения.
  6. Во всплывающем окне перейдите на вкладку Контроль доступа.
  7. Выберите «Разрешить всем приложениям доступ к этому элементу».
  8. Сохраните изменения.
  9. Закройте все окна.
  10. Запустите приложение.
Радж
источник
1

Мне помогло предложение из следующей ветки:

Остановить предупреждение "Для продолжения отладки требуется доступ к инструментам разработчика, чтобы взять под контроль другой процесс"

Он предлагал запустить следующую команду в приложении Терминал :

sudo /usr/sbin/DevToolsSecurity --enable
Майк Гледхилл
источник
1

Я использую Snow Leopard, и этот мне не совсем подходит. Но сработала следующая процедура:

  1. Сначала добавили еще одну учетную запись с правами администратора, отметив «Разрешить пользователю управлять этим компьютером» в разделе «Учетные записи», например учетная запись с проверкой имени пользователя.
  2. Авторизован в тестовой учетной записи
  3. Запустил Xcode, скомпилировал и запустил свой iPhone-проект. Все в порядке, ошибок, связанных с разрешениями, не было
  4. Вы вышли из тестовой учетной записи
  5. Вы вошли в систему с другой учетной записью с правами администратора.
  6. Убрал права администратора с тестовой учетной записи, сняв галочку с «Разрешить пользователю управлять этим компьютером» в разделе «Учетные записи»
  7. Вы снова вошли в тестовую учетную запись
  8. Удалил каталог проекта iPhone и снова выписался из репозитория (в моем случае svn)
  9. Запустил Xcode, скомпилировал и запустил проект. Я не получал никаких ошибок, и приложение работало в симуляторе iPhone.
Навин Кансара
источник
0

После запуска:

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

согласно приведенному выше ответу, вам все равно может быть предложено ввести собственный пароль:

Нам нужна авторизация от администратора для запуска отладчика. Это произойдет только один раз за сеанс входа в систему.

На самом деле это означает, что любой пользователь группы _developer, поэтому здесь будет работать только ваш пользователь / пароль, не являющийся администратором, но чтобы полностью избавиться от него (без запросов после перезагрузки), вам также необходимо запустить:

sudo DevToolsSecurity -enable

(запуск его с помощью sudo от имени администратора / от имени пользователя root сделает это так, чтобы вы могли делать это удаленно без запроса пароля графического интерфейса)

timofei7
источник