Есть ли способ удалить приглашение авторизации из экземпляров командной строки инструментов (XCode)?

В настоящее время я использую инструменты через bash script, чтобы инициировать интерфейс командной строки для запуска прогонов модуля автоматизации.

С 4.2 это работало достаточно хорошо, однако с обновлением до Xcode 4.3 мне теперь предлагается уполномоченный пользователь "анализировать другие процессы". Ни один пользователь на самом деле не аутентифицирован, даже если предоставляются правильные учетные данные. Я получаю следующую ошибку:

Failed to authorize rights (0x20) with status: -60007.
2012-02-27 19:30:37.232 instruments[54151:1c03] Failed to connect to local pid watcher     service: (os/kern) failure

Даже при сбое аутентификации подключается модуль автоматизации, однако для этого требуется, чтобы мой script имел учетную запись физической няни, которая во многом проигрывает цели этих прогонов командной строки. Возможно ли добавить данные пользователя в качестве аргументов? Или есть какой-то другой способ пропустить это приглашение, не требуя от человека клавиш?

- EDIT -

Этот диалог авторизации появляется при первом запуске тестов UIAutomation из графического интерфейса.

enter image description here

Передано радар rdar://10945962.

- EDIT -

После ответа на авторизацию в графическом интерфейсе в командной строке перестают появляться сообщения. Этот вид работы не кажется действительным как "ответ".

Ответ 1

Вот замечательная команда, которая может работать для вас:

security unlock-keychain -p [password] "${HOME}/Library/Keychains/login.keychain"

Это способ командной строки для доступа к цепочке ключей на Mac. Я не тестировал его с помощью Automation, но я как-то интегрировал свои сборки iOS с Jenkins.

(Замените [пароль] на пароль)

Ответ 2

Хорошо, я думаю, что у меня все получилось.

Ниже приведена подробная информация о том, как удалить запрос командной строки командной строки xcode

Я сделал следующее:

  • Отметить пользователя jenkins как admin (к сожалению, похоже, что нет другого способа atm)
  • Перейдите к /etc/authorization
  • поиск ключа system.privilige.taskport
  • измените значение allow-root на true

    <key>system.privilege.taskport</key>
    <dict>
        <key>allow-root</key>
        <false/> // change to -> <true>
        <key>class</key>
        <string>user</string>
        <key>comment</key>
        <string>Used by task_for_pid(...).
        ...
    </dict>
    

Теперь я могу использовать jenkins для запуска тестов UIAutomation через командную строку Script

Ответ 3

Добавляя к ответ Alexander, я обнаружил, что для Mavericks из-за способа авторизации обрабатываются (источник), вы должны сделать следующее:

sudo security authorizationdb write system.privilege.taskport allow

Я запускаю функциональные тесты цукини через задание Дженкинса в VMWare VM, и подчиненный не смог правильно запустить симулятор и повесился на заставке, вероятно, из-за неправильных авторизаций. Это помогло мне решить эту проблему, надеюсь, что это поможет другим.

Ответ 4

Пользователь, которому работает ваш script, должен иметь право использовать инструменты разработчика. Вы можете сделать это двумя способами:

  • Добавьте пользователя в группу _developer: sudo dscl . append /Groups/_developer GroupMembership scriptusername

  • Используйте инструмент командной строки DevToolsSecurity

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

Эти две вещи - две из четырех или пяти секретов использования UIAutomation с Дженкинсом.

Ответ 5

Я частично решил эту проблему. Я запускаю инструменты из командной строки и имею приглашение авторизации в GUI (один раз за сеанс) + это на консоли (каждый раз, когда я запускаю инструменты):

Instruments: Instruments wants permission to analyze other processes.
Type your password to allow this.
Name ([my-username]):
Password:

Failed to authorize rights (0x20) with status: -60007.
2012-02-28 10:04:19.607 instruments[60398:1203] Failed to connect to
local pid watcher service: (os/kern) failure

Я сравнивал файл /etc/authorization до и после обновления до xCode 4.3. Apple заменила два ключа:

<key>com.apple.dt.instruments.process.analysis</key>
<key>com.apple.dt.instruments.process.kill</key>

с

<key>com.apple.instruments.process.analysis</key>

Я отредактировал /etc/authorization, добавил недостающие ключи ниже нового, и проблема с консоли решена. К сожалению, приглашение GUI все еще существует.

Mising keys:

<key>com.apple.dt.instruments.process.analysis</key>
<dict>
    <key>allow-root</key>
    <true/>
    <key>class</key>
    <string>user</string>
    <key>comment</key>
    <string>Rights for Instruments</string>
    <key>group</key>
    <string>admin</string>
    <key>shared</key>
    <true/>
    <key>timeout</key>
    <integer>36000</integer>
    </dict>
<key>com.apple.dt.instruments.process.kill</key>
<dict>
    <key>allow-root</key>
    <true/>
    <key>class</key>
    <string>user</string>
    <key>comment</key>
    <string>Rights for Instruments</string>
    <key>group</key>
    <string>admin</string>
    <key>shared</key>
    <true/>
    <key>timeout</key>
    <integer>5</integer>
</dict>

Надеюсь, это укажет вам на решение всей проблемы.

Ответ 6

Я также столкнулся с этой проблемой в El Capitan. Я нашел эту статью очень полезной https://www.dssw.co.uk/reference/authorization-rights/. Исходя из этого, я изменил следующие права для решения этой проблемы:

system.privilege.taskport
system.privilege.taskport.debug
system.privilege.taskport.safe
com.apple.dt.instruments.process.analysis
com.apple.dt.instruments.process.kill

Ответ 7

Это решение сработало для меня:

<key>system.privilege.taskport</key>
<dict>
<key>allow-root</key>
<false/> 
<key>class</key>
<string>user</string> // change to -> allow
<key>comment</key>
<string>Used by task_for_pid(...).
...
</dict>

Ответ 8

sudo security authorize -u [username]

работал у меня.

Ответ 9

Я также попытался разблокировать ключ-ключ и изменил файл /etc/authorization и включил DevToolsSecurity, но никто из них не работал, пока я не запустил приложение "Инструменты" и не запустил мой script, из которого он вытащил и я ввел свой пароль, после этого, когда я запустил инструменты script, он больше не требует пароля!

Ответ 10

В Xcode - если вы загружаете организатор (Xcode- > Window- > Organizer)

Затем выберите устройство под устройствами → "Включить режим разработчика"

Это должно устранить необходимость в подсказках с инструментами.

Ответ 11

Я попробовал разблокировку ключей и редактировал файл /etc/authorization, но ни один из них не работал.

В конце концов, единственное, что удалило это приглашение безопасности, это то, что предложил jacekmigacz в комментарии, для запуска "sudo DevToolsSecurity --enable".