我将通过Mac应用程序和以及该应用程序的扩展程序运行用户提供的脚本。该应用程序和扩展名都属于同一个应用程序组,并且分别具有运行脚本的正确权利。
Mac应用已沙盒化。根据Apple的说法,所有脚本都必须位于“应用程序脚本”目录中:. applicationScriptsDirectory
/ NSApplicationScriptsDirectory
。
NSUserAppleScriptTask类旨在从您的应用程序运行AppleScript脚本。它旨在执行用户提供的脚本,并将在应用程序的沙箱(如果有)之外执行它们。
如果应用程序已被沙箱化,则脚本必须位于
NSApplicationScriptsDirectory
文件夹中。沙盒应用程序可以读取但不能写入此文件夹。https://developer.apple.com/documentation/foundation/nsuserapplescripttask
我面临的问题是主应用程序和应用程序扩展程序可以解决不同的NSApplicationScriptsDirectories:
let applicationScripts = try! FileManager.default.url(for: .applicationScriptsDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
不同的目录:
- ~/Library/Application Scripts/com.company.MainApp
- ~/Library/Application Scripts/com.company.MainAppFinderSync
我想从App和Extension中运行相同的脚本。它可以从每个组件自己的“应用程序脚本”目录中启动脚本,但是如果脚本位于另一个组件的目录中,则不启动。
在两个位置都具有匹配的脚本的情况下,保持同步目录结构并不理想。引导用户将脚本放置在正确的位置也很困难,因为主应用程序的“首选项”指南无法打开扩展程序的脚本目录。
应用组为其他常见的应用/扩展方案(例如,通过NSUserDefaults共享数据)解决了此问题:
启用应用程序组后,应用程序扩展及其包含的应用程序都可以使用NSUserDefaults API共享对用户首选项的访问。
是否可以在属于同一应用程序组的应用程序和扩展之间共享应用程序脚本文件夹?