older multiple installed apple iphone ipad build ios-simulator xcode5

iphone - multiple - ¿Cómo ''Build & Run'' en múltiples destinos a la vez en Xcode?



xcode multiple environments (5)

¿Cómo se puede ejecutar un proyecto en múltiples destinos (por ejemplo, iPhone, iPad e iSimulator) a la vez ?

Hay 2 preguntas relacionadas:

  1. Xcode 4 - ¿Construir con un solo clic para múltiples dispositivos?
  2. Ejecutar en simulador y teléfono con un clic

La pregunta 1 (supuestamente) tiene una respuesta, pero no puedo averiguar exactamente cómo se debe usar el objetivo Aggregate (si esta es la dirección correcta), y al parecer tampoco Josh Kahane, el OP; la "respuesta" todavía fue aceptada de alguna manera.

La pregunta 2ⁿᵈ se cerró como un "duplicado", como si la 1ˢᵗ proporcionara una respuesta (viable).

Se agregó una recompensa: (¿cómo) se puede usar un objetivo Aggregate para Build & Run múltiples Build & Run simultáneamente? ¿Tal vez uno pueda lograr simultáneamente la Build & Run múltiple a través de algún script .sh usando xcodebuild ? ¿Alguna otra solución posible?


Aquí hay un script que ejecutará todos los dispositivos actualmente disponibles en su Producto -> Menú de Destino. NB: se basa en las siguientes condiciones:

  1. Los dispositivos se seleccionan desde el menú Producto -> Destino (podría cambiar en futuras versiones de Xcode)
  2. El elemento del menú antes de sus dispositivos se llama "Mi Mac de 64 bits" (podría cambiar en futuras versiones de Xcode)
  3. El elemento de menú después de sus dispositivos se llama "Simulador de iOS" (¿adivina cuándo podría cambiar eso?)

    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


Aquí hay un script que se construirá y ejecutará en todos los dispositivos iOS conectados. Usar:

  1. Abra "Automator".
  2. Crear un nuevo "Servicio".
  3. Seleccione "sin entrada" para "servicio recibe seleccionado".
  4. Seleccione Xcode para la aplicación.
  5. Agrega una acción "Ejecutar JavaScript" y pega el script.
  6. Guardar como "Ejecutar en todos", ahora puede acceder a este desde el menú Xcode -> Servicios desde Xcode.

Javscript:

function run(input, parameters) { var xcode = Application("Xcode"); var ws = xcode.activeWorkspaceDocument(); var genericDest = null; var devices = []; ws.runDestinations().forEach(function(runDest) { if (runDest.platform() != "iphoneos") return; if (runDest.device().generic()) { genericDest = runDest; } else { devices.push(runDest); } }); devices.forEach(function(device) { ws.activeRunDestination = device; var buildResult = ws.run(); while (true) { if (buildResult.completed()) break; if (buildResult.buildLog() && buildResult.buildLog().endsWith("Build succeeded/n")) break; delay(1); } delay(1); }); }


De hecho, sería bueno tener varias subidas a la vez con Xcode. Sin embargo, como lo entiendo, el aggregate solo le permite compilar múltiples objetivos, no ejecutarlos.

Dada la segunda parte de su pregunta (después de la edición) puedo señalarle otra forma de hacerlo. No tendrás xcode adjunto (pero gdb en modo consola) y deberías poder hacerlo simultáneamente en varios dispositivos, aunque este no era el objetivo principal. Esta solución particular no funciona con el simulador, pero hay otros métodos para eso.

lanzando la aplicación iOS desde la consola de Mac OS X


En realidad es más simple de lo que pensaba. Este AppleScript pone un poco de dolor de 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

  1. Guarde el AppleScript anterior como un .app . (Personalice la delay a su máquina).
  2. Cree un nuevo Service en Automator : elija Launch Application y seleccione el .app del paso anterior.
  3. Guarda el Service del paso anterior y dale un atajo de teclado. Sugerencia: evite los accesos directos con ^ , ya que se abrirá este cuadro de diálogo:

Por supuesto, esto no es estrictamente un ''Build & Run'' simultáneo , pero seguro que funciona mejor manualmente entre los destinos.


Me encontré con el mismo problema, así que escribí un complemento de Xcode para ayudar con esto. Me pareció más robusto y más fácil de invocar que las opciones de AppleScript.

El complemento se llama KPRunEverywhereXcodePlugin y está disponible a través de Alcatraz o en GitHub: https://github.com/kitschpatrol/KPRunEverywhereXcodePlugin

¡Espero que esto ayude!