Как запустить приложение командной строки из терминала?

#xcode #macos

#xcode #macos

Вопрос:

Я недавно перешел с Windows на Macbook Pro. Я привыкаю к Xcode. Одна вещь, которая мне бы понравилась, — это запуск приложения отладки в терминале. В настоящее время мне нужно нажать Command R, чтобы оно скомпилировалось и запустилось в Xcode. Чтобы запустить приложение в терминале, я должен выполнить дополнительный шаг, открыв папку Products, щелкните правой кнопкой мыши приложение, затем «Открыть как внешний редактор». Затем терминал открывается и запускает программу.

Я бы хотел, чтобы это поведение работало автоматически, нажав Command R. Мне кажется, что там будет настройка для прямого вывода.

Есть ли какие-либо шаги для достижения этой цели?

Ответ №1:

Сначала создайте новую схему (или отредактируйте текущую) и измените исполняемый файл на Terminal.app:

Информация о схеме

Затем на вкладке «Аргументы» убедитесь, что для вашего приложения установлено значение «Базовые расширения». Затем поместите open -a ${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}

Аргументы схемы 
 

Команда будет расширена до чего-то вроде open -a /Users/Me/Library/Developer/Xcode/DerivedData/MyProj-abcdefghijklmnopqrrstuvwxyz/Build/Products/Debug-iphonesimulator/Universal.app

open -a это то, как вы открываете приложение из командной строки.

Редактировать: использовать ${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME} вместо (см. Комментарии).

Комментарии:

1. Спасибо, хотя он только открывает терминал и, похоже, не выполняет аргумент.

2. Это сработало после изменения аргумента на этот: $ {BUILT_PRODUCTS_DIR} / $ {FULL_PRODUCT_NAME} Спасибо.

3. Как можно передать аргументы этому исполняемому файлу?

4. @Francisco Я полагаю, вы можете просто добавить их в конец команды open -a ${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME} ARG1 ARG2 . Проверьте man open , но я думаю, что все аргументы, указанные после имени приложения, передаются в качестве аргументов непосредственно в приложение.

5. @chown К сожалению, это не так, поскольку Xcode использует open -a.

Ответ №2:

Опираясь на проницательную идею Чауна:

  1. Создайте файл AppleScript, содержащий:

     on run argv
        set product to item 1 of argv
        tell application "Terminal"
            activate
            do script product
        end tell
    end run
      

    Этот AppleScript открывает Terminal.app и запускает первый аргумент командной строки внутри Terminal.app

    В моей конфигурации я сохранил его как runproduct.scpt under $HOME/bin .

  2. Добавьте новую схему (вы можете дублировать свою текущую схему) или отредактируйте свою текущую схему. На вкладке Info установите для исполняемого /usr/bin/osascript файла значение , которое представляет собой программу, выполняющую AppleScripts:

    введите описание изображения здесь

  3. На вкладке Аргументы добавьте два аргумента: местоположение AppleScript ( ${HOME}/bin/runproduct.scpt ) и местоположение целевого исполняемого файла ( "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}" ), причем последний является первым аргументом, переданным AppleScript:

    введите описание изображения здесь

Я не уверен, что это можно заставить работать с отладчиком.

Комментарии:

1. Привет, спасибо за все руководства здесь! Могу ли я каким-либо образом сделать это, чтобы заставить его работать с отладчиком? К сожалению, мне нужно отладить приложение ncurses: (

2. Привет, Томас, я знаю, что уже очень поздно, но в интересах других, после установки точек останова в коде и после запуска нажмите Debug-> Attach to Process и выберите процесс, к которому вы хотите подключить LLDB.

Ответ №3:

В Xcode (по крайней мере, в версии 8) есть флажок «Использовать терминал», доступный из Edit Scheme …> Run> Options> Console. С помощью этой опции Xcode запускает system Terminal.app с подключенным вашим двоичным файлом (например, для целей отладки).

введите описание изображения здесь

Комментарии:

1. Я использую Xcode 9, и область консоли, показанная выше, не отображается на моем экране. Он останавливается при отладке очереди. Есть предложения?

2. @ChuckKrutsinger вы всегда можете установить более старые версии XCode с developer.apple.com/download/more Это неудобно, но в некоторых случаях может помочь. Честно говоря, запуск с терминалом не был идеальным из-за проблем с его запуском иногда (обычно мне приходилось перезапускать терминал после второго запуска, чтобы снова подключиться к нему)