Встраивайте сценарий оболочки bash в приложение AppleScriptObjC с помощью Xcode

Я попытался выполнить инструкции на этот пост, но я не понимаю, как работают некоторые инструкции для плакатов.

Я хочу иметь возможность упаковать приложение с заранее написанным сценарием bash, а затем выполнить его, но не выполняю действия, начиная с шага 4 и далее.


Сообщение пишет:

4. Также в свой сценарий AppleScriptObjC добавьте следующее, где это необходимо:

    property pathToResources : "NSString"  -- works if added before script command

5. При необходимости добавьте в свой сценарий AppleScriptObjC следующее:

    set yourScript to pathToResources & "/yourScriptFile.sh" 
    -- gives the complete unix path
    -- if needed, you can convert this to the Apple style path:
    set yourScriptPath to (((yourScript as text) as POSIX file) as alias)`

6. Кроме того, вы можете открыть файл для чтения с помощью

    tell application "Finder"
        open yourScriptPath
    end tell

Вопросов:

  1. Куда добавить строчку:

    property pathToResources : "NSString"
    
  2. Могу ли я добавить, что из перечисленного и где?

    set yourScript to pathToResources & "/yourScriptFile.sh" 
    

    OR

    set yourScriptPath to (((yourScript as text) as POSIX file) as alias)
    
  3. Как можно выполнить сам скрипт? Упоминание As an aside, you could then open the file for read using относится только к стилю Apple, но не к использованию вышеупомянутого стиля.


Может ли кто-нибудь пролить свет на это для меня или опубликовать статическую копию файла AppDelegate.applescript, который показывает, как исходный плакат требовал использования базового кода? Я пробовал его метод и просматривал Интернет последние 3 недели, но безрезультатно. Я не хочу конвертировать весь мой код для конкретных инструментов из сценариев bash в AppleScript, так как это потребует много работы.

Мне нужно только знать, как ссылаться на файл сценария (например, myBashScript.sh) в моем приложении, который будет находиться в приложении и включаться Xcode во время компиляции.


person Danijel-James W    schedule 02.11.2013    source источник


Ответы (2)


Думаю, вам стоит использовать команду path to resource <specifiedResource>.

См. Стандартные дополнения, path to resource.

Вы можете установить его с помощью set myVariableName to path to resource "myBashScript.sh" или просто использовать команду вместо своего свойства, чтобы оно всегда указывало на нужное место (пользователь мог перемещать ваше приложение во время работы ... lol).


ДОБАВЛЕНИЕ:

Я сделал это в своем AppleScript-приложении:

on run_scriptfile(this_scriptfile)
    try
        set the script_file to path to resource this_scriptfile
        return (run script script_file)
    end try
    return false
end run_scriptfile

Всякий раз, когда я хочу запустить сценарий, связанный с моим приложением, я делаю следующее:

if my run_scriptfile("TestScript.scpt") is false then error number -128

run_scriptfile(this_scriptfile) возвращает true, когда все заработало.

person Community    schedule 03.11.2013
comment
Вы можете показать мне пример этого? Вот pastebin для пустого приложения: pastebin.com/6BZr5e8L - person Danijel-James W; 04.11.2013
comment
Откройте редактор AppleScript, нажмите shift-command-l, чтобы увидеть библиотеку, откройте «Стандартные дополнения» и найдите путь к ресурсу. Прочтите эту информацию. - person ; 04.11.2013
comment
Что вы имеете в виду под or just use the command instead of your property? - person Danijel-James W; 04.11.2013
comment
Кстати: я использовал AppleScript Editor для создания своего приложения, так что, может быть, здесь все по-другому. Но вы увидите, работает ли это. - person ; 04.11.2013

В итоге я собрал всю информацию и теперь нашел решение.


При этом учитываются следующие факты:

firstScript = имя переменной, которая указывает на сценарий с именем scriptNumberOne.sh
scriptNumberOne.sh = сценарий, который я встроил в свое приложение для запуска
ButtonHandlerRunScript_ = имя Полученное действие в Xcode
pathToResources = переменная, которая указывает на внутреннюю папку ресурсов моего приложения, независимо от ее текущего местоположения

Используя эту информацию, ниже представлена ​​копия vanilla AppDelegate.applescript в моем проекте AppleScriptObjC Xcode:

script AppDelegate
property parent : class "NSObject"
property pathToResources : "NSString"

on applicationWillFinishLaunching_(aNotification)
    set pathToResources to (current application's class "NSBundle"'s mainBundle()'s resourcePath()) as string
end applicationWillFinishLaunching_

on ButtonHandlerRunScript_(sender)
    set firstScript to pathToResources & "/scriptNumberOne.sh"
    do shell script firstScript
end ButtonHandlerRunScript_

on applicationShouldTerminate_(sender)
    -- Insert code here to do any housekeeping before your application quits 
    return current application's NSTerminateNow
end applicationShouldTerminate_

end script
person Danijel-James W    schedule 05.11.2013