2013-04-28 1 views
15

Comment peut-on exécuter un projet sur plusieurs destinations (par exemple, iPhone, iPad et iSimulator) à la fois? Xcode Product optionsXcode multiple destinationsComment créer et exécuter sur plusieurs destinations à la fois dans Xcode?


Il y a 2 questions liées:

  1. Xcode 4 - One Click Build to Multiple Devices?
  2. Run on simulator and phone with one click

La question 1ˢᵗ (soi-disant) a une réponse, mais je ne peux pas comprendre comment exactement devriez-vous utiliser le Aggregate cible (si c'est la bonne direction du tout), et apparemment non plus Josh Kahane, l'OP; la "réponse" est toujours restée acceptée.

La question 2ⁿᵈ a été fermée en tant que "doublon", comme si le 1ˢᵗ avait fourni une réponse (réalisable).


Ajouté une prime: (comment) peut-on utiliser Aggregate cible pour Build & Run simultanée, plusieurs? Peut-être que l'on peut atteindre simultanément Build & Run via un script .sh en utilisant xcodebuild? Toute autre solution possible?

Répondre

14

J'ai rencontré le même problème, j'ai donc écrit un plugin Xcode pour vous aider. Je l'ai trouvé plus robuste et plus facile à invoquer que les options AppleScript.

Le plug-in est appelé KPRunEverywhereXcodePlugin et est disponible via Alcatraz ou sur GitHub: https://github.com/kitschpatrol/KPRunEverywhereXcodePlugin

New menu items

Hope this helps!

+0

Hmmm, merci pour le script, installe bien, mais quand je choisis Run Everywhere, il construit juste, mais ne fonctionne pas sur l'un de mes périphériques branchés? – Smikey

+0

@Smikey, je viens de tester à nouveau le plugin sur Xcode 6 et il semble bien. Si vous rencontrez toujours ce problème, pourriez-vous s'il vous plaît ouvrir un problème avec plus d'informations sur GitHub? https://github.com/kitschpatrol/KPRunEverywhereXcodePlugin – kitschpatrol

+0

Un clic d'installation et tout fonctionne bien! Serait parfait si vous pouviez également inclure un des simulateurs pour fonctionner avec. –

1

Il serait vraiment bien d'avoir plusieurs téléchargements en même temps avec Xcode. Cependant, si je comprends bien, aggregate vous permet seulement de compiler plusieurs cibles, pas les exécuter. Étant donné la deuxième partie de votre question (après la vérification), je peux vous indiquer une autre façon de le faire. Vous n'aurez pas xcode attaché (mais gdb en mode console) et vous devriez être capable de le faire simultanément sur plusieurs appareils, même si ce n'était pas le but principal. Cette solution particulière ne fonctionne pas avec le simulateur, mais il existe d'autres méthodes pour ceux-ci.

launching iOS App from Mac OS X console

+0

Comment feriez-vous pour LLDB? Y compris le simulateur serait aussi génial. @aggregate target, oui c'est ma compréhension aussi. Je ne peux pas comprendre pourquoi la question 1ˢᵗ a une réponse acceptée. – Blaz

+0

Étant donné que GDB est simplement lancé à partir du terminal, l'utilisation de lldb consiste à trouver la commande correcte. – TheThibz

8

Il est en fait plus simple que ce que je pensais. Ce AppleScript met une certaine douleur 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. Save the AppleScript ci-dessus comme .app. (Personnalisez delay s sur votre appareil.)
  2. Créez un nouveau Service dans Automator: choisissez Launch Application et sélectionnez le .app de l'étape précédente.
  3. Enregistrer Service de l'étape précédente et lui donner un raccourci clavier.Conseil: évitez les raccourcis avec ^, car il évoquera cette boîte de dialogue: enter image description here

Certes, ce n'est pas strictement une « Build & Run » simultanée , mais il vaut mieux que bagatelle manuellement entre destinations .

+0

cela fonctionne-t-il encore? J'ai essayé de faire cela et OSX me dit qu'il ne supporte plus le mode classique "parce que l'environnement classique n'est plus supporté" – joon

+0

@joon, fonctionne très bien sur les derniers Mavericks. Je ne suis pas sûr de Yosemite cependant. (Bien que ce soit d'ailleurs le point, puisque je présume que le Classic se réfère à OS 9.) – Blaz

+0

@courteous C'est génial, je le déclenche directement à partir d'automator (ce qui est très bien) puisque sur El Capitan j'ai eu l'erreur suivante " Vous ne pouvez pas ouvrir l'application car les applications PowerPC ne sont plus prises en charge. " et le service n'apparaît pas dans le menu des services de l'application Xcode ...toujours très utile! – Omer

0

Voici un script qui exécutera tous les périphériques actuellement disponibles dans le menu Produit -> Destination. NB: il repose sur les conditions suivantes:

  1. Les appareils sont sélectionnés à partir du produit -> Menu de destination (pourrait changer dans les futures versions de Xcode)
  2. L'élément de menu avant vos périphériques est nommé « My Mac 64- bit »(pourrait changer dans les futures versions de Xcode)
  3. L'élément de menu après vos appareils nommé "iOS Simulator"(deviner quand cela pourrait changer?)

    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 
    
+1

Oldie, mais goodie a été remplacé par https://github.com/kitschpatrol/KPRunEverywhereXcodePlugin. – kalperin

0

Voici un script qui sera créé et exécuté sur tous les appareils iOS connectés. Pour utiliser:

  1. Ouvrez "Automator".
  2. Créer un nouveau "Service".
  3. Sélectionnez "no input" pour "service received selected".
  4. Sélectionnez Xcode pour l'application. Ajoutez une action "Exécuter JavaScript" et collez le script.
  5. Enregistrer en tant que "Exécuter sur tous", vous pouvez maintenant accéder à partir du menu Xcode -> Services de 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); 
    }); 
} 
+0

Salut, cela ne fonctionne pas pour moi. Je sélectionne le service dans xcode et rien ne se passe. Comment puis-je tester cela et vérifier quel est le problème? – ilan

Questions connexes