PermissionsKit.frameworkの機能を呼び出して、実行中のアプリケーションがフルディスクアクセスの権限を持っているかどうか確認を行い、持っていなかった場合には権限を許可してもらえることを願ってシステム環境設定の「セキュリティとプライバシー」>「セキュリティ」を表示します。
–> Download PermissionsKit_tester(Code-Signed Executable Applet with Framework in its bundle)
だいたいはサンプルのObjective-CのプログラムをAppleScriptに翻訳して実行しているだけですが、1箇所だけ発見がありました。
ご存知のとおりBlocks構文はAppleScriptでは書けないので、Blocks構文の記述が要求されるAPIはAppleScriptから呼び出せません。
本FrameworkのAPIも権限を要求するときにBlocks構文の記述が求められるのですが、ためしにBlocks(^)の記述を要求される箇所にヌルを指定してみたところ、、、、動きました(^ー^;;;;;;
# なんでも効くわけではないようです
あー、Blocks構文のところにヌルを指定すると動くんだー。処理終了時に実行する内容をBlocksの中に書くのを、何も書かないことで同期実行とほぼ同じ扱いができるんじゃないかと。いろいろ試してみると発見があるかもしれません。
# 今日、Edama2さんと世間話していたら「パラメータとしてBlocks構文を必要とされる箇所にmissing valueを入れて動いたケースもあったよ」とのこと。そういうの重要なので教えてほしかったー(T_T)
PermissionsKit.frameworkでは各種権限設定の確認と要求が行えるようにはなっているのですが、フルディスクアクセス以外はすべてクラッシュして動かなかったので、フルディスクアクセスの権限確認&要求専用とみなしています。
AppleScript名:PermissionsKitでユーザー権限のチェックとリクエスト(フルディスクアクセス).scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/12/19 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use framework "PermissionsKit" –https://github.com/MacPaw/PermissionsKit use scripting additions property MPPermissionTypeCalendar : 0 property MPPermissionTypeReminders : 1 property MPPermissionTypeContacts : 2 property MPPermissionTypePhotos : 3 property MPPermissionTypeFullDiskAccess : 4 –MPPermissionTypeFullDiskAccess 以外はクラッシュして処理継続できなかった set aPerm to current application’s MPPermissionsKit’s alloc()’s init() set pRes to current application’s MPPermissionsKit’s authorizationStatusForPermissionType:(MPPermissionTypeFullDiskAccess) set sRes to getStatus(pRes) of me log sRes if pRes is not equal to 0 then set pRes to current application’s MPPermissionsKit’s requestAuthorizationForPermissionType:(MPPermissionTypeFullDiskAccess) withCompletion:"" end if on getStatus(aFlag) if aFlag = 0 then return "Denied" –拒否された else if aFlag = 1 then return "Authorized" –承認ずみ else if aFlag = 2 then return "Not determined" –未定 end if end getStatus |