Как один сценарий связки ключей через rb-appscript?
Я следовал за документами и написал:
require 'rubygems'
require 'appscript'
loginKeychain = Appscript::app('Keychain Scripting').keychains['login.keychain']
userName = loginKeychain.keys[its.name.eq(name)].password.get
ОБНОВЛЕНИЕ: если я запускаю скрипт через Терминал, он успешно выполняется в первый раз, а затем возвращает ошибку ниже, пока я не выйду и не перезапущу Терминал; и повтори...
Ошибка возвращается периодически:
/Library/Ruby/Gems/1.8/gems/rb-appscript-0.5.3/lib/appscript.rb:539:in `_send_command': CommandError (Appscript::CommandError)
OSERROR: -600
MESSAGE: Application isn't running.
COMMAND: app("/System/Library/ScriptingAdditions/Keychain Scripting.app").keychains["login.keychain"].keys[its.name.eq("a name")].password.get()
ОБНОВЛЕНИЕ 2: из-за таинственной ошибки, и того, что Сценарии цепочки для ключей кажутся глючными вообще, я решил использовать MacRuby. Я нашел библиотеку MacRuby Keychain Wrapper, которая вызывает Keychain Services напрямую, а не через сценарии:
require 'keychain-wrapper/keychain'
MRKeychain::GenericItem.item_for_service(service_name).password
- Легко
- Более эффективным
- Работает без нареканий
Готово.
2 ответа
Я получаю ту же ошибку, но только с вещами, которые требуют аутентификации:
kc = app("Keychain Scripting").keychains["login.keychain"]
p kc.keys[its.name.eq("loginwindow")].name.get
# ["loginwindow"]
p kc.keys[its.name.eq("loginwindow")].password.get
# ... Application isn't running ...
tell app "Keychain Scripting" to password of keys of keychain "login.keychain" where name is "loginwindow"
работает просто отлично.
Я не использовал Ruby, но я использовал Python, и у меня нет проблем. Я бы попробовал сделать обычный Applescript и посмотреть, сможет ли он получить доступ к скриптингу брелка. Если нет, попробуйте перезагрузить Mac. Но это звучит больше как проблема вашего компьютера, чем Appscript.