我正在為 macOS 構建一個應用程式,對于它的一些功能,我依賴于呼叫 AppleScript:
let appleScript = NSAppleScript(source: theScriptIWantToExecute)
var errorDict: NSDictionary? = nil
let possibleResult = appleScript?.executeAndReturnError(&errorDict)
現在我發現,在某些應用程式的某些情況下,某些腳本在失敗時會導致整個應用程式崩潰,而不是拋出錯誤。雖然腳本失敗很糟糕,但整個 UI 崩潰并不是那么重要。
我的想法是將“Apple Script Execution”部分分離成一個完全獨立的行程,由主應用程式呼叫。萬一它崩潰了,它可以簡單地重新啟動,而不會對主應用程式產生任何影響。
我一直在想什么是最好的解決方案。由于它或多或少是一個功能問題,我一直很想使用命令列工具,但如果我沒記錯的話,命令列工具只會回傳文本。我寧愿回傳一些物件。但我真的不需要服務。
XPC 似乎支持這一點,但更傾向于服務。
在仍然能夠使用高級物件的同時,將我的主應用程式與這些崩潰隔離開來的最佳方法是什么?
對于那些對我如何修復它感興趣的人:
- 創建一個單獨的 XPC 專案(模板代碼很好開始)
- 創建一個單獨的專案,其中包含您要“跨橋”共享的所有型別并將其匯入兩個目標
如果您不共享型別,您將遇到很多令人困惑的構建和運行時問題。
uj5u.com熱心網友回復:
您可以使用XPC 服務來做到這一點。事實上,“穩定性”是蘋果創建 XPC 服務的兩個關鍵原因之一。因此,如果這種不穩定性是不可避免的,那么創建 XPC 服務是解決此問題的好方法。
Apple 提供了兩種與 XPC 服務通信的主要方式:他們的XPC C 框架和他們的
Objective-C 框架,通常被稱為
NSXPCConnectionAPI。雖然兩者都可以在 Swift 中使用其內置的語言橋接功能,但在 Swift 中使用都不是特別愉快。我創建了SecureXPC,它是從頭開始為 Swift 撰寫的,我認為它更容易使用并且更好用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/504430.html
