オープンソースのFramework「DTKeychain」をUniversal Binaryビルドして、Script Debugger環境からこれをAppleScriptで呼び出すテストを行なったものです。
–> Download DTKeychain.framework (To ~/Library/Frameworks)
macOS 10.7でKeychain Scriptingが廃止されて以来、shell commandの「security」や、さまざまなCocoa Frameworkを呼び出すようにScript側の対応が迫られてきたわけですが、割とKeychain関連のFrameworkは入れ替わりが激しいジャンルです。
ときて、いまmacOS用のKeychain系のFrameworkとして個人的に注目しているのが、
です。SAMKeychainでひととおりのKeychainの機能を持っていたので、まだ機能が少ないDTKeychainは完全に代わりになってはいないのですが、SAMKeychainで様子を見つつDTKeychainの機能の充実に期待といったところでしょうか。
# DTKeychainもそんなに新しくないプロジェクトではあるものの、SAMKeychainの作者に問い合わせたところ「SAMKeychainはもうメンテしていないので他人に推奨しないでくれ(意訳)」と言われています
AppleScript名:DTKeychainのじっけん 1.scptd |
— – Created by: Takaaki Naganoya – Created on: 2022/05/31 — – Copyright © 2022 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions use framework "DTKeychain" –https://github.com/Cocoanetics/DTKeychain — get shared instance set keychain to current application’s DTKeychain’s sharedInstance() — create a keychain query for generic passwords set query to current application’s DTKeychainGenericPassword’s keychainItemQueryForService:"foo" account:(missing value) –> {class:"genp", svce:"foo"} — retrieve matching keychain items set {itemList, errorRes} to keychain’s keychainItemsMatchingQuery:query |error|:(reference) –> {{}, missing value} if itemList as list is not equal to {} then log errorRes’s localizedDescription() end if |
AppleScript名:DTKeychainのじっけん 2.scptd |
— – Created by: Takaaki Naganoya – Created on: 2022/05/31 — – Copyright © 2022 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions use framework "DTKeychain" –https://github.com/Cocoanetics/DTKeychain — get shared instance set keychain to current application’s DTKeychain’s sharedInstance() — just create a new instance of the generic password and set values set pass to current application’s DTKeychainGenericPassword’s new() pass’s setAccount:"bar" pass’s setService:"foo" pass’s setPassword:"PIYOMARU" — write the new object to the keychain set kRes to keychain’s writeKeychainItem:pass |error|:(missing value) –> true |