Как "создать и запустить" в нескольких местах назначения сразу в Xcode?
Как можно запустить проект в нескольких местах назначения (скажем, iPhone, iPad и iSimulator) сразу?
![Xcode Product options]()
![Xcode multiple destinations]()
Есть два связанных вопроса:
Вопрос 1ˢᵗ (предположительно) имеет ответ, но я не могу понять , как именно вы должны использовать цель Aggregate
(если это вообще правильное направление) и, по-видимому, ни Джош Кахане, ни ФП; "ответ" по-прежнему получил/остался принят.
Вопрос 2 was был закрыт как "дубликат", как если бы один из них предоставил (работоспособный) ответ.
Добавлена щедрость: (как) можно использовать цель Aggregate
для одновременного, несколько Build & Run
? Возможно, можно добиться одновременного, множественного Build & Run
с помощью .sh
script с помощью xcodebuild
? Любое другое возможное решение?
Ответы
Ответ 1
Я столкнулся с той же проблемой, поэтому я написал плагин Xcode, чтобы помочь в этом. Я нашел его более надежным и более простым для вызова, чем варианты AppleScript.
Плагин называется KPRunEverywhereXcodePlugin и доступен через Alcatraz или на GitHub: https://github.com/kitschpatrol/KPRunEverywhereXcodePlugin
![New menu items]()
Надеюсь, это поможет!
Ответ 2
На самом деле это проще, чем я думал. Этот AppleScript
вызывает некоторую боль из Xcode
:
tell application "Xcode"
activate
end tell
tell application "System Events"
tell application process "Xcode"
click menu item "1st iDevice Name" of menu 1 of menu item "Destination" of menu 1 of menu bar item "Product" of menu bar 1
click menu item "Run" of menu 1 of menu bar item "Product" of menu bar 1
delay 5
click menu item "2nd iDevice Name" of menu 1 of menu item "Destination" of menu 1 of menu bar item "Product" of menu bar 1
click menu item "Run" of menu 1 of menu bar item "Product" of menu bar 1
delay 5
click menu item "iPhone 6.1 Simulator" of menu 1 of menu item "Destination" of menu 1 of menu bar item "Product" of menu bar 1
click menu item "Run" of menu 1 of menu bar item "Product" of menu bar 1
end tell
end tell
- Сохраните выше
AppleScript
как .app
. (Настройте delay
на свой компьютер.)
- Создайте новый
Service
в Automator
: выберите Launch Application
и выберите .app
с предыдущего шага.
- Сохранить
Service
с предыдущего шага и дать ему комбинацию клавиш. Совет: избегайте ярлыков с ^, так как это вызовет диалог:
![enter image description here]()
Конечно, это не является строго одновременным "Build and Run", но он уверен, что он путается вручную между получателями.
Ответ 3
Было бы неплохо иметь сразу несколько загрузок с Xcode. Однако, как я понимаю, aggregate
позволяет вам скомпилировать несколько целей, а не запускать их.
Учитывая вторую часть вопроса (после редактирования), я могу указать вам на другой способ сделать это. У вас не будет прикрепленного xcode (но gdb в режиме консоли), и вы сможете сделать его одновременным на нескольких устройствах, хотя это не было основной целью. Это конкретное решение не работает с симулятором, но для других есть другие методы.
запуск приложения iOS из консоли Mac OS X
Ответ 4
Здесь script, который будет запускать все устройства, доступные в настоящее время в меню Product → Destination. NB: он полагается на следующие условия:
- Устройства выбираются из меню Product → Destination (можно изменить в будущих версиях Xcode)
- Элемент меню перед вашими устройствами называется "Мой Mac 64-бит" (может измениться в будущих версиях Xcode)
-
Пункт меню после того, как ваши устройства называются "iOS Simulator" (предположим, когда это может измениться?)
tell application "Xcode"
activate
end tell
tell application "System Events"
tell process "Xcode"
set deviceMenu to menu 1 of menu item "Destination" of menu 1 of menu bar item "Product" of menu bar 1
set allUIElements to entire contents of deviceMenu
set startAfterName to "My Mac 64–bit"
set stopName to "iOS Simulator"
set started to false
repeat with anElement in allUIElements
try
set menuName to name of anElement
if menuName is equal to stopName then
set started to false
exit repeat
else if menuName is equal to startAfterName then
set started to true
else if started then
click menu item menuName of menu 1 of menu item "Destination" of menu 1 of menu bar item "Product" of menu bar 1
click menu item "Run" of menu 1 of menu bar item "Product" of menu bar 1
delay 5
end if
end try
end repeat
end tell
end tell