簡體   English   中英

在我的 Swift 項目中加載本地 .scpt 文件會導致錯誤

[英]Loading a local .scpt file in my Swift project causes error

我正在測試一個 Mac 應用程序,試圖加載我的hello.scpt文件,該文件位於/scripts目錄中我的 Xcode 項目中

# even though it's in the scripts folder, `path` will be nil unless the resource value is "hello"
let path = Bundle.main.path(forResource: "hello", ofType: "scpt")
let url = URL(fileURLWithPath: path!)
let scriptObject = try? NSUserAppleScriptTask(url: url)
scriptObject?.execute { handler in
     print(handler)
}

錯誤:

可選(錯誤域=NSCocoaErrorDomain Code=257“無法打開文件“hello.scpt”,因為您沒有查看它的權限。” UserInfo={NSURL=file:///Users/me/Library/ Developer/Xcode/DerivedData/app-gidwjssyedvwuyfcncsjkfroqdjp/Build/Products/Debug/myApp.app/Contents/Resources/test.scpt, NSLocalizedFailureReason=腳本文件不在應用程序腳本文件夾中。})

我在下面嘗試了 vadian 的響應,創建了一個名為NSApplicationScriptsDirectory的文件夾,這看起來很奇怪。 還嘗試在Info.plist NSApplicationScriptsDirectory指定密鑰,將./scripts/文件的不同變體指定為密鑰,但這里沒有運氣。

這是一個簡單的沙盒應用程序,帶有一個 Hello World 腳本,它只是將“Hello world”打印到stdout

我怎樣才能加載這個 AppleScript 並讓它在沒有錯誤的情況下工作?

謝謝!

編輯:我也嘗試將它作為hello.scpt放在我的~/Library/Scripts文件夾中,但這也不起作用

錯誤很明顯:

腳本文件不在應用程序腳本文件夾中


來自NSUserAppleScriptTask文檔

NSUserAppleScriptTask類旨在從您的應用程序運行 AppleScript 腳本。 它旨在執行用戶提供的腳本,並將在應用程序的沙箱之外執行它們(如果有)。

該類不打算執行內置於應用程序中的腳本; 為此,請使用 NSTask 類之一。 如果應用程序被沙盒化,那么腳本必須在NSApplicationScriptsDirectory文件夾中 沙盒應用程序可以讀取但不能寫入此文件夾。

如果您只需要執行腳本而不考慮輸入或輸出,請使用NSUserScriptTask ,它可以執行任何特定類型。 如果您需要對腳本的輸入或輸出進行特定控制,請使用此類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM