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

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

С 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

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

- РЕДАКТИРОВАТЬ -

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

enter image description here

Подано радарное сообщение: //10945962.

- РЕДАКТИРОВАТЬ -

Как только в GUI получен ответ на диалог авторизации, запросы перестают появляться в командной строке. Этот вид обходного пути не выглядит как «ответ».

Ответы [ 11 ]

18 голосов
/ 10 июля 2012

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

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

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

  • Mark jenkinsпользователь как администратор (к сожалению, похоже, что другого пути нет)
  • Перейти к / 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-Tests черезСценарий командной строки

12 голосов
/ 13 марта 2012

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

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

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

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

10 голосов
/ 07 января 2014

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

sudo security authorizationdb write system.privilege.taskport allow

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

5 голосов
/ 15 мая 2012

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

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

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

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

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

4 голосов
/ 14 марта 2012

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

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>

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

2 голосов
/ 14 июня 2016

Я тоже сталкивался с этой проблемой на Эль Капитане.Я нашел эту статью очень полезной 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
1 голос
/ 12 ноября 2013
sudo security authorize -u [username]

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

1 голос
/ 24 октября 2013

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

<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>
0 голосов
/ 25 мая 2014

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

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

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

0 голосов
/ 09 августа 2013

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

...