我對 Mac OSX 相當陌生,我正在嘗試創建一個 .app 檔案以在 Applications 檔案夾中運行。我正在使用 MacOS Big Sur,這將只在 Mac 上運行(它不需要跨平臺)。有一個通過運行 shell 腳本來執行的 jar 檔案,以及一些額外的資源檔案,所以最終我想將它們全部捆綁在一個 dmg 之類的東西中,以便我可以輕松地與其他一些人共享它.
我按照此處和此處給出的建議進行了設定,幾乎一切正常。當我雙擊 .app 檔案時程式啟動,但沒有終端視窗。不幸的是,我需要打開終端視窗,因為我用它來向用戶記錄訊息。
終端是 shell 腳本的默認應用程式,當我通過雙擊直接運行 shell 腳本時,會打開一個終端。該腳本檔案使用 .sh 擴展名,但沒有擴展名,但如果腳本具有 .sh 擴展名,我在嘗試運行 .app 時會出錯。一切都有執行權限。我瀏覽了 Info.plist 檔案,但找不到有關終端的任何資訊。我還嘗試使用 Automator 創建 .app,但結果相同。
任何建議將不勝感激,因為目前我完全陷入困境。正如我所說,最終我希望有一種方式與其他可能不太精通計算機的人分享這個(例如,他們習慣于從 App Store 下載東西并且無法使用命令安裝東西線)。因此,如果我對這一切都做錯了或者有更簡單的方法,那么也請告訴我。
uj5u.com熱心網友回復:
不幸的是,我需要打開終端視窗,因為我用它來向用戶記錄訊息。
如果這就是你想要的終端應用程式,那么你就不需要它了。
終端應用程式是一個 GUI 應用程式,它使用標準作業系統呼叫運行 shell,通過管道將鍵盤輸入傳遞給該 shell(以及它依次呼叫的任何命令),并讀取 shell 的輸出(因此......)并將其顯示在視窗中。
您可以直接從自己的應用程式運行 shell 腳本,收集輸出,然后在應用程式的視窗中顯示該輸出。
在 Objective-C 中,您要查找的類是NSTask,運行一個 shell,將您的 shell 腳本傳遞給它,以及NSPipe創建所需的管道。
有很多關于NSTask/的問答NSPipe,這里是一個,這里是另一個使用 Swift 的。
請注意,以上兩者都在將其轉換為字串之前讀取了所有輸出,然后可以將其顯示在視窗中或以其他方式進行處理。這不是必需的,如果您有一個長時間運行的 shell 腳本并希望在它運行時顯示輸出,您可以從管道中讀取較短的塊。閱讀檔案以了解如何執行此操作。
uj5u.com熱心網友回復:
我正在發布我的解決方案,以防將來對任何人有所幫助。正如評論/答案所說,我真正需要知道的是如何讓我的應用程式打開終端視窗。顯然,通過手動創建應用程式(創建檔案夾結構和最小的 Info.plist),我遺漏了一些關鍵元素。
我嘗試使用 Xcode 生成一個。我確信這很簡單,但我在嘗試撰寫 Swift 代碼時陷入了困境。
對我有用的是使用腳本編輯器創建 AppleScript。該腳本只是告訴終端程式運行我的 bash 腳本:
tell application "Terminal"
do script "/Applications/{name of app}/Contents/MacOS/run.sh;exit"
end tell
關鍵是腳本編輯器可以將其作為應用程式保存到 Applications 檔案夾中,這意味著它會創建必要的檔案夾結構和檔案。之后,我可以將我的程式檔案復制到 MacOS 檔案夾中,這是我的 bash 腳本查找所有內容的地方。
uj5u.com熱心網友回復:
一種選擇可能是為腳本檔案提供擴展名.command,例如,然后open,例如:
open myscript.command
該myscript.command檔案需要執行權限 ( chmod a x myscript.command)。
這些.command檔案也可以在 Finder 中雙擊以在新的終端視窗中執行它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341825.html
上一篇:osascript'doshellscript'行結尾
下一篇:顯示并行運行的腳本的進度
